Coinland PayDocs
API reference

Customers

GET/api/pay/v1/customers/{customer_id}/binding

The 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
AuthorizationBearer <token>

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

customer_id*string

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"  }}
DELETE/api/pay/v1/customers/{customer_id}/binding

Sever 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
AuthorizationBearer <token>

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

customer_id*string

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"}
POST/api/pay/v1/customers/{customer_id}/binding/review

A 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
AuthorizationBearer <token>

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

customer_id*string

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"  }}