To manage certain aspects of the 3D Secure (3DS) authentication, you will need to integrate with the following APIs.
Wise Platform API
The Wise Platform API is a REST-based interface that enables programmatic access to Wise's payment infrastructure. All endpoints return JSON-formatted responses and use standard HTTP methods and status codes.
We strongly recommend first reading our Getting Started Guide to help you set up credentials and make your first call.
Before you begin
To use this API reference effectively, you should have:
- Received Valid API credentials from Wise (Client ID and Client Secret)
- Understand OAuth 2.0 authentication
- Be familiar with RESTful API concepts
Core API resources
| Resource | Purpose |
|---|---|
| Quote | Exchange rate and fee calculations |
| Recipient | Beneficiary account management |
| Transfer | Payment creation and execution |
| Balance | Multi-currency account operations |
| Profile | Account ownership details |
| Rate | Current and historical exchange rates |
Not sure which workflow to build?
Start with our Integration Guides for step-by-step implementation examples.
Additional Customer Verification
In certain situations, additional evidence is required to verify customers and ensure we’re compliant with the KYC regulations.
Additional Verification APIs support a list of evidences that can be found in the Supported Evidences guide.
If you use the Customer Account with Partner KYC model and your customers are primarily based in the EU, refer to this Onboarding EU customers guide for instructions on how to use these APIs.
If you use the Customer Account with Partner KYC model and you are onboarding high risk business customers based primarily based in the US, refer to this Onboarding High Risk US Businesses guide for instructions on how to use these APIs.
Balance
Create and manage balance accounts within a multi-currency account.
Each profile can hold multiple balance accounts in different currencies. A STANDARD balance is limited to one per currency, while SAVINGS balances (Jars) allow multiple in the same currency. Creating the first balance for a profile automatically creates the multi-currency account.
Balances include an investmentState field. Only balances with NOT_INVESTED can be operated on via the API. Invested balances should be shown but not actionable.
For a complete guide on multi-currency accounts, see Multi-Currency Accounts.
Bank Account Details
Bank account details allow users to receive money into their Wise Multi-Currency Account. Each currency balance can have local bank details (for domestic payments) and international bank details (for SWIFT payments) where available.
Bank account details can be retrieved for existing balances, or new details can be ordered for currencies where they're available but not yet issued.
Batch Group
A batch group is a named collection of up to 1000 transfers that can be managed as a single unit. Batch groups are primarily used for funding multiple transfers with a single payment.
Workflow:
- Create a batch group with a source currency
- Add transfers to the group (up to 1000)
- Complete the batch group to close it for modifications
- Fund the batch group from a balance or via direct debit
Individual transfers in the group follow standard transfer lifecycle and can be tracked separately.
Bulk Settlement
Bulk settlement allows partners to settle multiple transfers in a single bank transfer at the end of a settlement period. This model splits transfer creation/funding from final settlement, allowing Wise to process transfers before receiving funds based on a partner's guarantee.
Use the settlement journal endpoint to submit a list of transfers to be settled, along with the settlement reference that matches your bank transfer payment.
Card
Manage your customers' cards programmatically. These APIs allow you to retrieve card details, control card status, manage spending permissions, and access sensitive card data securely.
Key capabilities:
- List and retrieve card details for a profile
- Update card status (active, frozen, blocked)
- Control spending permissions (e-commerce, ATM, contactless, etc.)
- Access sensitive card data (PAN, CVV, PIN) via encrypted JWE payloads
Sensitive card details: Wise is a PCI DSS compliant provider and stores all card data securely. The scope for PCI compliance depends on your use case and will impact how you integrate. For all sensitive card details endpoints, follow the detailed guide.
For ordering new cards, see the Card Order API. For transaction history, see the Card Transaction API.
Card
The Card resource represents a Wise card linked to a profile.
Current status of the card.
Status value. One of:
ACTIVE- Card is active and can be usedINACTIVE- Card is inactive and all transactions will be declinedBLOCKED- Card is blocked and cannot be reversed back to any stateFROZEN- Card is temporarily blockedPARTNER_SUSPENDED- Card is suspended by Wise temporarily (do not display to end customers)EXPIRED- Card is expiredPURGED- Cardholder data (e.g. PAN, PIN) has been purged after the retention period (555 days after the card's expiry date)
Card program details.
Method with which physical card spending permissions can be unlocked. One of:
WITH_PARTNER_API- Unlock via Partner APIWITH_FIRST_CHIP_AND_PIN_TRANSACTION- Unlock with first chip and PIN transactionNONE- Not applicable (for virtual cards)
Time when the card was created.
{ "token": "ca0c8154-1e14-4464-a1ce-dcea7dc3de52", "profileId": 123456, "clientId": "wise_api_docs", "status": { "value": "ACTIVE" }, "cardHolderName": "John Smith", "expiryDate": "2028-05-31T00:00:00Z", "lastFourDigits": "6320", "bankIdentificationNumber": "459661", "phoneNumber": "+441234567890", "cardProgram": { "name": "VISA_DEBIT_BUSINESS_UK_1", "scheme": "VISA", "defaultCurrency": "GBP", "cardType": "VIRTUAL" }, "unlockSpendingPermissions": "WITH_PARTNER_API", "creationTime": "2022-05-31T01:43:24.596321434Z", "modificationTime": "2022-05-31T01:43:24.596321825Z" }
Permission
Spending permission configuration for a card.
The type of transaction this permission controls:
ECOM- Online transactionsPOS_CHIP- Physical point-of-sale transactions with chipPOS_MAGSTRIPE- Physical point-of-sale transactions with magnetic stripePOS_CONTACTLESS- Physical point-of-sale contactless transactionsATM_WITHDRAWAL- ATM withdrawalsMOBILE_WALLETS- Digital wallet payments (Apple Pay, Google Pay)
{ "type": "ECOM", "isEnabled": false, "isLocked": false }
- Production Environmenthttps://api.wise.com/v3/spend/profiles/{profileId}/cards
- Sandbox Environmenthttps://api.wise-sandbox.com/v3/spend/profiles/{profileId}/cards
curl -i -X GET \
'https://api.wise.com/v3/spend/profiles/123456/cards?pageSize=10&pageNumber=1' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'List of cards retrieved successfully.
Collection of cards for this profile.
Bank identification number (BIN) of the card.
Method with which physical card spending permissions can be unlocked. One of:
WITH_PARTNER_API- Unlock via Partner APIWITH_FIRST_CHIP_AND_PIN_TRANSACTION- Unlock with first chip and PIN transactionNONE- Not applicable (for virtual cards)
Time when the card was created.
{ "cards": [ { "token": "ca0c8154-1e14-4464-a1ce-dcea7dc3de52", "profileId": 123456, "clientId": "wise_api_docs", "status": { … }, "cardHolderName": "John Smith", "expiryDate": "2028-05-31T00:00:00Z", "lastFourDigits": "6320", "bankIdentificationNumber": "459661", "phoneNumber": "+441234567890", "cardProgram": { … }, "unlockSpendingPermissions": "WITH_PARTNER_API", "creationTime": "2022-05-31T01:43:24.596321434Z", "modificationTime": "2022-05-31T01:43:24.596321825Z" } ], "totalCount": 1 }
- Production Environmenthttps://api.wise.com/v3/spend/profiles/{profileId}/cards/{cardToken}
- Sandbox Environmenthttps://api.wise-sandbox.com/v3/spend/profiles/{profileId}/cards/{cardToken}
curl -i -X GET \
https://api.wise.com/v3/spend/profiles/123456/cards/ca0c8154-1e14-4464-a1ce-dcea7dc3de52 \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Card details retrieved successfully.
Current status of the card.
Status value. One of:
ACTIVE- Card is active and can be usedINACTIVE- Card is inactive and all transactions will be declinedBLOCKED- Card is blocked and cannot be reversed back to any stateFROZEN- Card is temporarily blockedPARTNER_SUSPENDED- Card is suspended by Wise temporarily (do not display to end customers)EXPIRED- Card is expiredPURGED- Cardholder data (e.g. PAN, PIN) has been purged after the retention period (555 days after the card's expiry date)
Card program details.
Method with which physical card spending permissions can be unlocked. One of:
WITH_PARTNER_API- Unlock via Partner APIWITH_FIRST_CHIP_AND_PIN_TRANSACTION- Unlock with first chip and PIN transactionNONE- Not applicable (for virtual cards)
Time when the card was created.
{ "token": "ca0c8154-1e14-4464-a1ce-dcea7dc3de52", "profileId": 123456, "clientId": "wise_api_docs", "status": { "value": "ACTIVE" }, "cardHolderName": "John Smith", "expiryDate": "2028-05-31T00:00:00Z", "lastFourDigits": "6320", "bankIdentificationNumber": "459661", "phoneNumber": "+441234567890", "cardProgram": { "name": "VISA_DEBIT_BUSINESS_UK_1", "scheme": "VISA", "defaultCurrency": "GBP", "cardType": "VIRTUAL" }, "unlockSpendingPermissions": "WITH_PARTNER_API", "creationTime": "2022-05-31T01:43:24.596321434Z", "modificationTime": "2022-05-31T01:43:24.596321825Z" }
Request
Update the status of a card. For cards issued with an INACTIVE status, updating to ACTIVE will activate the card and move the card order status to COMPLETED.
Available status transitions:
ACTIVE- The card is active and usableFROZEN- The card is temporarily frozen; all authorization requests will be declinedBLOCKED- The card is irreversibly blocked and is no longer usable
- Production Environmenthttps://api.wise.com/v3/spend/profiles/{profileId}/cards/{cardToken}/status
- Sandbox Environmenthttps://api.wise-sandbox.com/v3/spend/profiles/{profileId}/cards/{cardToken}/status
curl -i -X PUT \
https://api.wise.com/v3/spend/profiles/123456/cards/ca0c8154-1e14-4464-a1ce-dcea7dc3de52/status \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"status": "ACTIVE"
}'Card status updated successfully.
Current status of the card.
Status value. One of:
ACTIVE- Card is active and can be usedINACTIVE- Card is inactive and all transactions will be declinedBLOCKED- Card is blocked and cannot be reversed back to any stateFROZEN- Card is temporarily blockedPARTNER_SUSPENDED- Card is suspended by Wise temporarily (do not display to end customers)EXPIRED- Card is expiredPURGED- Cardholder data (e.g. PAN, PIN) has been purged after the retention period (555 days after the card's expiry date)
Card program details.
Method with which physical card spending permissions can be unlocked. One of:
WITH_PARTNER_API- Unlock via Partner APIWITH_FIRST_CHIP_AND_PIN_TRANSACTION- Unlock with first chip and PIN transactionNONE- Not applicable (for virtual cards)
Time when the card was created.
{ "token": "ca0c8154-1e14-4464-a1ce-dcea7dc3de52", "profileId": 123456, "clientId": "wise_api_docs", "status": { "value": "ACTIVE" }, "cardHolderName": "John Smith", "expiryDate": "2028-05-31T00:00:00Z", "lastFourDigits": "6320", "bankIdentificationNumber": "459661", "phoneNumber": "+441234567890", "cardProgram": { "name": "VISA_DEBIT_BUSINESS_UK_1", "scheme": "VISA", "defaultCurrency": "GBP", "cardType": "VIRTUAL" }, "unlockSpendingPermissions": "WITH_PARTNER_API", "creationTime": "2022-05-31T01:43:24.596321434Z", "modificationTime": "2022-05-31T01:43:24.596321825Z" }
Request
If the wrong PIN has been entered more than 3 times, future transactions on the card will be blocked with a PIN_ENTRY_TRIES_EXCEEDED error message.
Use this endpoint to reset the PIN count to 0 and unblock transactions.
In some cases, you may also need to reset the PIN count directly at the ATM.
- Production Environmenthttps://api.wise.com/v3/spend/profiles/{profileId}/cards/{cardToken}/reset-pin-count
- Sandbox Environmenthttps://api.wise-sandbox.com/v3/spend/profiles/{profileId}/cards/{cardToken}/reset-pin-count
curl -i -X POST \
https://api.wise.com/v3/spend/profiles/123456/cards/ca0c8154-1e14-4464-a1ce-dcea7dc3de52/reset-pin-count \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'- Production Environmenthttps://api.wise.com/v3/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions
- Sandbox Environmenthttps://api.wise-sandbox.com/v3/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions
curl -i -X GET \
https://api.wise.com/v3/spend/profiles/123456/cards/ca0c8154-1e14-4464-a1ce-dcea7dc3de52/spending-permissions \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'Card permissions retrieved successfully.
List of spending permissions for this card.
The type of transaction this permission controls:
ECOM- Online transactionsPOS_CHIP- Physical point-of-sale transactions with chipPOS_MAGSTRIPE- Physical point-of-sale transactions with magnetic stripePOS_CONTACTLESS- Physical point-of-sale contactless transactionsATM_WITHDRAWAL- ATM withdrawalsMOBILE_WALLETS- Digital wallet payments (Apple Pay, Google Pay)
{ "permissions": [ { "type": "ECOM", "isEnabled": false, "isLocked": false }, { "type": "POS_CHIP", "isEnabled": true, "isLocked": false }, { "type": "ATM_WITHDRAWAL", "isEnabled": false, "isLocked": false }, { "type": "MOBILE_WALLETS", "isEnabled": true, "isLocked": false }, { "type": "POS_CONTACTLESS", "isEnabled": false, "isLocked": true }, { "type": "POS_MAGSTRIPE", "isEnabled": false, "isLocked": true } ] }
Request
Enable or disable a single spending permission on a card.
For bulk updates, use the v4 endpoint instead.
The permission type to update.
- Production Environmenthttps://api.wise.com/v3/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions
- Sandbox Environmenthttps://api.wise-sandbox.com/v3/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions
curl -i -X PATCH \
https://api.wise.com/v3/spend/profiles/123456/cards/ca0c8154-1e14-4464-a1ce-dcea7dc3de52/spending-permissions \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"type": "ECOM",
"isEnabled": true
}'- Production Environmenthttps://api.wise.com/v4/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions
- Sandbox Environmenthttps://api.wise-sandbox.com/v4/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions
curl -i -X PATCH \
https://api.wise.com/v4/spend/profiles/123456/cards/ca0c8154-1e14-4464-a1ce-dcea7dc3de52/spending-permissions \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-d '{
"permissions": [
{
"type": "ECOM",
"isEnabled": true
},
{
"type": "POS_CHIP",
"isEnabled": true
}
]
}'Request
Fetches Wise's RSA public key required for encrypting sensitive card data requests.
This key is used in the sensitive card details flow to create JWE (JSON Web Encryption) payloads.
- Production Environmenthttps://twcard.wise.com/twcard-data/v1/clientSideEncryption/fetchEncryptingKey
- Sandbox Environmenthttps://twcard.wise-sandbox.com/twcard-data/v1/clientSideEncryption/fetchEncryptingKey
curl -i -X GET \
https://twcard.wise.com/twcard-data/v1/clientSideEncryption/fetchEncryptingKey \
-H 'Authorization: Bearer <YOUR_JWT_HERE>'{ "version": 1, "key": "<encryption key>" }
Request
Fetches the card's Primary Account Number (PAN), security code (CVV2), expiry date, and cardholder name.
Requires an encrypted JWE payload for security. See the sensitive card details guide for implementation details.
To retrieve sensitive card details, the card must be in either ACTIVE or FROZEN status. A 403 response will be returned for cards in any other status.
This endpoint is SCA protected when applicable. If your profile is registered within the UK and/or EEA, SCA most likely applies. For more information, see implementing SCA.
The version of the encryption key to use. Always set to 1.
- Production Environmenthttps://twcard.wise.com/twcard-data/v1/sensitive-card-data/details
- Sandbox Environmenthttps://twcard.wise-sandbox.com/twcard-data/v1/sensitive-card-data/details
curl -i -X POST \
https://twcard.wise.com/twcard-data/v1/sensitive-card-data/details \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'x-tw-twcard-card-token: ca0c8154-1e14-4464-a1ce-dcea7dc3de52' \
-d '{
"keyVersion": 1,
"encryptedPayload": "<your JWE>"
}'{ "nonce": "33d51227-9ad6-4624-b4b7-7853b56076dd", "cvv2": "111", "pan": "4396910000012345", "expiryDate": "10/31", "cardholderName": "John Smith" }
Request
Fetches the card's PIN.
Requires an encrypted JWE payload for security. See the sensitive card details guide for implementation details.
This endpoint is SCA protected when applicable. If your profile is registered within the UK and/or EEA, SCA most likely applies. For more information, see implementing SCA.
The version of the encryption key to use. Always set to 1.
- Production Environmenthttps://twcard.wise.com/twcard-data/v1/sensitive-card-data/pin
- Sandbox Environmenthttps://twcard.wise-sandbox.com/twcard-data/v1/sensitive-card-data/pin
curl -i -X POST \
https://twcard.wise.com/twcard-data/v1/sensitive-card-data/pin \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'x-tw-twcard-card-token: ca0c8154-1e14-4464-a1ce-dcea7dc3de52' \
-d '{
"keyVersion": 1,
"encryptedPayload": "<your JWE>"
}'{ "nonce": "33d51227-9ad6-4624-b4b7-7853b56076dd", "pin": "1234" }