Payments
/api/pay/v1/paymentsNewest first, cursor-paginated.
Authorization
bearerKey Authorization: Bearer clpay_live_<64 hex> for the checkout routes,
Authorization: Bearer clpay_payout_<64 hex> for the payout routes.
The wrong class on a route is PAY_WRONG_KEY_KIND (403).
A key may additionally carry an IP allowlist set in the business
console. Empty (the default) places no restriction; with entries, a
call from an unlisted address is UNAUTHORIZED (401).
In: header
Query Parameters
1 <= value <= 10025next_cursor from the previous page.
Filter by coin slug (e.g. usdt).
ISO 8601 lower bound on paid_at.
date-timedate-timeResponse Body
application/json
curl -X GET "https://example.com/api/pay/v1/payments"{ "data": [ { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "receipt_no": "string", "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82", "reference_id": "string", "status": "completed", "currency": "string", "amount": "string", "charged_amount": "string", "fee_amount": "string", "fee_bearer": "merchant", "net_amount": "string", "usd_value": "string", "payer_id": "7bded2ff-6743-4a0e-a147-77540fb16606", "metadata": {}, "receipt": "string", "paid_at": "2019-08-24T14:15:22Z" } ], "next_cursor": "string"}/api/pay/v1/payments/{id}The authoritative record — what webhooks tell you to come read.
Authorization
bearerKey Authorization: Bearer clpay_live_<64 hex> for the checkout routes,
Authorization: Bearer clpay_payout_<64 hex> for the payout routes.
The wrong class on a route is PAY_WRONG_KEY_KIND (403).
A key may additionally carry an IP allowlist set in the business
console. Empty (the default) places no restriction; with entries, a
call from an unlisted address is UNAUTHORIZED (401).
In: header
Path Parameters
Payment id (UUID) or receipt number (CLP-…).
Response Body
application/json
application/json
curl -X GET "https://example.com/api/pay/v1/payments/string"{ "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "receipt_no": "string", "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82", "reference_id": "string", "status": "completed", "currency": "string", "amount": "string", "charged_amount": "string", "fee_amount": "string", "fee_bearer": "merchant", "net_amount": "string", "usd_value": "string", "payer_id": "7bded2ff-6743-4a0e-a147-77540fb16606", "metadata": {}, "receipt": "string", "paid_at": "2019-08-24T14:15:22Z"}/api/pay/v1/receipts/verifyChecks the token's signature against YOUR receipt signing secret and that the payment exists with matching facts. Prefer offline verification (same HMAC, your secret, no network hop) — this endpoint is for stacks that would rather not implement it.
It also accepts a token signed with your PREVIOUS receipt secret while that rotation window is open, and it stays authoritative for older tokens after the window closes: it verifies against the payment record, not against a key you hold.
Authorization
bearerKey Authorization: Bearer clpay_live_<64 hex> for the checkout routes,
Authorization: Bearer clpay_payout_<64 hex> for the payout routes.
The wrong class on a route is PAY_WRONG_KEY_KIND (403).
A key may additionally carry an IP allowlist set in the business
console. Empty (the default) places no restriction; with entries, a
call from an unlisted address is UNAUTHORIZED (401).
In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://example.com/api/pay/v1/receipts/verify" \ -H "Content-Type: application/json" \ -d '{ "receipt": "string" }'{ "valid": true, "payment": { "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08", "receipt_no": "string", "session_id": "1ffd059c-17ea-40a8-8aef-70fd0307db82", "reference_id": "string", "status": "completed", "currency": "string", "amount": "string", "charged_amount": "string", "fee_amount": "string", "fee_bearer": "merchant", "net_amount": "string", "usd_value": "string", "payer_id": "7bded2ff-6743-4a0e-a147-77540fb16606", "metadata": {}, "receipt": "string", "paid_at": "2019-08-24T14:15:22Z" }}