Payments API

Payment processing endpoints for AP2 and ACP transactions.

Process Payment

POST /payments

Request Body

ParameterTypeRequiredDescription
mandate_idstringYesThe mandate authorizing this payment
amountnumberYesAmount in smallest currency unit
currencystringNoCurrency code (default: USD)
payment_methodstringNoPayment method type
idempotency_keystringYesUnique key for deduplication
metadataobjectNoCustom key-value pairs

Example

curl -X POST https://api.soft.house/payments \
  -H "Authorization: Bearer sk_live_..." \
  -H "Content-Type: application/json" \
  -d '{
    "mandate_id": "mnd_abc123",
    "amount": 119999,
    "currency": "usd",
    "idempotency_key": "pay_unique_456"
  }'

Response (201 Created)

{
  "data": {
    "id": "pay_xyz789",
    "mandate_id": "mnd_abc123",
    "amount": 119999,
    "currency": "usd",
    "status": "succeeded",
    "protocol_type": "ap2",
    "created_at": "2026-01-20T10:35:00Z"
  }
}

List Payments

GET /payments

Query Parameters

ParameterTypeDescription
statusstringFilter by payment status
mandate_idstringFilter by mandate
limitnumberItems per page
offsetnumberPagination offset

Get Payment

GET /payments/:id

Payment Statuses

StatusDescription
pendingPayment initiated
processingBeing processed by payment provider
succeededSuccessfully completed
failedPayment failed
refundedPayment was refunded

Idempotency

All payment operations require an idempotency_key. If a request with the same key is received within 24 hours, the original response is returned without reprocessing.

# First request - processes payment
curl -X POST https://api.soft.house/payments \
  -H "Idempotency-Key: pay_unique_456" \
  -d '{ ... }'

# Duplicate request - returns cached response
curl -X POST https://api.soft.house/payments \
  -H "Idempotency-Key: pay_unique_456" \
  -d '{ ... }'
# Returns same response, no duplicate charge