Replace an existing card with a new one. The cardId remains the same but the card details (number, expiry, CVV) are replaced with a new card. Any remaining balance is transferred to the new card. Use this when a card is compromised, lost, or damaged.
cardId remains the same for your records, but the card details (number, expiry, CVV) are replaced with a completely new card. Any remaining balance is automatically transferred to the new card.
| Parameter | Type | Description |
|---|---|---|
cardId | string | The unique card identifier |
| Field | Type | Required | Description |
|---|---|---|---|
reason | string | No | Reason for replacing the card (e.g., “Card compromised”, “Card lost”) |
reference | string | No | Your unique reference for this operation. Defaults to cardId if not provided. Returned in webhooks for easy reconciliation. |
| Field | Type | Description |
|---|---|---|
id | string | The card identifier (unchanged from before) |
cardholderId | string | The cardholder identifier |
name | string | Name on the card |
last4 | string | Last 4 digits of the new card number |
maskedNumber | string | Masked new card number |
expiryDate | string | New card expiry date (MM/YYYY) |
brand | string | Card brand (VISA or MASTERCARD) |
status | string | Card status (always ACTIVE for new cards) |
balance | number | Current balance transferred from old card |
reference | string | Your reference for this operation |
replacedAt | string | ISO 8601 timestamp of when the card was replaced |
| Status | Error Code | Description |
|---|---|---|
| 400 | CARD_TERMINATED | Cannot replace a terminated card |
| 400 | INSUFFICIENT_BALANCE | Business wallet has insufficient balance for replacement fee |
| 404 | CARD_NOT_FOUND | Card not found or doesn’t belong to your app |
| 500 | REPLACE_FAILED | Failed to replace card at the bank partner |
JWT access token obtained from /auth/token
The unique card identifier