curl --request POST \
--url https://vault.staging.crossmint.com/api/2026-09-16/payment-methods \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"bankAccount": {
"accountHolder": {
"address": {
"city": "Dubai",
"line1": "Sheikh Zayed Road 1"
},
"name": "Omar Haddad"
},
"entityType": "individual",
"iban": "AE460090000000123456789"
},
"type": "bank-account-ae",
"userLocator": "email:omar.haddad@example.ae"
}
'{
"bankAccount": {
"accountHolder": {
"address": {
"city": "Dubai",
"line1": "Sheikh Zayed Road 1"
},
"name": "Omar Haddad"
},
"accountSuffix": "6789",
"country": "AE",
"currency": "aed",
"entityType": "individual"
},
"createdAt": "2026-10-19T09:00:00.000Z",
"paymentMethodId": "7c1e5a93-2d4b-4f68-a0c9-3b8e6d2f1a47",
"reason": null,
"status": "pending",
"statusReason": null,
"type": "bank-account-ae",
"updatedAt": "2026-10-19T09:00:12.000Z"
}Create Payment Method
Save a bank account payout method so offramp orders can settle fiat to it.
curl --request POST \
--url https://vault.staging.crossmint.com/api/2026-09-16/payment-methods \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'X-API-KEY: <api-key>' \
--data '
{
"bankAccount": {
"accountHolder": {
"address": {
"city": "Dubai",
"line1": "Sheikh Zayed Road 1"
},
"name": "Omar Haddad"
},
"entityType": "individual",
"iban": "AE460090000000123456789"
},
"type": "bank-account-ae",
"userLocator": "email:omar.haddad@example.ae"
}
'{
"bankAccount": {
"accountHolder": {
"address": {
"city": "Dubai",
"line1": "Sheikh Zayed Road 1"
},
"name": "Omar Haddad"
},
"accountSuffix": "6789",
"country": "AE",
"currency": "aed",
"entityType": "individual"
},
"createdAt": "2026-10-19T09:00:00.000Z",
"paymentMethodId": "7c1e5a93-2d4b-4f68-a0c9-3b8e6d2f1a47",
"reason": null,
"status": "pending",
"statusReason": null,
"type": "bank-account-ae",
"updatedAt": "2026-10-19T09:00:12.000Z"
}vault.crossmint.com.Returns
Returns a PaymentMethod object.Authorizations
API key required for authentication
The end user's JWT, sent as Authorization: Bearer <JWT> together with a client-side API key. Validated against the project's external JWT configuration.
Body
- MX CLABE
- VN bank account
- NG bank account
- PH bank account
- TH bank account
- ID bank account
- AE bank account
- US bank account
- CO bank account
- SEPA IBAN
- CO Bre-B key
- Card
Send the sub-object that matches type.
Bank account details. Required when type is a bank type. The fields depend on the country of the account.
Show child attributes
Show child attributes
Account identifier type: Mexican bank account identified by an 18-digit CLABE. type names the account identifier / capture schema Crossmint collects — never the payment rail; rail selection happens at payment execution time.
"bank-account-mx-clabe"The client's own name for this payment method. Free text, echoed back on every read.
1 - 255Identifies the target user when authenticating with a server API key. Format: <type>:<value> (e.g., email:alice@example.com, userId:abc123, phoneNumber:+12125551234, twitter:alice). Required for API-key authentication; ignored when authenticating with a JWT (the JWT subject is used).
1Response
The saved payment method, including the derived displayName and the type-specific sub-object (card, bankAccount, or breB).
- CO bank account
- MX CLABE
- AE bank account
- ID bank account
- NG bank account
- PH bank account
- TH bank account
- VN bank account
- US bank account
- SEPA IBAN
- CO Bre-B key
- Card
A saved payment method. Sensitive fields (full PAN, CVC, full account numbers, IBANs, Bre-B keys) are never included.
Bank account details. Present when type is a bank type. Full account numbers and IBANs are never included.
Show child attributes
Show child attributes
ISO 8601 timestamp when this payment method was created.
"2024-01-15T10:30:00.000Z"
Unique identifier (UUID v4). Crossmint assigns it on creation.
1Deprecated. Use statusReason, which carries the same value.
Whether a payout provider serves this destination. 'pending' while the readiness checks run, 'active' when a provider advertises a rail for it, 'rejected' when it cannot receive funds, 'deleted' when it was deleted. This describes the destination only, never the payer's eligibility. 'pending' moves to 'active', 'rejected' or 'deleted'; 'active' moves to 'rejected' or 'deleted'; 'rejected' moves only to 'deleted'. Branch on this field, never on statusReason.
active, deleted, pending, rejected Why the status is 'rejected'. Null on every other status, and on a rejection with no established destination condition. Known values today: destination-not-found, destination-closed, destination-cannot-receive, no-rail-available. New codes can appear at any time, so branch on status and treat an unrecognised code as the status alone.
Payment method type. Selects which sub-object is present: card, bankAccount, or breB.
"bank-account-co"ISO 8601 timestamp when this payment method was last modified.
"2024-01-15T10:30:00.000Z"
The client's own name for this payment method, when one was sent.
1Read-only. ISO 8601 timestamp of the most recent successful offramp payout funded by this bank account. Absent if none.
"2024-01-15T10:30:00.000Z"
Was this page helpful?

