Skip to main content
Use the test cards on this page to simulate card payment flows in the Sandbox environment without processing real transactions.
Test cards only work in the Sandbox environment. Never use real card details for testing.

Test cards

The following cards are available for testing across different networks, countries, and card types.
Card NumberTypeCountryFeaturesMethod
5355223761921186DebitGBDepositInstant
5573606426146833DebitGBDeposit, WithdrawalInstant
5518832400606463DebitUSDepositN/A
5318773012490080DebitUSDeposit, WithdrawalInstant
5385308360135181CreditUSDepositN/A
5502514549870410DebitFRDepositInstant
5436031030606378CreditMUDepositN/A
All test cards accept any valid three-digit CVV and any future expiry date in MM/YY format.

Simulating errors

To trigger a specific error response, use the corresponding reserved amount when creating a transaction with any of the test cards above. All other amounts will result in a successful transaction.
AmountError CodeDescription
12.12card_unauthorizedThe card is not authorized for this transaction.
15.15card_declined_by_bankThe issuing bank declined the transaction.
20.20card_expiredThe card has expired.
26.26insufficient_fundsThe card has insufficient funds to cover the amount.
34.34velocityThe card has exceeded its transaction velocity limit.
60.60card_unauthorizedThe card is not authorized for this transaction.

The flow

  1. Add a test card as an external account using the Create external account endpoint.
  2. Use the returned external account ID when creating a deposit via Create quote and Create transaction.
  3. To simulate a specific error, use the corresponding reserved amount in the quote request.

Add a test card

Call the Create external account endpoint with the test card details.
POST /core/external-accounts
{
  "type": "card",
  "label": "Test Visa Card",
  "number": "4921817844445119",
  "securityCode": "123",
  "expiryDate": {
    "month": 12,
    "year": 2030
  }
}
{
  "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9",
  "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a",
  "type": "card",
  "status": "ok",
  "label": "Test Visa Card",
  "asset": "GBP",
  "network": "visa",
  "features": ["deposit"],
  "details": {
    "type": "debit",
    "last4Digits": "5119",
    "expiryDate": { "month": 12, "year": 2030 }
  },
  "createdAt": "2025-01-10T11:00:00.000Z",
  "updatedAt": "2025-01-10T11:00:00.000Z"
}

Create a quote

Use the id returned in the previous step as origin.id when calling Create quote.
POST /core/transactions/quote
{
  "origin": {
    "type": "external-account",
    "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9"
  },
  "destination": {
    "type": "account",
    "id": "a00507fe-628c-4f27-ae81-e1c40b2a8fb8"
  },
  "denomination": {
    "asset": "GBP",
    "amount": "50.00",
    "target": "origin"
  }
}
{
  "quote": {
    "id": "623000c8-9bdf-4a2b-aa3d-6a6b44a7f6a0",
    "origin": {
      "amount": "50.00",
      "asset": "GBP",
      "node": {
        "type": "external-account",
        "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "destination": {
      "amount": "50.00",
      "asset": "GBP",
      "node": {
        "type": "account",
        "id": "a00507fe-628c-4f27-ae81-e1c40b2a8fb8",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "denomination": {
      "amount": "50.00",
      "asset": "GBP",
      "target": "origin"
    },
    "fees": [],
    "expiresAt": "2025-01-10T11:05:00.000Z"
  }
}

Create a transaction

Commit the quote by calling Create transaction with the returned quote.id.
POST /core/transactions
{
  "quoteId": "623000c8-9bdf-4a2b-aa3d-6a6b44a7f6a0"
}
{
  "transaction": {
    "id": "b1bbbc0f-dae2-4e94-9e6d-4b9d5a1f3c1f",
    "origin": {
      "amount": "50.00",
      "asset": "GBP",
      "node": {
        "type": "external-account",
        "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "destination": {
      "amount": "50.00",
      "asset": "GBP",
      "node": {
        "type": "account",
        "id": "a00507fe-628c-4f27-ae81-e1c40b2a8fb8",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "denomination": {
      "amount": "50.00",
      "asset": "GBP",
      "target": "origin"
    },
    "fees": [],
    "status": "processing",
    "quotedAt": "2025-01-10T11:00:00.000Z",
    "createdAt": "2025-01-10T11:02:00.000Z",
    "updatedAt": "2025-01-10T11:02:00.000Z"
  }
}

Simulate an error

Follow the same steps as above, but set denomination.amount to one of the reserved error amounts when creating the quote.
POST /core/transactions/quote
{
  "origin": {
    "type": "external-account",
    "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9"
  },
  "destination": {
    "type": "account",
    "id": "a00507fe-628c-4f27-ae81-e1c40b2a8fb8"
  },
  "denomination": {
    "asset": "GBP",
    "amount": "26.26",
    "target": "origin"
  }
}
After committing the quote via Create transaction, the transaction is returned with status: failed and a statusDetails.reason matching the reserved amount.
{
  "transaction": {
    "id": "c3ef10aa-8a34-4b2d-bc89-3e5d6f7a8901",
    "origin": {
      "amount": "26.26",
      "asset": "GBP",
      "node": {
        "type": "external-account",
        "id": "b98e4f0d-a67d-4126-a99d-666f7e0315d9",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "destination": {
      "amount": "26.26",
      "asset": "GBP",
      "node": {
        "type": "account",
        "id": "a00507fe-628c-4f27-ae81-e1c40b2a8fb8",
        "ownerId": "e4ce04dc-67b7-4e9f-af91-482cb6f9fc4a"
      }
    },
    "denomination": {
      "amount": "26.26",
      "asset": "GBP",
      "target": "origin"
    },
    "fees": [],
    "status": "failed",
    "statusDetails": {
      "reason": "insufficient_funds"
    },
    "quotedAt": "2025-01-10T11:00:00.000Z",
    "createdAt": "2025-01-10T11:02:00.000Z",
    "updatedAt": "2025-01-10T11:02:00.000Z"
  }
}