API keys

Create and manage keys under API Keys in the merchant panel. Every key is scoped to one or more abilities, chosen when the key is created, and can optionally have an expiry date.

Abilities

Ability Allows
customers:readRetrieve and list customers.
customers:writeCreate and update customers.
payments:readRetrieve and list payments.
payments:writeCreate payments.
payments:refundRefund a completed payment.

Requests using a key without the required ability for an endpoint get 403 ability_denied. See Errors for the full list of error codes.

Which ability each endpoint requires

Endpoint Required ability
GET /api/v1/customerscustomers:read
GET /api/v1/customers/{id}customers:read
POST /api/v1/customerscustomers:write
PATCH /api/v1/customers/{id}customers:write
GET /api/v1/paymentspayments:read
GET /api/v1/payments/{id}payments:read
POST /api/v1/paymentspayments:write
POST /api/v1/payments/{id}/refundpayments:refund
GET /api/v1/payments/{id}/refundspayments:read

A key can hold as many abilities as you need — grant only what the integration actually calls. payments:refund moves money back to the customer, so keep it off keys that only need to create or check payments.

Live vs. test keys

Every key is created in one of two modes, chosen up front — a key can't switch modes later:

A key's mode also scopes what it can see: a test key can never read, list, or refund a live payment, and vice versa, regardless of ability.

Expiry

You can set an optional expiry date when creating a key. Requests with an expired key get 401 authentication_error. Leave it blank for a key that never expires.

Viewing and revoking keys

The full plaintext key is shown only once, right after creation — copy it somewhere safe. Afterwards the merchant panel only ever shows a masked form (e.g. fk_live_ab12345678…9f3a). If a key is compromised or no longer needed, revoke it from the merchant panel; revoked keys stop authenticating immediately and can't be un-revoked — create a new key instead.