Skip to main content
Card endpoints live under /developer/cards. Every request needs Authorization: Bearer <access_token> and X-On-Behalf-Of: <company_id>. See Authentication. Reading cards needs no permission beyond company membership. Issuing cards needs issue_cards. Changing cards needs manage_cards.

Endpoints

Card numbers, CVVs, and PINs are never returned by the Developer API.

The card object

  • spending_limit is null when the card has no limit. used is what the card has spent in the current period, in the limit’s currency. It is omitted if it can’t be read or the card has ended.
  • card_limits are the card’s fixed limits in EUR. In list responses, daily and rolling_32_days also include used.
  • Amounts are decimal strings with two places.

Card status

List cards

Cards are returned newest first. expired and terminated cards are excluded unless you ask for them in status. Each parameter may appear once. Invalid values return 400.

Get a card

Returns the card object. Unknown cards, and cards on accounts the member can’t access, return 404.

Issue a virtual card

Ordering endpoints need an Idempotency-Key header containing a UUID. Retrying with the same key returns the card from the first request instead of issuing another, even if the body differs. Each company can hold a limited number of live cards (not expired or terminated), virtual and physical together. The default is 30. Ordering beyond the quota returns 422. Contact support to raise it.
The card is issued to the member who owns the API key. It is active straight away. three_ds_biometric starts true if the cardholder uses the Incard app. Returns 201 with the card.

Order a physical card

First check which delivery methods an address can use:
Addresses in the UK and most of Europe get classic (up to 5 business days, free) and express (up to 3 business days, £9.99). Other supported countries, Cyprus included, get international (3–10 business days, £49.99). Countries that can’t be served return 422. Always use the methods delivery-options returns. Then place the order:
Like virtual cards, the card is issued to the member who owns the API key and is active straight away. Returns 201 with the card.

Change a card’s status

status must be active, frozen, or terminated. Anything else returns 400. Returns 200 with the card. Setting a card to the status it already has succeeds without change. Other transitions return 409, including reactivating a card Incard has suspended, locked, or blocked.

Replace a card

Gives a virtual card a new number, token, last four, and expiry date. Its id, status, account, limits, and settings stay the same. Spend towards its spending_limit starts again at zero on the new number. Use it when a card number is lost or compromised.
reason is lost or fraud. Requires an Idempotency-Key header (a UUID). Retrying with the same key returns the replaced card. Only active or frozen virtual cards can be replaced. Physical cards return 409. Returns 200 with the card.

Update a card

Send any of name, account_id, auto_convert, three_ds_biometric, or spending_limit. Returns 200 with the card.
  • Moving a card that has a spending limit to an account in another currency also needs a new spending_limit in that currency. Otherwise the request returns 409.
  • expired and terminated cards can only be renamed.

Spending limits

A spending limit caps what a card can spend per period: daily, weekly, monthly, or lifetime. Periods follow the UK calendar, and weeks start on Monday. The limit is always in the card’s account currency.
  • amount must be more than 0 with at most two decimal places.
  • A daily limit can be at most card_limits.daily.amount. A weekly or monthly limit can be at most card_limits.rolling_32_days.amount. The number is compared as-is, without converting from EUR. lifetime limits have no cap.
  • DELETE /developer/cards/{id}/spending-limit removes the limit. It returns 204, even if the card had none, or 409 if the card has ended.
  • POST /developer/cards/{id}/spending-limit/reset sets spend for the current period back to zero and keeps the limit. It returns 204, or 409 if the card has no limit or has ended.

Errors

Card errors carry a single message:
Authentication, company-access, and permission errors (401, 403, a missing X-On-Behalf-Of, and unknown routes) use the gateway format instead: { "success": false, "error": { "code": "forbidden", "message": "access denied" } }.