Customers
/api/pay/v1/customers/{customer_id}/bindingThe live binding for YOUR customer id, if any. state: "none" with a
null binding means no live binding — the next payment runs the
widget ceremony. The Coinland account behind a binding is only ever a
MASKED name; this API never reveals the full name or Coinland email.
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
YOUR internal user id for the customer — the customer.id you send on create-session.
Response Body
application/json
curl -X GET "https://example.com/api/pay/v1/customers/string/binding"{ "customer_id": "string", "state": "none", "binding": { "binding_id": "5d504e2c-6584-4e34-8583-0863b8c4c0c1", "customer_id": "string", "payer_id": "7bded2ff-6743-4a0e-a147-77540fb16606", "masked_name": "string", "supplied_name": "string", "supplied_name_native": "string", "supplied_email": "string", "status": "active", "match_score": "string", "match_passed": true, "bound_at": "2019-08-24T14:15:22Z", "reviewed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" }}/api/pay/v1/customers/{customer_id}/bindingSever the link — "this Coinland account no longer belongs to this customer of ours". The reason is REQUIRED and kept on record. The customer's next payment runs a fresh ceremony; there is deliberately no way to name a replacement account, because the new person proves themselves through the ceremony instead.
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
YOUR internal user id for the customer — the customer.id you send on create-session.
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X DELETE "https://example.com/api/pay/v1/customers/string/binding" \ -H "Content-Type: application/json" \ -d '{ "reason": "string" }'{ "customer_id": "string", "state": "revoked"}/api/pay/v1/customers/{customer_id}/binding/reviewA binding whose name check failed waits in your review queue and that
customer CANNOT pay until you decide (binding.review webhook).
approve means you vouch for the identity — the binding activates and
the customer pays without re-running the ceremony. reject (reason
REQUIRED) retires it; the next payment starts fresh. The business
console's Customers tab offers the same decision.
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
YOUR internal user id for the customer — the customer.id you send on create-session.
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/customers/string/binding/review" \ -H "Content-Type: application/json" \ -d '{ "action": "approve" }'{ "binding": { "binding_id": "5d504e2c-6584-4e34-8583-0863b8c4c0c1", "customer_id": "string", "payer_id": "7bded2ff-6743-4a0e-a147-77540fb16606", "masked_name": "string", "supplied_name": "string", "supplied_name_native": "string", "supplied_email": "string", "status": "active", "match_score": "string", "match_passed": true, "bound_at": "2019-08-24T14:15:22Z", "reviewed_at": "2019-08-24T14:15:22Z", "created_at": "2019-08-24T14:15:22Z" }}