# 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.
{% admonition type="success" name="New to wise?" %}
We strongly recommend first reading our **[Getting Started Guide](/guides/developer/index.md)** to help you set up credentials and make your first call.
{% /admonition %}
Before you begin {% .title-2 .m-t-5 %}
To use this API reference effectively, you should have:
- Received Valid [API credentials from Wise](/guides/developer/auth-and-security/index.md) (Client ID and Client Secret)
- Understand OAuth 2.0 authentication
- Be familiar with RESTful API concepts
Core API resources {% .title-2 .m-t-5 .m-b-0 %}
| Resource | Purpose |
|----------|---------|
| **[Quote](/api-reference/quote)** | Exchange rate and fee calculations |
| **[Recipient](/api-reference/recipient)** | Beneficiary account management |
| **[Transfer](/api-reference/transfer)** | Payment creation and execution |
| **[Balance](/api-reference/balance)** | Multi-currency account operations |
| **[Profile](/api-reference/profile)** | Account ownership details |
| **[Rate](/api-reference/rate)** | Current and historical exchange rates |
**Not sure which workflow to build?**
Start with our [Integration Guides](/guides/product/send-money/use-cases/index.md) for step-by-step implementation examples.{% .m-t-3 .m-b-5 %}
## Servers
Production Environment
```
https://api.wise.com
```
Sandbox Environment
```
https://api.wise-sandbox.com
```
## Security
### UserToken
User Access Token for making API calls on behalf of a Wise user.
Can be obtained via two OAuth 2.0 flows:
- **registration_code grant**: For partners creating users via API
- **authorization_code grant**: For partners using Wise's authorization page
Access tokens are valid for 12 hours and can be refreshed using a refresh token.
Type: http
Scheme: bearer
Bearer Format: JWT
### PersonalToken
Personal API Token for individual personal or small business users.
Generated from Wise.com > Settings > Integrations and Tools > API tokens.
Has limited API access compared to OAuth tokens (PSD2 restrictions apply for EU/UK users).
Type: http
Scheme: bearer
Bearer Format: JWT
### ClientCredentialsToken
Application-level token for partner operations that don't require a specific user context, such as bulk settlement and card spend controls.
Obtained via `POST /oauth/token` with Basic Authentication (client-id:client-secret) and `grant_type=client_credentials`.
Valid for 12 hours. No refresh token â fetch a new token when expired.
See [retrieve client credentials token](/api-reference/client-credentials-token/clientcredentialstokenretrieve) for details.
Type: http
Scheme: bearer
Bearer Format: JWT
### BasicAuth
Basic Authentication using your Client ID and Client Secret as the username and password.
Client credentials are provided by Wise when your partnership begins. See [Getting Started](/guides/developer) for details.
Type: http
Scheme: basic
## Download OpenAPI description
[Wise Platform API](https://docs.wise.com/_bundle/api-reference/index.yaml)
## 3D Secure Authentication
To manage certain aspects of the 3D Secure (3DS) authentication, you will need to integrate with the following APIs.
### Inform challenge result
- [POST /v3/spend/profiles/{profileId}/3dsecure/challenge-result](https://docs.wise.com/api-reference/3ds/3dschallengeresultpost.md): Once the customer has accepted or rejected the push notification for a 3DS challenge, you can use this endpoint to notify us of the result.
You must call this endpoint before the expiration time, otherwise it will return a 400 error. You can find the expiration information from the 3DS challenge webhook event.
Only the first call to this endpoint will be processed. Any subsequent duplicate requests will be ignored, although you will still receive a success response.
{% admonition type="warning" %}
This endpoint is SCA protected when it applies. If your profile is registered within the UK and/or EEA, SCA most likely applies to you. For more information, please read implementing SCA.
{% /admonition %}
## Activity
Activity represents a snapshot of a performed action for a profile.
### List Activities for a Profile
- [GET /v1/profiles/{profileId}/activities](https://docs.wise.com/api-reference/activity/activitylist.md): List of activities belonging to user profile.
Activities represent snapshots of performed actions and can be filtered by various parameters to narrow down the results.
## 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](/guides/product/kyc/partner-kyc/supported-evidences).
If you use the [Customer Account with Partner KYC](/guides/product/kyc/partner-kyc) model and your customers are primarily based in the EU,
refer to this [Onboarding EU customers](/guides/product/kyc/partner-kyc/additional-verification#onboarding-eu-customers) guide
for instructions on how to use these APIs.
If you use the [Customer Account with Partner KYC](/guides/product/kyc/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](/guides/product/kyc/partner-kyc/additional-verification#onboarding-high-risk-us-businesses) guide for
instructions on how to use these APIs.
### Upload Evidences
- [POST /v5/profiles/{profileId}/additional-verification/upload-evidences](https://docs.wise.com/api-reference/verification/verificationuploadevidences.md): Uploads verification evidence for a specific profile.
The request body varies significantly between Personal and Business profiles.
Submitting an evidence that was already uploaded will result in an attempt to update the evidence.
### Upload Document
- [POST /v3/profiles/{profileId}/verification-status/upload-document](https://docs.wise.com/api-reference/verification/verificationuploaddocument.md): Uploads verification documents for review. You can upload multiple files at once.
A valid document must fulfil these requirements:
- The document must be clear.
- The document needs to be a .jpg, .png., or .pdf file type up to 10MB in size.
### Required Evidences
- [GET /v3/profiles/{profileId}/verification-status/required-evidences](https://docs.wise.com/api-reference/verification/verificationgetrequiredevidences.md): Fetches the required evidences for a profile to complete additional customer verification.
If one or more evidences are returned, the customer should submit those evidences using the upload-evidences endpoint.
See the Supported Evidences guide for the list of possible evidence types and how to submit them.
### Upload Evidences (v3) (deprecated)
- [POST /v3/profiles/{profileId}/additional-verification/upload-evidences](https://docs.wise.com/api-reference/verification/verificationuploadevidencesv3.md): Uploads verification evidence for a specific profile.
The request body varies significantly between Personal and Business profiles.
## Address
Manage physical addresses associated with user profiles.
Address requirements vary by country â use the address requirements endpoints to dynamically discover which fields are needed before creating an address.
### Create or Update an Address
- [POST /v1/addresses](https://docs.wise.com/api-reference/address/addresscreate.md): Adds address info to user profile.
List of required fields are different for different countries. Use the address requirements endpoint to dynamically discover required fields.
For updating personal profiles, consider using the personal profile update endpoint instead. It allows submitting the address information alongside other profile data.
State field is required for US, CA, BR, and AU addresses.
Occupations is required for CA, IN, JP, ID, IL, MX, and within the US for the state NM.
### List Addresses for a Profile
- [GET /v1/addresses](https://docs.wise.com/api-reference/address/addresslist.md): List of addresses belonging to user profile.
### Retrieve an Address by ID
- [GET /v1/addresses/{addressId}](https://docs.wise.com/api-reference/address/addressget.md): Get address info by ID.
### Get Address Requirements
- [GET /v1/address-requirements](https://docs.wise.com/api-reference/address/addressrequirementsget.md): Returns the list of fields required to create a valid address. Use this as a starting point to discover required fields.
The response contains 4 required top-level fields:
- country (select field with list of values)
- city (text field)
- postCode (text field)
- firstLine (text field)
If a field has refreshRequirementsOnChange: true, call the POST endpoint with that field's value to discover additional required fields.
For a step-by-step walkthrough, see the Address Requirements guide.
### Get Address Requirements (with context)
- [POST /v1/address-requirements](https://docs.wise.com/api-reference/address/addressrequirementspost.md): Returns the list of fields required to create a valid address, based on the provided context.
Use this endpoint to dynamically discover additional required fields based on selected values. For example:
- Posting {"details": {"country": "US"}} will add "state" to the list of fields.
- Posting {"details": {"country": "CA"}} will add "occupations" to the list of fields.
Continue calling this endpoint with field values until all fields with refreshRequirementsOnChange: true have been populated.
For a step-by-step walkthrough, see the Address Requirements guide.
## 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](/guides/product/accounts).
### Create a Balance Account
- [POST /v4/profiles/{profileId}/balances](https://docs.wise.com/api-reference/balance/balancecreate.md): Opens a balance within the specified profile, in the currency and type specified in the request.
For STANDARD balances, only one can be created per currency. For SAVINGS balances, multiple in the same currency can be opened.
When creating a SAVINGS type balance, a name is required.
### List Balances for a Profile
- [GET /v4/profiles/{profileId}/balances](https://docs.wise.com/api-reference/balance/balancelist.md): Retrieves the user's multi-currency account balance accounts. Returns all balance accounts the profile has in the types specified.
The types parameter must include at least one type. To return more than one type, comma-separate the values.
### Retrieve a Balance by ID
- [GET /v4/profiles/{profileId}/balances/{balanceId}](https://docs.wise.com/api-reference/balance/balanceget.md): Returns a balance based on the specified balance ID.
### Remove a Balance Account
- [DELETE /v4/profiles/{profileId}/balances/{balanceId}](https://docs.wise.com/api-reference/balance/balancedelete.md): Closes a balance account for the user's profile.
Balance accounts must have a zero balance to be closed. Bank account details for the balance will also be deactivated and may not be restored.
### Convert or Move Money Between Balances
- [POST /v2/profiles/{profileId}/balance-movements](https://docs.wise.com/api-reference/balance/balancemovement.md): This endpoint allows conversion and movement of funds between balance accounts.
Convert across balance accounts:
Convert funds between two STANDARD balance accounts in different currencies. Requires a quote created with "payOut": "BALANCE".
Move money between balances:
- Add money to a same-currency jar (move from STANDARD to SAVINGS without conversion)
- Add money to another-currency jar (convert money using a quote)
- Withdraw money from a jar (move from SAVINGS to STANDARD without conversion)
Either amount or quoteId is required. Use quoteId for cross-currency movements.
### Retrieve Deposit Limits
- [GET /v1/profiles/{profileId}/balance-capacity](https://docs.wise.com/api-reference/balance/balancecapacity.md): Returns the deposit limit for a profile based on regulatory requirements.
Useful for personal profiles located in countries that have hold limits. We advise calling this API before depositing money into an account if the profile is located in Singapore or Malaysia.
### Add an Excess Money Account
- [POST /v1/profiles/{profileId}/excess-money-account](https://docs.wise.com/api-reference/balance/excessmoneyaccount.md): If a balance goes over the regulatory hold limit, excess funds are automatically moved to another account at the end of the day.
Use this endpoint to specify a recipient where excess money will be transferred.
Primarily used for Singapore and Malaysia customers.
### Get Total Funds
- [GET /v1/profiles/{profileId}/total-funds/{currency}](https://docs.wise.com/api-reference/balance/totalfunds.md): Provides an overview of your account's total valuation and available liquidity across all balances.
Returns total worth, total available (including overdraft), total cash, and overdraft details.
#### Example (Assuming GBP and USD has 1:1 exchange rate)
| Scenario | GBP balance | USD balance | Total Worth | Total Available | Overdraft Usage | Overdraft Limit |
| ---------------------------------------- | ----------- | ----------- | ----------- | --------------- | --------------- | --------------- |
| Positive account value with no overdraft | 2000 | 0 | 2000 | 2000 | 0 | 0 |
| Positive account value with overdraft | 2000 | -100 | 1900 | 2400 | 100 | 500 |
| Negative account value with overdraft | 0 | -100 | -100 | 400 | 100 | 500 |
## Balance Statement
Balance statements contain transactional activities on a Wise Multi-Currency Account, including deposits, withdrawals, conversions, card transactions, and fees.
Statements can be retrieved in multiple formats: JSON, CSV, PDF, XLSX, CAMT.053, MT940, or QIF.
### Get Balance Statement
- [GET /v1/profiles/{profileId}/balance-statements/{balanceId}/statement.json](https://docs.wise.com/api-reference/balance-statement/balancestatementget.md): Retrieve a statement for the specified balance account.
The response format depends on the URL path:
- statement.json - JSON format
- statement.csv - CSV format
- statement.pdf - PDF format (includes Wise branding)
- statement.xlsx - Excel format
- statement.xml - CAMT.053 XML format
- statement.mt940 - MT940 format
- statement.qif - QIF format
The period between intervalStart and intervalEnd cannot exceed 469 days (around 1 year 3 months).
{% admonition type="warning" %}
This endpoint is SCA protected when it applies. If your profile is registered within the UK and/or EEA, SCA most likely applies to you.
The additional authentication is only required once every 90 days, viewing the statement on the website or in the mobile app counts towards that as well.
Learn more
{% /admonition %}
## 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.
### Create bank account details order
- [POST /v1/profiles/{profileId}/account-details-orders](https://docs.wise.com/api-reference/bank-account-details/bankaccountdetailsordercreate.md): Creates an order which will issue account details. It should use the same currency as the balance previously created. Fulfilling all the requirements will complete the order, reaching status DONE.
The possible values for a requirement status are:
- PENDING_USER: The requirement has some pending action from the user.
- PENDING_TW: The requirement has some pending action from Wise.
- DONE: The requirement is completed.
The more common requirements are:
- VERIFICATION: The user needs to be fully verified before completing this requirement.
- TOP_UP: A fee will be charged and must be paid through wise.com before completing this requirement.
### Create multiple bank account details
- [POST /v3/profiles/{profileId}/bank-details](https://docs.wise.com/api-reference/bank-account-details/bankaccountdetailsbankdetailscreate.md): Creates and assigns a pair of local account details and international account details (where available) that are linked to the target balance specified in the request.
{% admonition type="warning" %}
Please reach out to our Support Team for access to this endpoint.
{% /admonition %}
### Retrieve bank account details
- [GET /v1/profiles/{profileId}/account-details](https://docs.wise.com/api-reference/bank-account-details/bankaccountdetailsget.md): Returns a list with all the AVAILABLE and ACTIVE account details for the given profile, including examples. Account receive options can also include local and international details to receive money on the currency balance.
Example bank account details are returned for any currency where bank account details have not been requested and issued. Examples will always include an id of null.
### List bank account detail orders
- [GET /v3/profiles/{profileId}/account-details-orders](https://docs.wise.com/api-reference/bank-account-details/bankaccountdetailsorderslist.md): Returns the bank account assignment requests for a profile and multi-currency account.
The response includes bank-details orders in the following statuses: PENDING_USER, PENDING_TW, REQUIREMENTS_FULFILLED, DONE.
### Create payment return
- [POST /v1/profiles/{profileId}/account-details/payments/{paymentId}/returns](https://docs.wise.com/api-reference/bank-account-details/bankaccountdetailsreturnscreate.md): Creates a return for a payment received to bank account details.
When you create a return, you must provide the ID of the payment you wish to return as well as the ID of the profile that received the payment. In addition, you can provide a reason for the return in the request body. When returning SWIFT payments, reason is a required field.
### List bank account detail orders (v1) (deprecated)
- [GET /v1/profiles/{profileId}/account-details-orders](https://docs.wise.com/api-reference/bank-account-details/bankaccountdetailsorderslistv1.md): Returns the bank account assignment requests for a profile and multi-currency account.
{% admonition type="warning" %}
This endpoint is deprecated. Please use the v3 endpoint instead.
{% /admonition %}
## 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:**
1. Create a batch group with a source currency
2. Add transfers to the group (up to 1000)
3. Complete the batch group to close it for modifications
4. 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.
### Create a batch group
- [POST /v3/profiles/{profileId}/batch-groups](https://docs.wise.com/api-reference/batch-group/batchgroupcreate.md): Create a new batch group.
A batch group can hold up to 1000 transfers that will be funded together. After creating the group, add transfers to it, then complete the group to receive pay-in details.
### Retrieve a batch group
- [GET /v3/profiles/{profileId}/batch-groups/{batchGroupId}](https://docs.wise.com/api-reference/batch-group/batchgroupget.md): Get an existing batch group by ID.
### Update batch group status
- [PATCH /v3/profiles/{profileId}/batch-groups/{batchGroupId}](https://docs.wise.com/api-reference/batch-group/batchgroupupdate.md): Update a batch group's status to complete or cancel it.
Complete a batch group: Set status to COMPLETED to close the group for modifications and allow funding to proceed. Once completed, payInDetails will be populated with funding instructions.
Cancel a batch group: Set status to CANCELLED to cancel all transfers in the batch. Only batches that are not funded can be cancelled. Cancellation is final and cannot be undone.
The version parameter is required for concurrency control. The operation will be rejected if the provided version does not match the server's current version.
### Create a batch group transfer
- [POST /v3/profiles/{profileId}/batch-groups/{batchGroupId}/transfers](https://docs.wise.com/api-reference/batch-group/batchgrouptransfercreate.md): Create a transfer in the batch group using a previously created recipient account and quote.
For the request body format, see transfer creation. For quote and recipient creation, see quote creation and recipient creation.
### Fund a batch group
- [POST /v3/profiles/{profileId}/batch-payments/{batchGroupId}/payments](https://docs.wise.com/api-reference/batch-group/batchgroupfund.md): Funds all transfers in a batch group from a multi-currency account balance. Transfers are paid out immediately.
The batch group must first be completed, and there must be enough funds in the account for the whole batch. Otherwise, an insufficient funds error will be returned.
{% admonition type="warning" %}
This endpoint is SCA protected when it applies. If your profile is registered within the UK and/or EEA, SCA most likely applies to you. For more information, please read implementing SCA.
{% /admonition %}
### Fund a batch group via direct debit
- [POST /v1/profiles/{profileId}/batch-groups/{batchGroupId}/payment-initiations](https://docs.wise.com/api-reference/batch-group/batchgrouppaymentinitiationcreate.md): Funds all transfers in a batch group via direct debit. The batch group must be in the COMPLETED state.
To use this funding method, you need to link an external bank account first. See direct debit account creation for more information.
{% admonition type="warning" %}
This endpoint is SCA protected when it applies. If your profile is registered within the UK and/or EEA, SCA most likely applies to you. For more information, please read implementing SCA.
{% /admonition %}
### Retrieve a payment initiation
- [GET /v1/profiles/{profileId}/batch-groups/{batchGroupId}/payment-initiations/{paymentInitiationId}](https://docs.wise.com/api-reference/batch-group/batchgrouppaymentinitiationget.md): Get payment initiation info by ID. In addition to webhooks, this endpoint can be used for polling the status of a payment initiation.
## 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.
### Send a settlement journal
- [POST /v1/settlements](https://docs.wise.com/api-reference/bulk-settlement/bulksettlementjournalcreate.md): Sends the settlement journal to Wise. There are two types of settlement:
- Same Currency Settlement â Settle in the same currency as the transfers (e.g., settle USD transfers with USD).
- Cross Currency Settlement â Settle in a different currency (e.g., settle PHP transfers with USD). In this case, you must specify settlementCurrency and include exchangeRate on every transfer.
{% admonition type="info" %}
You must use a client credentials token to authenticate this call.
{% /admonition %}
## 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](/guides/product/issue-cards/sensitive-card-details).
{% admonition type="info" %}
For ordering new cards, see the [Card Order API](/api-reference/card-order). For transaction history, see the [Card Transaction API](/api-reference/card-transaction).
{% /admonition %}
### List cards for a profile
- [GET /v3/spend/profiles/{profileId}/cards](https://docs.wise.com/api-reference/card/cardlist.md): Returns a paginated list of cards that belong to a specific profile.
### Get card details
- [GET /v3/spend/profiles/{profileId}/cards/{cardToken}](https://docs.wise.com/api-reference/card/cardget.md): Retrieves details for a specific card by its token.
### Update card status
- [PUT /v3/spend/profiles/{profileId}/cards/{cardToken}/status](https://docs.wise.com/api-reference/card/cardstatusupdate.md): 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 usable
- FROZEN - The card is temporarily frozen; all authorization requests will be declined
- BLOCKED - The card is irreversibly blocked and is no longer usable
### Reset PIN count
- [POST /v3/spend/profiles/{profileId}/cards/{cardToken}/reset-pin-count](https://docs.wise.com/api-reference/card/cardpincountreset.md): 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.
{% admonition type="info" %}
In some cases, you may also need to reset the PIN count directly at the ATM.
{% /admonition %}
### Get card spending permissions
- [GET /v3/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions](https://docs.wise.com/api-reference/card/cardpermissionsget.md): Retrieves the current spending permissions configured for a card.
### Update a single card permission
- [PATCH /v3/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions](https://docs.wise.com/api-reference/card/cardpermissionsupdate.md): Enable or disable a single spending permission on a card.
For bulk updates, use the v4 endpoint instead.
### Bulk update card permissions
- [PATCH /v4/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions](https://docs.wise.com/api-reference/card/cardpermissionsbulkupdate.md): Enable or disable multiple spending permissions on a card in a single request.
This is the recommended endpoint for updating card permissions as it allows updating multiple permissions atomically.
### Fetch RSA encryption key
- [GET /twcard-data/v1/clientSideEncryption/fetchEncryptingKey](https://docs.wise.com/api-reference/card/cardencryptionkeyget.md): 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.
### Get sensitive card details
- [POST /twcard-data/v1/sensitive-card-data/details](https://docs.wise.com/api-reference/card/cardsensitivedetailsget.md): 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.
{% admonition type="warning" %}
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.
{% /admonition %}
### Get card PIN
- [POST /twcard-data/v1/sensitive-card-data/pin](https://docs.wise.com/api-reference/card/cardpinget.md): Fetches the card's PIN.
Requires an encrypted JWE payload for security. See the sensitive card details guide for implementation details.
{% admonition type="warning" %}
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.
{% /admonition %}
## Card Kiosk Collection
These APIs are designed to allow you to print and encrypt your card directly from a kiosk machine. The card information will be sent to our card manufacturer to configure and print the card on-site on a kiosk machine.
The card printing process will automatically begin once the request is received by our card manufacturer.
During the printing process, you will be notified via webhook about any [card production status change](/guides/developer/webhooks/event-types#cards-card-production-status-change).
Before using these APIs, make sure to read the guide on [kiosk collection](/guides/product/issue-cards/card-kiosk-collection#card-kiosk-collection).
{% admonition type="warning" %}
Please reach out to your Implementation Manager for more information on these APIs.
{% /admonition %}
**Testing**: In the sandbox environment, use the [card production simulation API](/api-reference/simulation#card-production-state-change) to test your integration with various production statuses and error scenarios.
Production status flow {% .title-2 .m-t-5 %}
These statuses represent the lifecycle of a card production:
- `READY` - Card is ready for production. The [produce card endpoint](/api-reference/card-kiosk-collection/cardkioskcollectionproduce) can be called.
- `IN_PROGRESS` - Card is being produced at the kiosk machine (chip encryption and printing in progress).
- `PRODUCED` - Card has been successfully produced and collected from the kiosk. This is a final state.
- `PRODUCTION_ERROR` - Card production failed. Check the errorCode to identify the issue, resolve it, then retry using the [produce card endpoint](/api-reference/card-kiosk-collection/cardkioskcollectionproduce).
A card with production status `PRODUCED` will trigger an asynchronous call to update the associated card order to `PRODUCED` status.

### Produce a card
- [PUT /v3/spend/profiles/{profileId}/cards/{cardToken}/production](https://docs.wise.com/api-reference/card-kiosk-collection/cardkioskcollectionproduce.md): Sends the card production request to a kiosk machine. To confirm that card information has been successfully created, listen to the card-production-status-change webhook with status READY.
{% admonition type="warning" %}
Cards that were created over 60 days ago will result in a 422 error code and cannot be retried. This is due to the data being obfuscated on our side. In this case, a new card order has to be created.
{% /admonition %}
### Retrieve card production status
- [GET /v3/spend/profiles/{profileId}/cards/{cardToken}/production](https://docs.wise.com/api-reference/card-kiosk-collection/cardkioskcollectionproductionget.md): Retrieves the current production status of a card at a kiosk machine.
Best practice: Subscribe to the card production status change webhook for real-time notifications. Use this endpoint only when you need to synchronously check the status.
## Card Order
With this set of APIs, you will be able to create cards for your customers. You can also retrieve and view the status of your current card orders, as well as the list of available card programs for the user.
{% admonition type="info" %}
On production, each personal profile can order at most 1 physical card and 3 virtual cards. On sandbox, we allow up to 10 physical cards and 30 virtual cards for testing purpose. However, no more than 3 virtual cards can be ordered per day. This limit includes cards and card orders.
{% /admonition %}
Card order status flow {% #card-order-status-flow .title-3 .m-t-5 %}
The card order response will contain the `status` field. The initial status is `PLACED` or `REQUIREMENTS_FULFILLED` depending on the requirement fulfillment state:
- `PLACED` - The card order is created. The card will be generated once it has fulfilled all the requirements
- `REQUIREMENTS_FULFILLED` - The card order has fulfilled all the requirements and the card should be generated in a short while
- `CARD_DETAILS_CREATED` - The card has been generated
- `PRODUCED` - The physical card has been produced and waiting to be picked up by delivery vendor (physical card only)
- `COMPLETED` - The card has been activated and is ready to use. The card order is completed
- `CANCELLED` - The card order has been cancelled. This can happen if you reach out to Wise Support to cancel a card order
- `RETURNED` - Delivery failed, the physical card has been returned and will be blocked (physical card only)

### Create a card order
- [POST /v3/spend/profiles/{profileId}/card-orders](https://docs.wise.com/api-reference/card-order/cardordercreate.md): Creates a new card order. The program field value is retrieved from the retrieve all card programs endpoint.
{% admonition type="warning" %}
This request requires an extra field in the header, X-idempotence-uuid. This should be generated and used for any subsequent retries in the event that the initial request fails.
{% /admonition %}
When you issue a card under a business profile, the cardholder will automatically default to the business representative.
If the cardholder is not the business representative, create a cardholder personal profile and add the profileId of the cardholder profile to the cardHolderProfileId field on the card order request.
For country-specific address fields and validation rules, see the card address validation guide.
### Retrieve all card orders
- [GET /v3/spend/profiles/{profileId}/card-orders](https://docs.wise.com/api-reference/card-order/cardorderlist.md): Retrieves a list of card orders created for the specified profileId.
### Retrieve a card order
- [GET /v3/spend/profiles/{profileId}/card-orders/{cardOrderId}](https://docs.wise.com/api-reference/card-order/cardorderget.md): Retrieves a card order based on the cardOrderId.
### Retrieve available card programs
- [GET /v3/spend/profiles/{profileId}/card-orders/availability](https://docs.wise.com/api-reference/card-order/cardorderprogramsget.md): Retrieves the list of available card programs for each profileId.
### Retrieve card order requirements
- [GET /v3/spend/profiles/{profileId}/card-orders/{cardOrderId}/requirements](https://docs.wise.com/api-reference/card-order/cardorderrequirementsget.md): Retrieves all card requirements for a cardOrderId. A valid card order needs all its requirements status to be COMPLETED.
The type of requirements are:
- PIN (optional): Set a PIN on a virtual or physical card order. Contact the team if you need this feature.
- VERIFICATION: Verify your customer by providing KYC evidences. Refer to the KYC guide.
- ADDRESS: Provide a valid address for your card order. Refer to address validation.
A requirement status has the following values:
- NOT_INITIATED
- NEEDS_ACTION
- PENDING
- COMPLETED
- FAILED
### Update card order status
- [PUT /v3/spend/profiles/{profileId}/card-orders/{cardOrderId}/status](https://docs.wise.com/api-reference/card-order/cardorderstatusupdate.md): Updates the status of a card order based on its cardOrderId. The status can be updated to one of the following:
1. CANCELLED
2. COMPLETED (deprecated)
The behaviour for card order cancellation differs across card order statuses:
- PLACED: Card order can be cancelled with no further action required.
- REQUIREMENTS_FULFILLED, CARD_DETAILS_CREATED, PRODUCED: Card order can be cancelled, and its associated card will be blocked. However, the physical card may have already been produced and may be in delivery. If so, the card will still reach the end user's address. This should be communicated to the end user to prevent confusion.
- COMPLETED, RETURNED: Card orders in these statuses cannot be cancelled.
{% admonition type="info" %}
Updating a card order status to COMPLETED is deprecated. Check with our team whether this is supported in your integration.
{% /admonition %}
### Validate an address
- [POST /v3/spend/address/validate](https://docs.wise.com/api-reference/card-order/cardordervalidateaddress.md): Validates the format of an address for a card order. Make sure to follow country-specific address fields and validation as described in the card address validation guide.
For virtual cards, the address field will be used as a billing address. It will be used for AVS checks in countries where it is required.
For physical cards, the address field will be used as a delivery address. It will be used to deliver your card and for AVS checks in countries where it is required.
{% admonition type="warning" %}
We do not support PO BOX addresses.
{% /admonition %}
### Set card PIN
- [POST /twcard-data/v1/sensitive-card-data/preset-pin](https://docs.wise.com/api-reference/card-order/cardorderpresetpin.md): Sets a PIN during the card order flow. This endpoint will be accessible for partners that require to set a PIN during the card order flow.
Please follow this guide to use this endpoint.
To use this endpoint, make sure to set the api token and the card order id in the headers.
## Card Transaction
Retrieve information on transactions made on your users' cards.
Transaction types {% #card-transaction-type .title-3 .m-t-5 %}
The possible `type` values are:
- `ACCOUNT_CREDIT` - Receiving money on the card, excluding Visa OCT or Mastercard MoneySend
- `ACCOUNT_FUNDING` - Sending money to another card or e-wallet
- `CASH_ADVANCE` - Cash disbursement
- `CASH_WITHDRAWAL` - ATM withdrawal
- `CHARGEBACK` - Currently unused. Reserved for future use
- `CREDIT_TRANSACTION` - Visa OCT and Mastercard MoneySend
- `ECOM_PURCHASE` - Online purchase
- `POS_PURCHASE` - Purchase via a POS terminal
- `REFUND` - Partial or full refund of an existing card transaction
Transaction states {% #card-transaction-state .title-3 .m-t-5 %}
The possible `state` values are:
- `IN_PROGRESS` - The transaction has been authorized but not captured
- `COMPLETED` - The transaction has been captured and/or settled
- `DECLINED` - The transaction has been declined
- `CANCELLED` - The transaction has been cancelled
- `UNKNOWN` - Default fallback status if the state cannot be confirmed
The transition from `CANCELLED` to `COMPLETED` is an edge case. Wise releases the customer funds after 7 days (30 days for pre-authorization) if the merchant has not captured the transaction, and the state becomes `CANCELLED`. However, the merchant can decide to capture the transaction at a later date, at which point the state will become `COMPLETED`.

Decline reasons {% #card-transaction-decline-reasons .title-3 .m-t-5 %}
The decline reason field provides information about the specific issue that led to the transaction being declined, helping the merchant and the customer troubleshoot the problem.
While the decline reason field provides valuable information, it may not cover all possible reasons for a decline, such as technical issues or unforeseen circumstances.
{% admonition type="warning" %}
New decline reasons may be added in the future, and not all decline reasons are currently documented. Review this documentation regularly to ensure accuracy.
{% /admonition %}
{% admonition type="warning" %}
Exercise caution when communicating decline reasons to your customers, as some may not be relevant or may cause confusion.
{% /admonition %}
- `ACCOUNT_INACTIVE` - Balance related to the transaction is not active. Ensure that all outstanding actions have been completed before using the card, as this may help avoid potential issues or declines
- `ACCOUNT_SUSPENDED` - The transaction has been declined pending further compliance checks. It may have been flagged for potential sanctions issues
- `ATM_PIN_CHANGE_NOT_ALLOWED` - PIN change via ATM terminal is not allowed
- `BLOCKED_COUNTRY` - Transactions were made in unsupported countries. Check this [link](https://wise.com/help/articles/2935771/where-can-i-use-my-wise-card) to see if the country is included in the list of supported nations. It is possible for a merchant to be based in a supported country and have an address registered in a blocked country, albeit infrequently
- `BLOCKED_SUBSCRIPTION` - The system cannot facilitate this transaction as the customer has opted out of recurring payments with this merchant
- `CARD_EXPIRED` - The card provided has reached its expiration date, making it invalid for this transaction
- `CARD_FROZEN` - The customer or the customer service team has put this card on a temporary hold. If the card has not been frozen by the customer, it may be worth investigating further. To resume spending, advise the customer to unfreeze the card
- `CARD_INACTIVE` - The card is either not active or has not been received by the customer, so the transaction cannot proceed
- `CARD_BLOCKED` - The card has been blocked and cannot be used anymore
- `CARD_PARTNER_SUSPENDED` - The internal team has deactivated the account for compliance reasons related to AML, fraud, or EDD. Contact the team if this is believed to be an error
- `CHIP_PIN_ENTRY_TRIES_EXCEEDED` - The PIN is restricted on the chip of the card due to excessive incorrect entries. The blocked PIN can be unlocked at an ATM using specific steps that vary depending on the machine and country, such as PIN management or PIN operations followed by unblocking the PIN
- `CONNECTION_ISSUE` - A connection problem occurred during the transaction
- `CONTACTLESS_PIN_ENTRY_REQUIRED` - Contactless payment systems sometimes require a PIN for authentication purposes to protect users' accounts from potential fraud or tampering. In Europe, contactless payment transactions that follow one after the other require PIN verification as an additional security measure
- `CREDIT_TRANSACTIONS_NOT_SUPPORTED` - Credit is not supported for this specific transaction. Review the [Acceptable Use Policy](https://wise.com/gb/legal/acceptable-use-policy-eea) for further information
- `CUMULATIVE_LIMIT_EXCEEDED` - In certain jurisdictions, there are restrictions on the amount that can be spent. Refer to [spending limits](https://wise.com/help/articles/2899986/what-are-my-spending-limits) for further details
- `DECLINED_ADVICE` - There is a problem with the message from the processor, so it might not be accepted because it could be incomplete or unsafe. This does not indicate a problem with the card. Advise the customer that there was a technical issue with the payment and to try again later
- `INCORRECT_CVV` - The customer entered the wrong security code. Advise the customer to check their card details and try again. If the saved card details are correct, they should remove their card details from the merchant's website and add them back again
- `INCORRECT_EXPIRY_DATE` - The customer entered the wrong expiration date for their card. If the saved card details are correct, they should remove their card details from the merchant's website and add them back again
- `INCORRECT_PIN` - The customer entered their PIN incorrectly. Advise the customer to check their PIN and try again. If the PIN is correct and still fails, suggest resetting the PIN
- `INSUFFICIENT_FUNDS` - The customer does not have enough money in their account to make the payment. Advise the customer to add money to their account and try again. In most cases, this will resolve the issue
- `INVALID_3DS_UCAF` - The 3D Secure checks failed during the transaction. The customer should try again and request authentication
- `INCORRECT_ARQC` - ARQC (Authorization Request Cryptogram) is a cryptogram generated by the card during a transaction, which is validated on the server side. If incorrect, it could indicate a faulty card, a fraudulent attack, or an issue with the POS terminal
- `INCORRECT_ICVV` - ICVV (Integrated Circuit Card Verification Value) is a security feature used to validate the authenticity of a card during chip-based transactions. There were problems reading the chip on the card, which may indicate an issue with the card's chip, the terminal, or the transaction process. Wait and try again
- `INVALID_MERCHANT` - Transaction from a specific merchant is declined by scheme. The merchant should clarify the exact cause with the scheme
- `INVALID_TRANSACTION` - Certain types of transactions are not supported. The customer should ask the merchant to use a different payment method or try a different merchant
- `MANDATE_DCC_NON_SUPPORTED_FOR_CARD_COUNTRY` - The transaction was declined because the system does not support conversions for Brazilian cards when BRL is involved. BRL will not be automatically exchanged to other currencies. If the customer wants to continue with the payment, they need to change the currency
- `MANDATE_LOCAL_CASH_WITHDRAWAL_NOT_ALLOWED` - ATM withdrawal services are not provided in the country where the transaction is taking place
- `NON_SUPPORTED_CURRENCY` - The currency in this transaction is not supported
- `NON_SUPPORTED_MCC_FOR_COUNTRY` - Transactions in this category are not supported for customers in the country of purchase. Consider using an alternative payment method or changing merchant
- `PAYMENT_METHOD_DAILY_LIMIT_EXCEEDED` - The customer has reached the daily spending limit for the card or their profile. Advise if they would like to update [card](/api-reference/spend-limits#update-card-limits) or [profile](/api-reference/spend-limits#update-profile-limits) limit
- `PAYMENT_METHOD_LIFETIME_LIMIT_EXCEEDED` - The customer has reached the lifetime spending limit. Advise if they would like to [increase](/api-reference/spend-limits#update-card-limits) their lifetime limit
- `PAYMENT_METHOD_MONTHLY_LIMIT_EXCEEDED` - The customer has reached the monthly spending limit for the card or their profile. Advise if they would like to update [card](/api-reference/spend-limits#update-card-limits) or [profile](/api-reference/spend-limits#update-profile-limits) limit
- `PAYMENT_METHOD_NOT_ALLOWED` - This payment type has been disabled. Advise if they would like to [enable](/api-reference/card/cardpermissionsupdate) the payment type
- `PAYMENT_METHOD_TRANSACTION_LIMIT_EXCEEDED` - The customer has exceeded the transaction limit for the card. Advise if they would like to update their [card](/api-reference/spend-limits#update-card-limits) limit
- `PIN_ENTRY_TRIES_EXCEEDED` - The customer has reached the maximum number of allowed online PIN entry attempts. Consider implementing a [reset PIN](/api-reference/card/cardpincountreset) feature within the app to help the customer regain access to their card
- `PRE_ACTIVATED_CARD_PIN_ENTRY_REQUIRED` - The customer has attempted to make a contactless payment at a POS or ATM, but their card has not been activated for chip and PIN transactions. To modify the card activation strategy for all cards, contact the implementation manager
- `PROCESSING_ERROR` - The system is currently experiencing technical difficulties. Advise the customer to try again after a brief period
- `RESTRICTED_MODE` - Although rare, restricted mode can occur. Advise the customer to replace their card promptly as the system should have already informed them. In this mode, more secure payment methods like chip and PIN, contactless, mobile wallets, and online payments with 3DS are allowed, while less secure methods like magnetic stripe and online payments without 3DS are not permitted
- `REVERSAL_NOT_MATCHING_AUTH_CURRENCY` - The merchant has issued a reversal instruction for a different currency than what was originally requested during the authorization process
- `SCA_SOFT_DECLINE` - The transaction cannot proceed due to SCA regulations. Suggest the customer contact the merchant and use a more secure authentication method such as 3DS. For example, the customer can try chip and PIN, or a mobile wallet like Apple Pay or Google Pay
- `SCHEME_BLOCKED_TRANSACTION` - This transaction has been flagged by the scheme and cannot be processed
- `SECURITY_CVM_FAILURE` - The system has detected that the POS terminal was misconfigured and failed security checks. Suggest the customer use an alternative payment method like contactless or mobile wallets, or recommend asking the merchant to accept a signature instead
- `SECURITY_MAGSTRIPE_SECURE_ELEMENTS_INCORRECT_OR_MISSING` - The merchant has entered the wrong type of purchase. Advise the customer to contact the merchant and ask them to correct this issue
- `SECURITY_PIN_ENTRY_REQUIRED` - To proceed with this transaction, the customer is required to enter their PIN
- `SUSPECTED_FRAUD` - This transaction has been labeled as high-risk by Wise
- `SUSPECTED_FRAUD_AML` - This transaction has been flagged as high-risk based on AML compliance protocols. This reason cannot be disclosed to end customers
- `SUSPECTED_FRAUD_COMPLIANCE` - The compliance system has flagged this transaction as high-risk. This reason cannot be disclosed to end customers
- `SUSPECTED_FRAUD_CORE_FRAUD` - This transaction has been blocked based on fraud policies and procedures
- `SUSPECTED_FRAUD_SANCTIONS` - This transaction has been flagged as high-risk based on sanctions list analysis. This reason cannot be disclosed to end customers. This classification is final and cannot be appealed
- `SUSPECTED_FRAUD_SOFT_DECLINE` - This e-commerce transaction cannot be processed due to high risk factors. The merchant must complete 3DS before the transaction can be approved
- `TRANSACTION_TYPE_NOT_SUPPORTED` - There are restrictions on this type of transaction, and sometimes the scheme will not allow it. Check if [spend control](/api-reference/spend-controls) is set up to block this transaction
- `UNEXPECTED_ERROR` - There may have been a communication error between the merchant's system and the server, but the POS system may have already notified the user of this issue
### Get card transaction
- [GET /v4/spend/profiles/{profileId}/cards/transactions/{transactionId}](https://docs.wise.com/api-reference/card-transaction/cardtransactionget.md): Retrieve a card transaction by its ID.
Use in conjunction with the V2.1.0 card transaction state change webhook.
{% admonition type="warning" %}
Only transactions created in the past 90 days can be accessed. A 422 error code will be returned otherwise.
{% /admonition %}
When a refund happens, a separate transaction will be added with a REFUND transaction type.
### List card transactions
- [GET /v4/spend/profiles/{profileId}/cards/{cardToken}/transactions](https://docs.wise.com/api-reference/card-transaction/cardtransactionlist.md): Retrieve a list of card transactions for a specific card. Transactions are ordered by transaction ID in descending order.
Use in conjunction with the V2.1.0 card transaction state change webhook.
{% admonition type="warning" %}
Only transactions created in the past 90 days can be accessed. A 422 error code will be returned otherwise.
{% /admonition %}
The debits and credits fields are not included in list responses. Use the Get card transaction endpoint to retrieve these fields.
### Get card transaction (V3) (deprecated)
- [GET /v3/spend/profiles/{profileId}/cards/transactions/{transactionId}](https://docs.wise.com/api-reference/card-transaction/cardtransactiongetv3.md): {% admonition type="warning" %}
This endpoint is deprecated. Use the V4 Get card transaction endpoint instead.
{% /admonition %}
Retrieve a card transaction by its ID.
Use in conjunction with the V2.0.0 card transaction state change webhook.
When a refund happens, a separate transaction will be added with a REFUND transaction type.
## Claim Account
Allow a customer to take ownership of an account [created on their behalf](/api-reference/user#createuser-regcode). Generate a short-lived `claim_account_code` and use it when [redirecting the customer to Wise](/guides/product/kyc/wise-kyc/redirect-to-wise/claim-account) to finalize their account setup.
### Generate a claim account code
- [POST /v1/user/claim-account](https://docs.wise.com/api-reference/claim-account/claimaccountcreate.md): Generate a short-lived claim_account_code that allows a customer to take ownership of an account. Use the code when redirecting the customer to Wise to finalize their account setup.
## Client Credentials Token
Application-level token for partner operations that don't require a specific user context. Obtained via Basic Authentication with your API client credentials (`client_id` and `client_secret`).
### Retrieve a client credentials token
- [POST /oauth/token](https://docs.wise.com/api-reference/client-credentials-token/clientcredentialstokenretrieve.md): Obtain an access token based on your Client ID and Client Secret.
## Comparison
The comparison API can be used to request price and speed information about various money transfer providers. This includes not only Wise but other providers in the market.
Price Estimation {% #comparison-price-estimation .title-3 .m-t-5 %}
The quotes (price and speed) provided by this API are based off of real quotes collected from 3rd party websites. We collect both the advertised exchange rate and fee for each provider for various amounts. When a comparison is requested, we calculate the markup percentage of the collected exchange rate on the mid-market rate at the time of collection. We then apply this markup to the current mid-market rate to provide a realistic estimate of what each provider offers. We collect data for all providers around once per hour to ensure we provide as accurate and up-to-date information as possible.
Note: Today, we only provide estimations for FX transactions with a Bank Transfer pay-in and pay-out option. This is important to stress as many providers offer significantly different fees and exchange rates when used debit/credit card, cash etc.
For more details on the data collection process please see the following page:
[https://wise.com/gb/compare/disclaimer](https://wise.com/gb/compare/disclaimer)
If you have questions or suspect any data to be inaccurate or incomplete please contact us at: [[email protected]](mailto:[email protected])
Delivery Estimation {% #comparison-delivery-estimation .title-3 .m-t-5 %}
Similar to price, we collect speed data for most (if not all) providers which we have price information for. Many providers display speed estimates to their customers in a number of different ways.
Some examples:
- "The transfer should be complete within 2-5 days"
- "The money should arrive in your account within 48 hours"
- "Should arrive by 26th Aug"
- "Could take up to 4 working days"
The below API intends to model these in a consistent format by providing a minimum and maximum range for all delivery estimations. An estimate that states "up to X" will have "max" set to a duration but "min" as null; "from X" will have "min" set to a duration and "max" as null. Finally, for those providers who offer a specific, point in time estimation (like Wise), the API will surface a duration where "min" and "max" are equal.
Quotes structure {% #comparison-quotes-structure .title-3 .m-t-5 %}
In order to provide the most flexible and accurate data for clients, we surface a denormalized list of quotes per provider where each quote represents a unique collection of comparison "dimensions".
A single given provider may expose multiple quotes for the same currency route. The most common example is where a provider offers different pricing for two different countries which use the same currency, e.g.:
Provider X:
- GBP EUR 1000 [GB -> ES] fee: 10, rate: 1.5
- GBP EUR 1000 [GB -> DE] fee: 8, rate: 1.5
- GBP EUR 1000 [GB -> FR] fee: 10, rate: 1.35
The same principle applies for speed, i.e. a provider may have different speed estimates for different target countries. Hence, we expose these as discrete quotes, where a quote is a unique combination of route, country, speed and price factors.
A client may choose to reduce this set of quotes down to a single or several quotes in order to display a relevant quote to a given user. An example where we take the cheapest quote for a given currency route (and also surface the target country) can be seen at the below link:
[https://wise.com/gb/compare/?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=1000](https://wise.com/gb/compare/?sourceCurrency=GBP&targetCurrency=EUR&sendAmount=1000)
### Request a comparison quote
- [GET /v4/comparisons](https://docs.wise.com/api-reference/comparison/comparisonget.md): Request price and speed comparison data for money transfer providers on a given currency route.
You must provide either sendAmount or recipientGetsAmount (but not both).
### Request a comparison quote (V3) (deprecated)
- [GET /v3/comparisons](https://docs.wise.com/api-reference/comparison/comparisongetv3.md): {% admonition type="warning" name="Deprecated" %}
This endpoint is deprecated. Use the V4 comparison endpoint instead.
{% /admonition %}
Request price and speed comparison data for money transfer providers on a given currency route.
## Contact
Find discoverable Wise profiles and add them to your recipient list using an identifier â such as a Wisetag, email, or phone number â without needing bank details.
Creating a transfer with a contact {% .title-3 .m-t-5 %}
1. [Create a Quote](/api-reference/quote#create-authenticated), passing `contactId` instead of `targetAccount` in the request body.
2. Extract the `targetAccount` value from the Quote response â Wise resolves the contact into a recipient account.
3. [Create a Transfer](/api-reference/transfer#create) using the `targetAccount` from the Quote response.
### Create a contact from an identifier
- [POST /v2/profiles/{profileId}/contacts](https://docs.wise.com/api-reference/contact/contactcreate.md): Finds an existing discoverable Wise profile and adds it to your recipient list. The recipient is found by an identifier â such as a Wisetag, email, or phone number â without needing bank details. Use the contactId from the response to create a transfer.
## Currencies
Retrieve the list of currencies supported for transfers, including currency codes and display names.
### Get all currencies allowed for transfers
- [GET /v1/currencies](https://docs.wise.com/api-reference/currencies/currenciesget.md): Returns all currencies available for creating transfers. Currency names are returned in English by default â pass an Accept-Language header to receive localized names.
## Delivery Estimate
Get the estimated delivery time for a transfer, showing when funds are expected to arrive in the recipient's bank account.
### Get the delivery estimate for a transfer
- [GET /v1/delivery-estimates/{transferId}](https://docs.wise.com/api-reference/delivery-estimate/deliveryestimateget.md): Get the live delivery estimate for a transfer by the transfer ID.
The delivery estimate is the time at which we currently expect the transfer to arrive in the beneficiary's bank account. This is not a guaranteed time but we are working hard to make these estimates as accurate as possible.
## Direct Debit Account
Register and retrieve external bank accounts used to fund batch transfers via ACH (USD) or EFT (CAD) direct debit.
### Create a direct debit account
- [POST /v1/profiles/{profileId}/direct-debit-accounts](https://docs.wise.com/api-reference/direct-debit-account/directdebitaccountcreate.md): Register a new external bank account for funding batch transfers via direct debit.
### Retrieve all direct debit accounts
- [GET /v1/profiles/{profileId}/direct-debit-accounts](https://docs.wise.com/api-reference/direct-debit-account/directdebitaccountget.md): Get a list of your direct debit accounts. Use the type and currency query parameters to filter accounts.
## Disputes
Raise and manage card transaction disputes, including submission via Dynamic Flow or direct API, file uploads, and dispute lifecycle tracking.
For implementation details, see:
- [Disputes via Dynamic Flow](/guides/product/issue-cards/card-disputes-dynamic-flow) â build a dispute UI using the Dynamic Flow framework
- [Disputes via API](/guides/product/issue-cards/card-disputes-api) â submit disputes directly, with per-reason request body details
- [Dispute management](/guides/product/issue-cards/card-disputes-management) â track and withdraw disputes
Dispute sub-statuses {% #dispute-sub-status .title-3 .m-t-5 %}
The possible `subStatus` values are:
- `SUBMITTED` â Initial status
- `IN_REVIEW` â The dispute is under review or requires additional information
- `REFUNDED` â The refund has been processed
- `REJECTED` â The dispute is invalid
- `WITHDRAWN` â The customer has withdrawn the dispute
- `CONFIRMED` â The dispute has been reviewed but a refund is not applicable
- `REFUND_IN_PROGRESS` â A refund is being processed
- `ATTEMPTING_RECOVERY` â A chargeback request has been submitted
- `RECOVERY_UNSUCCESSFUL` â The chargeback attempt was unsuccessful
{% admonition type="warning" %}
The status transition diagram may undergo modifications in the future and only covers regular pathways.
{% /admonition %}
{% img
src="/images/diagrams/dispute-status-flow.png"
alt="Dispute statuses transition diagram"
/%}
### Dispute dynamic flow entry point
- [POST /v3/spend/profiles/{profileId}/dispute-form/flows/step/{scheme}/{reason}](https://docs.wise.com/api-reference/disputes/disputedynamicflowstep.md): Retrieves the JSON for initiating the dispute flow. Use this endpoint with Wise's
Dynamic Flow framework.
The JSON response must be passed into the Dynamic Flow framework, which handles the multi-step dispute submission including the generation of subsequent pages and the creation of the dispute.
Setting up the API
You will need to implement a GET API with the following format:
GET https://{{yourApiUrl}}/v3/spend/profiles/{{profileId}}/dispute-form/flows/step/{{scheme}}/{{reason}}?transactionId={{transactionId}}
This API should forward the call to:
POST https://{{wiseUrl}}/v3/spend/profiles/{{profileId}}/dispute-form/flows/step/{{scheme}}/{{reason}}?transactionId={{transactionId}}
This is required as the dynamic flow returned by Wise will automatically be configured to call your GET API. Use baseUrl or fetcher as part of the dynamic flow setup to redirect the Dynamic Flow JavaScript library to your domain.
For a full integration guide, including example backend implementation and styling, see Disputes via Dynamic Flow.
### Retrieve dispute reasons
- [GET /v3/spend/profiles/{profileId}/dispute-form/reasons](https://docs.wise.com/api-reference/disputes/disputereasonsget.md): Retrieves the list of possible reasons for submitting a dispute.
If a reason code has subOptions, those should be used as the reason code when submitting disputes.
### Submit dispute
- [POST /v3/spend/profiles/{profileId}/dispute-form/flows/{scheme}/{reason}](https://docs.wise.com/api-reference/disputes/disputesubmit.md): Submit a dispute for a card transaction.
The request body structure varies per dispute reason code. All reasons share a common structure with transaction, form, disclaimer, and files objects, but the fields within form and files differ per reason.
For per-reason request body details, see the disputes via API guide.
### Upload dispute file
- [POST /v4/spend/profiles/{profileId}/dispute-form/file](https://docs.wise.com/api-reference/disputes/disputefileupload.md): Upload a file for use in a dispute submission. Use the returned file ID in the files object when submitting a dispute.
A dispute referencing the returned file ID must be submitted no later than two hours after the file upload, otherwise the file will expire and must be re-uploaded.
### List disputes
- [GET /v3/spend/profiles/{profileId}/disputes](https://docs.wise.com/api-reference/disputes/disputelist.md): List disputes for a profile with optional filters.
### Get dispute
- [GET /v3/spend/profiles/{profileId}/disputes/{disputeId}](https://docs.wise.com/api-reference/disputes/disputeget.md): Retrieve a dispute by its ID.
### Withdraw dispute
- [PUT /v3/spend/profiles/{profileId}/disputes/{disputeId}/status](https://docs.wise.com/api-reference/disputes/disputewithdraw.md): Withdraw a dispute by setting its status to CLOSED.
You can only withdraw a dispute if canWithdraw is true on the dispute resource.
## FaceTec
Wise leverages [FaceTec's](https://www.facetec.com/) facial biometric technology for authentication. Use this endpoint to retrieve the public key needed for exporting 3D FaceMaps.
### Get FaceTec public key
- [GET /v1/facetec/public-key](https://docs.wise.com/api-reference/facetec/facetecpublickeyget.md): Retrieve Wise's FaceTec public key to be used when exporting 3D FaceMap from your FaceTec host to Wise.
The exported FaceMap can be used to Enrol FaceMap.
## JOSE
Wise uses the [JOSE framework](https://jose.readthedocs.io/en/latest/) to accept and respond with signed and encrypted payloads. These endpoints allow you to manage keys and test your signing and encryption implementation.
For more information, please speak with your Implementation team.
### Get Wise public signing key
- [GET /v1/auth/jose/response/public-keys](https://docs.wise.com/api-reference/jose/joseresponsepublickeysget.md): Returns a public key issued by Wise for verifying signed HTTP responses and for encrypting payloads.
For both signature verification and payload encryption, the process involves storing this public key after retrieval. In both cases, the stored public key should be used without calling this endpoint.
If verification of the signed request fails or you receive an encryption error, call this API once to issue a fresh key from Wise and then try verification one more time.
{% admonition type="warning" %}
This endpoint requires a client credentials token, not a user level access token. Make sure you use your client details to fetch a valid client credentials token before performing this call.
{% /admonition %}
### Add a new client public key
- [POST /v1/auth/jose/request/public-keys](https://docs.wise.com/api-reference/jose/joserequestpublickeyscreate.md): Upload a client public key for request payload signing or response payload encryption.
{% admonition type="warning" %}
This endpoint requires a client credentials token, not a user level access token. Make sure you use your client details to fetch a valid client credentials token before performing this call.
{% /admonition %}
### Playground JWS
- [POST /v1/auth/jose/playground/jws](https://docs.wise.com/api-reference/jose/joseplaygroundjws.md): Send test signed HTTP requests and receive signed responses. Signing is mandatory for this endpoint â any message that is not a JSON Web Signature (JWS) will be rejected.
### Playground JWE for GET requests
- [GET /v1/auth/jose/playground/jwe](https://docs.wise.com/api-reference/jose/joseplaygroundjweget.md): Send test HTTP GET requests and receive encrypted responses.
### Playground JWE for POST requests
- [POST /v1/auth/jose/playground/jwe](https://docs.wise.com/api-reference/jose/joseplaygroundjwepost.md): Send test encrypted HTTP requests and receive encrypted responses. Encryption is mandatory for this endpoint â any message that is not in JSON Web Encryption (JWE) format will be rejected.
### Playground JWE for direct encryption
- [POST /v1/auth/jose/playground/jwe-direct-encryption](https://docs.wise.com/api-reference/jose/joseplaygroundjwedirectencryption.md): Send encrypted HTTP requests for testing purposes and receive responses encrypted with the original content encryption key. Encryption is mandatory for this endpoint â any message that is not in JSON Web Encryption (JWE) format will be rejected.
### Playground JWS+JWE
- [POST /v1/auth/jose/playground/jwsjwe](https://docs.wise.com/api-reference/jose/joseplaygroundjwsjwe.md): Send test signed and encrypted HTTP requests and receive signed and encrypted responses. Both signing and encryption are mandatory for this endpoint. The request must be a JSON Web Signature (JWS) wrapped in JSON Web Encryption (JWE) â any message that does not follow this format will be rejected.
The flow combines both JWS and JWE:
1. Request: Sign payload (JWS) â Encrypt signed JWT (JWE) â Send to Wise
2. Response: Receive encrypted response â Decrypt (JWE) â Verify signature (JWS)
## Multi Currency Account
The Wise multi-currency account (MCA) enables users to hold, convert, and fund transfers (single or batches) with balances in up to 56 currencies. Of the 50+ currency balances supported, 10+ come with local account details.
Please refer to our [multi-currency account guide](/guides/product/accounts/managing-accounts) for more information on the general use of the endpoints included below.
Please see the [Balances APIs](/api-reference/balance) for more details.
### Retrieve available currencies
- [GET /v2/borderless-accounts-configuration/profiles/{profileId}/available-currencies](https://docs.wise.com/api-reference/multi-currency-account/mcaavailablecurrenciesget.md): Lists all currencies that are available for balance accounts. This includes those that can have funds added from external accounts, as well as those that a balance can be held in.
### Retrieve payin currencies
- [GET /v2/borderless-accounts-configuration/profiles/{profileId}/payin-currencies](https://docs.wise.com/api-reference/multi-currency-account/mcapayincurrenciesget.md): Lists all currencies available for balance accounts that also support bank account details. You can use this list to create a balance account for the currency included and then subsequently create bank account details.
### Retrieve multi currency account for a profile
- [GET /v4/profiles/{profileId}/multi-currency-account](https://docs.wise.com/api-reference/multi-currency-account/mcaget.md): Returns the multi-currency account details for the specified profile. If the user does not yet have a multi-currency account, a 404 Not Found will be returned.
### Retrieve multi currency account eligibility
- [GET /v4/multi-currency-account/eligibility](https://docs.wise.com/api-reference/multi-currency-account/mcaeligibilityget.md): Checks eligibility for a multi-currency account for either a specific profile or for a location. Customers in some countries and states/provinces may not be eligible for a multi currency account.
To check a profile, pass the profileId as a query parameter.
To check a specific location, pass the country using 2-letter ISO 3166 codes. If the country is US, a valid 2-letter state parameter must also be passed.
- Example (France): /v4/multi-currency-account/eligibility?country=FR
- Example (USA, California): /v4/multi-currency-account/eligibility?country=US&state=CA