addresses.list
List of addresses belonging to user profile.
addresses.create
Adds address info to user profile.
List of required fields are different for different countries. Use the [address requirements endpoint](#operation/addressRequirementsGet) to dynamically discover required fields.
For updating personal profiles, consider using [the personal profile update endpoint](/api-reference/profile/profilepersonalupdate) 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.
addresses.get
Get address info by ID.
address_requirements.list
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](/guides/developer/api-guides/address-requirements).
address_requirements.create
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](/guides/developer/api-guides/address-requirements).
profiles.balances.list
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.
profiles.balances.create
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.
profiles.balances.get
Returns a balance based on the specified balance ID.
profiles.balances.delete
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.
profiles.balance_movements.create
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.
profiles.balance_capacity.get
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.
profiles.excess_money_account.create
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.
profiles.total_funds.get
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 |
borderless_accounts.list
{% admonition type="warning" %}
This endpoint is deprecated. Use the [v4 Balances endpoint](/api-reference/balance/balanceget) instead.
{% /admonition %}
Get available balances for all activated currencies in your multi-currency account.
borderless_accounts.conversions.create
{% admonition type="warning" %}
This endpoint is deprecated. Use the [balance movements endpoint](/api-reference/balance/balancemovement) to move and convert between balances instead.
{% /admonition %}
Convert funds between your multi-currency account currencies.
Quote which is used in this call must be created with `"payOut": "BALANCE"`.
Note that this call needs an extra field in header called `X-idempotence-uuid`.
profiles.balances.hold_limit_breach.create_v1
Returns a list of hold limit breaches for a profile. A hold limit breach occurs when a balance exceeds the regulatory hold limit for that profile's country (e.g. Singapore, Malaysia).
You can optionally filter by `state` and `closing_reason`.
profiles.balances.hold_limit_breach.create_v1_2
Closes an open hold limit breach by performing a one-time refund to a specified recipient. The recipient will receive the excess amount that caused the breach.
Only breaches with `state: OPEN` can be closed via this endpoint.
profiles.balance_statements.statement_json.get
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](/guides/developer/auth-and-security/sca-and-2fa)
{% /admonition %}
profiles.account_details_orders.list_v1
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](/api-reference/bank-account-details/bankaccountdetailsorderslist) instead.
{% /admonition %}
profiles.account_details_orders.create
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.
profiles.bank_details.create
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 %}
profiles.account_details.list
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`.
profiles.account_details_orders.list_v3
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`.
profiles.account_details.payments.returns.create
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.
profiles.batch_groups.create
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.
profiles.batch_groups.get
Get an existing batch group by ID.
profiles.batch_groups.update
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.
profiles.batch_groups.transfers.create
Create a transfer in the batch group using a previously created recipient account and quote.
For the request body format, see [transfer creation](/api-reference/transfer#create). For quote and recipient creation, see [quote creation](/api-reference/quote/quotecreate) and [recipient creation](/api-reference/recipient/recipientcreate).
profiles.batch_payments.payments.create
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](/guides/developer/auth-and-security/sca-and-2fa).
{% /admonition %}
profiles.batch_groups.payment_initiations.create
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](/api-reference/direct-debit-account/directdebitaccountcreate) 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](/guides/developer/auth-and-security/sca-and-2fa).
{% /admonition %}
profiles.batch_groups.payment_initiations.get
Get payment initiation info by ID. In addition to [webhooks](/api-reference/webhook-event/eventbatchpaymentinitiationsstatechange), this endpoint can be used for polling the status of a payment initiation.
settlements.create
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 %}
spend.profiles.cards.list
Returns a paginated list of cards that belong to a specific profile.
spend.profiles.cards.get
Retrieves details for a specific card by its token.
spend.profiles.cards.status.update
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
spend.profiles.cards.reset_pin_count.create
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 %}
spend.profiles.cards.spending_permissions.list
Retrieves the current spending permissions configured for a card.
spend.profiles.cards.spending_permissions.update_v3
Enable or disable a single spending permission on a card.
{% admonition type="warning" %}
This endpoint is deprecated. Please use the [v4 endpoint](/api-reference/card/cardpermissionsbulkupdate) instead.
{% /admonition %}
spend.profiles.cards.spending_permissions.update_v4
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.
cards.client_side_encryption.fetch_encrypting_key.list
Fetches Wise's RSA public key required for encrypting sensitive card data requests.
This key is used in the [sensitive card details flow](/guides/product/issue-cards/sensitive-card-details) to create JWE (JSON Web Encryption) payloads.
cards.sensitive_card_data.details.create
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](/guides/product/issue-cards/sensitive-card-details) 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](/guides/developer/auth-and-security/sca-and-2fa).
{% /admonition %}
cards.sensitive_card_data.pin.create
Fetches the card's PIN.
Requires an encrypted JWE payload for security. See the [sensitive card details guide](/guides/product/issue-cards/sensitive-card-details) 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](/guides/developer/auth-and-security/sca-and-2fa).
{% /admonition %}
spend.profiles.cards.phone_number.update
{% admonition type="warning" %}
This endpoint is deprecated for partners onboarded after 1/3/2025. For new and existing partners, your clientId will need to be approved by our support team to make the `phoneNumber` optional in the [create card order endpoint](/api-reference/card-order/cardordercreate). See [3DS for more information](/guides/product/issue-cards/3ds).
{% /admonition %}
Updates the phone number of a card. The new phone number must be a valid phone number.
spend.profiles.cards.production.get
Retrieves the current production status of a card at a kiosk machine.
**Best practice**: Subscribe to the [card production status change](/api-reference/webhook-event/eventcardscardproductionstatuschange) webhook for real-time notifications. Use this endpoint only when you need to synchronously check the status.
spend.profiles.cards.production.update
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](/api-reference/webhook-event/eventcardscardproductionstatuschange) 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 %}
spend.profiles.card_orders.list
Retrieves a list of card orders created for the specified `profileId`.
spend.profiles.card_orders.create
Creates a new card order. The `program` field value is retrieved from the [retrieve all card programs](/api-reference/card-order/cardorderprogramsget) 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](/api-reference/profile/profilebusinesscreate).
If the cardholder is not the business representative, create a cardholder [personal profile](/api-reference/profile/profilepersonalcreate) 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](/guides/developer/api-guides/card-address-validation).
spend.profiles.card_orders.get
Retrieves a card order based on the `cardOrderId`.
spend.profiles.card_orders.availability.list
Retrieves the list of available card programs for each `profileId`.
spend.profiles.card_orders.requirements.list
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](/api-reference/card-order/cardorderpresetpin) 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](/guides/product/kyc).
- `ADDRESS`: Provide a valid address for your card order. Refer to [address validation](/api-reference/card-order/cardordervalidateaddress).
A requirement **status** has the following values:
- `NOT_INITIATED`
- `NEEDS_ACTION`
- `PENDING`
- `COMPLETED`
- `FAILED`
spend.profiles.card_orders.status.update
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 %}
spend.address.validate
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](/guides/developer/api-guides/card-address-validation).
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 %}
cards.sensitive_card_data.preset_pin.create
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](/guides/product/issue-cards/sensitive-card-details) to use this endpoint.
To use this endpoint, make sure to set the `api token` and the `card order id` in the headers.
spend.profiles.cards.transactions.get_v3
{% admonition type="warning" %}
This endpoint is deprecated. Use the [V4 Get card transaction](/api-reference/card-transaction/cardtransactionget) endpoint instead.
{% /admonition %}
Retrieve a card transaction by its ID.
Use in conjunction with the [V2.0.0 card transaction state change webhook](/guides/developer/webhooks/event-types#cards-transaction-state-change).
When a refund happens, a separate transaction will be added with a `REFUND` transaction type.
spend.profiles.cards.transactions.get_v4
Retrieve a card transaction by its ID.
Use in conjunction with the [card transaction state change webhook](/guides/developer/webhooks/event-types#cards-transaction-state-change) for versions V2.1.0 and later.
{% 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.
spend.profiles.cards.transactions.list
Retrieve a list of card transactions for a specific card. Transactions are ordered by transaction ID in descending order.
Use in conjunction with the [card transaction state change webhook](/guides/developer/webhooks/event-types#cards-transaction-state-change) for versions V2.1.0 and later.
{% 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](/api-reference/card-transaction/cardtransactionget) endpoint to retrieve these fields.
user.claim_account.create
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](/guides/product/kyc/wise-kyc/redirect-to-wise/claim-account) to finalize their account setup.
comparisons.list_v3
{% admonition type="warning" name="Deprecated" %}
This endpoint is deprecated. Use the [V4 comparison endpoint](/api-reference/comparison/comparisonget) instead.
{% /admonition %}
Request price and speed comparison data for money transfer providers on a given currency route.
comparisons.list_v4
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).
profiles.contacts.create
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.list
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_estimates.get
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.
profiles.direct_debit_accounts.list
Get a list of your direct debit accounts. Use the `type` and `currency` query parameters to filter accounts.
profiles.direct_debit_accounts.create
Register a new external bank account for funding batch transfers via direct debit.
spend.profiles.dispute_form.flows.step.create
Retrieves the JSON for initiating the dispute flow. Use this endpoint with Wise's
[Dynamic Flow framework](https://www.npmjs.com/package/@transferwise/dynamic-flows).
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 gu
spend.profiles.dispute_form.reasons.list
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.
spend.profiles.dispute_form.flows.create
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](/guides/product/issue-cards/card-disputes-api#reason-examples).
spend.profiles.dispute_form.file.create_v4
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.
spend.profiles.disputes.list
List disputes for a profile with optional filters.
spend.profiles.disputes.get
Retrieve a dispute by its ID.
spend.profiles.disputes.status.update
Withdraw a dispute by setting its status to `CLOSED`.
You can only withdraw a dispute if `canWithdraw` is `true` on the dispute resource.
spend.profiles.dispute_form.file.create_v3
{% admonition type="warning" %}
This endpoint is deprecated. Use the [v4 upload dispute file endpoint](/api-reference/disputes/disputefileupload) instead.
{% /admonition %}
Submit a file for disputes.
This API is not available for sandbox testing.
Use the `fileId` in the response for the dispute submission.
**NB:** A dispute referencing the returned `fileId` must be submitted no later than **two hours** after the file submission, otherwise the file will expire and must be re-submitted.
profiles.kyc_reviews.list
Retrieves a list of all active KYC Reviews for a given profile.
profiles.kyc_reviews.create
Creates a KYC Review for a specific customer action.
profiles.kyc_reviews.get_v1
{% admonition type="warning" %}
This endpoint is deprecated. Use [Get KYC Review by ID](kycreviewget) (V2) instead.
{% /admonition %}
Retrieves a single KYC Review by ID for a profile.
profiles.kyc_reviews.update
Updates the KYC Review with a redirect URL.
Returns the KYC Review object with a `link` field containing a URL where the end customer needs to be directed in order to complete the Hosted KYC flow. **The link is short-lived and single-use and valid for 5 minutes**. Use the `expiresAt` field in the response to determine the exact expiry time. To regenerate the link, call this endpoint again.
Once the Hosted KYC flow is completed by the end customer, they will be redirected to the `redirectUrl` provided in this API call. During the redirection, the `redirectUrl` will be appended with query parameters: `status=success`, `status=failed`, or `status=closed`.
profiles.kyc_reviews.get_v2
Retrieves a single KYC Review by ID for a profile.
profiles.kyc_requirements.create
Submit a KYC requirement for a KYC Review.
- A KYC requirement can only be submitted if the KYC Review status is `WAITING_CUSTOMER_INPUT` or `PASSED_WITH_REQUIREMENTS`.
- A KYC requirement should only be submitted if its `state` is `NOT_PROVIDED` and `apiCollectionSupported` is `true`.
See the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for the full list of supported requirement types, submission data structures, and accepted values.
borderless_accounts_configuration.profiles.available_currencies.list
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.
borderless_accounts_configuration.profiles.payin_currencies.list
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.
profiles.multi_currency_account.get
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.
multi_currency_account.eligibility.list
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`
one_time_token.status.list
Retrieve necessary information to clear a OTT.
one_time_token.pin.verify
[{% img src="https://img.shields.io/badge/jose-direct_encryption-blue" /%}](/guides/developer/auth-and-security/jose-jwe){% .d-inline-block %}
To clear a **PIN** challenge listed in a OTT.
Notes:
1. User is required to [create pin](/api-reference/user-security/usersecuritypincreate) before the verification can be successful.
2. Rate limit may be applied if there are 5 continuous unsuccessful attempts and OTT creation will be blocked for 15 minutes.
one_time_token.partner_device_fingerprint.verify
[{% img src="https://img.shields.io/badge/jose-direct_encryption-blue" /%}](/guides/developer/auth-and-security/jose-jwe){% .d-inline-block %}
To clear a **Device Fingerprint** challenge listed in an OTT.
Notes:
1. User is required to [create a device fingerprint](/api-reference/user-security/usersecuritydevicefingerprintcreate) before the verification can be successful.
2. Rate limit may be applied if there are 5 continuous unsuccessful attempts and OTT creation will be blocked for 15 minutes.
one_time_token.facemap.verify
To clear a **FACE_MAP** challenge listed in a OTT.
Notes:
1. User is required to [enrol facemap](/api-reference/user-security/usersecurityfacemapenrol) before the verification can be successful.
2. Rate limit may be applied if there are 5 continuous unsuccessful attempts and OTT creation will be blocked for 15 minutes.
application.users.phone_numbers.list
List verified phone numbers for a user.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
application.users.phone_numbers.create
Create a verified phone number for a user.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
one_time_token.sms.trigger.create
To trigger a SMS challenge by sending SMS to user verified [phone number](/api-reference/user-security/usersecurityphonenumberlist) containing a 6 digit one time password (**OTP**).
This **OTP** code can be used to clear a SMS challenge by using the [Verify SMS endpoint](/api-reference/sca-otp/ottsmsverify).
one_time_token.sms.verify
To clear a **SMS** challenge listed in a OTT.
Notes:
1. User is required to have a verified phone number. See [create phone number](/api-reference/sca-otp/usersecurityphonenumbercreate) for more information.
2. [Trigger SMS Challenge](/api-reference/sca-otp/ottsmstrigger) is required to be called first.
3. Since we won't be sending real SMS on sandbox, the **OTP Code** will always be **111111**.
one_time_token.whatsapp.trigger.create
To trigger a WhatsApp challenge by sending WhatsApp message to user verified [phone number](/api-reference/user-security/usersecurityphonenumberlist) containing a 6 digit one time password (**OTP**).
This **OTP** code can be used to clear a WHATSAPP challenge by using the [Verify WhatsApp endpoint](/api-reference/sca-otp/ottwhatsappverify).
one_time_token.whatsapp.verify
To clear a **WHATSAPP** challenge listed in a OTT.
Notes:
1. User is required to have a verified phone number. See [create phone number](/api-reference/sca-otp/usersecurityphonenumbercreate) for more information.
2. [Trigger WhatsApp Challenge](/api-reference/sca-otp/ottwhatsapptrigger) is required to be called first.
3. Since we won't be sending real WhatsApp message on sandbox, the **OTP Code** will always be **111111**.
one_time_token.voice.trigger.create
To trigger a Voice challenge by sending voice message to user verified [phone number](/api-reference/user-security/usersecurityphonenumberlist) containing a 6 digit one time password (**OTP**).
This **OTP** code can be used to clear a VOICE challenge by using the [Verify Voice endpoint](/api-reference/sca-otp/ottvoiceverify).
one_time_token.voice.verify
To clear a **VOICE** challenge listed in a OTT.
Notes:
1. User is required to have a verified phone number. See [create phone number](/api-reference/sca-otp/usersecurityphonenumbercreate) for more information.
2. [Trigger Voice Challenge](/api-reference/sca-otp/ottvoicetrigger) is required to be called first.
3. Since we won't be sending real voice message on sandbox, the **OTP Code** will always be **111111**.
application.users.phone_numbers.update
Update a verified phone number for a user.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
application.users.phone_numbers.delete
Delete a verified phone number for a user.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
identity.one_time_token.status.list
{% admonition type="warning" %}
This endpoint is deprecated. Use the [new endpoint](/api-reference/sca-ott/ottstatusget) to get status of a one time token instead.
{% /admonition %}
Retrieve necessary information to clear a OTT.
cases.create
Cases are used to collect or transmit additional information between Partners and Wise. Use this endpoint to create a new case.
{% admonition type="warning" %}
Please do not include PII in the `subject` of a case. Any specific details regarding the case that need to be communicated should be included in the `description`.
{% /admonition %}
cases.get
This endpoint returns a partner case based on the specified case ID.
cases.comments.list
This endpoint returns a comments list object, which is an array of comments that have been associated with the case. Comments are ordered newest to oldest and are not paginated (all comments returned at once).
cases.comments.update
This endpoint allows for a comment to be placed on a partner case.
profiles.payin_sessions.paynow.create
Creates the encoded QR code and details for the payin session so the user can fund a transfer or balance top-up via a PayNow transaction.
This operation supports the SGD currency only.
profiles.transfers.deposit_details.bank_transfer.list
Retrieve the bank details for the account that the customer should send funds to when paying for a Wise transfer via a bank transfer.
`profileId` in the request URL refers to the profile that created the transfer. It can be either the personal profile ID, or the business profile ID.
The `payinBankAccount` field allows the bank details to be displayed dynamically in a user interface, by displaying the label and value fields.
Currently, this API supports the following currencies: AUD, BGN, BRL, CAD, CHF, CZK, DKK, EUR, GBP, HKD, HRK, HUF, IDR, INR, JPY, MYR, NOK, NZD, PLN, RON, SEK, SGD, TRY, USD.
profiles.create
{% admonition type="warning" %}
This endpoint is deprecated. Please see the [Create Personal Profile](/api-reference/profile/profilepersonalcreate) and [Create Business Profile](/api-reference/profile/profilebusinesscreate) v2 endpoints.
{% /admonition %}
Create personal or business user profile. Set `type` to `"personal"` or `"business"`.
One person cannot have multiple active duplicate user profiles, creating multiple profiles with the same details will fail. When this happens, you should show an error message to the user informing them that they may have an existing Wise account. The customer should then be allowed to [link to an existing Wise account](/guides/product/kyc/partner-kyc/accessing-accounts#link-account).
{% admonition type="info" %}
For personal profiles, you must submit the profile's address using [POST /v1/addresses](/api-reference/address/addresscreate). Failure to do so will result in an incomplete registration and delayed transactions.
{% /admonition %}
For business profiles, you must
profiles.update
{% admonition type="warning" %}
This endpoint is deprecated. Please see the [Update Personal Profile](/api-reference/profile/profilepersonalupdate) and [Update Business Profile](/api-reference/profile/profilebusinessupdate) v2 endpoints.
{% /admonition %}
Update user profile information. Request and response is same as described in the create profile endpoint, with the addition of the `id` field.
{% admonition type="info" %}
If user profile has been verified then there are restrictions on what information is allowed to change, where permitted, use the update window functionality to submit updated data.
{% /admonition %}
profiles.list
List of all profiles belonging to user.
profiles.personal_profile.create
Create a personal profile for the authenticated user. A personal profile represents an individual and is required before creating transfers or business profiles.
{% admonition type="info" %}
Use the `X-idempotence-uuid` header to safely retry requests. If omitted and a profile already exists, the API returns `409 Conflict`. You can then retrieve existing profiles via [List profiles](/api-reference/profile/profilelist).
{% /admonition %}
Field notes {% .title-4 .m-t-3 %}
- **First and last names** are limited to 30 characters each. Truncate if necessary (e.g. when a customer has many middle names).
- **`occupations`** is required for CA, IN, JP, ID, IL, MX, and within the US for the state NM.
- **`contactDetails`** are used for mandatory customer notifications and to help identify your customer when contacting Wise support.
profiles.business_profile.create_v2
It is required that you first create a personal profile with details of the authorized representative of the business. It is currently not possible to create a business profile without first creating a personal profile.
{% admonition type="info" %}
This request accepts an optional field in the header, `X-idempotence-uuid`. This should be unique for each Profile you create. In the event that the request fails, you should use the same value again when retrying. If the `X-idempotence-uuid` header is not provided and a Profile already exists, then you will receive a response with an HTTP status code `409`. If this happens, you can retrieve the profiles with the 'List profiles for a user account' API `GET /v2/profiles`.
{% /admonition %}
See [Business Category](/guides/developer/api-guides/business-categories) for the list of valid `firstLevelCategory` and `secondLevelCategory` values.
profiles.business_profile.create_v3
Create a business profile and its authorized representative in a single request.
{% admonition type="info" %}
This request accepts an optional field in the header, `X-idempotence-uuid`. This should be unique for each Profile you create. In the event that the request fails, you should use the same value again when retrying. If the `X-idempotence-uuid` header is not provided and a Profile already exists, then you will receive a response with an HTTP status code `409`.
{% /admonition %}
See [Business Category](/guides/developer/api-guides/business-categories) for the list of valid `firstLevelCategory` and `secondLevelCategory` values.
profiles.get
Get profile info by ID.
profiles.personal_profile.update
Update user profile information for a personal profile.
{% admonition type="warning" %}
If user profile has been verified then there are restrictions on what information is allowed to change. Where permitted, use the update window functionality by [opening the update window](/api-reference/profile/profileupdatewindowopen), submitting the updated information using this endpoint, and finally [closing the update window](/api-reference/profile/profileupdatewindowclose).
{% /admonition %}
profiles.business_profile.update
Update user profile information for a business profile.
{% admonition type="warning" %}
If user profile has been verified then there are restrictions on what information is allowed to change.
{% /admonition %}
Where permitted, use the update window functionality by [opening the update window](/api-reference/profile/profileupdatewindowopen), submitting the updated information using this endpoint, and finally [closing the update window](/api-reference/profile/profileupdatewindowclose).
See [Business Category](/guides/developer/api-guides/business-categories) for the list of valid `firstLevelCategory` and `secondLevelCategory` values.
profiles.business_profile.business_representative.list
Get Business Representative info by Business Profile ID.
profiles.business_profile.business_representative.update
Update or transfer the Business Representative for the specified Business Profile.
Set `updateContext` to `UPDATE_DETAILS` to update the existing Business Representative's details, or `TRANSFER_OF_AUTHORISATION` to transfer authority of the Business Profile to a new Business Representative.
{% admonition type="info" %}
If the Business Representative has been verified then there are restrictions on what information is allowed to change.
{% /admonition %}
{% admonition type="info" %}
If this Business Representative is shared across multiple Business Profiles, then changes will be reflected for all of the Business Profiles.
{% /admonition %}
When using `TRANSFER_OF_AUTHORISATION`, this will overwrite the existing Business Representative. The new Business Representative will need to be verified for KYC purposes.
profiles.verification_documents.create
Add an identification document to a personal profile. Not applicable to business profiles.
For SSN submissions, only `type` and `uniqueIdentifier` (9 digits, no letters or symbols) are required.
profiles.verification_documents.update
Update an existing identification document on a personal profile. Not
applicable to business profiles.
This endpoint performs a full replacement of the document details. Any
fields not provided in the request body will be set to null on the stored
document. Partners must provide all fields they wish to retain.
Only partners with a KYC partner onboarding model
are permitted to use this endpoint. Non-KYC partners will receive a 400 error.
profiles.directors.list
Returns the list of director objects associated with the business profile.
profiles.directors.create
Adds new directors to the business profile.
Returns the list of all directors associated with the business profile.
profiles.directors.update
Overrides directors in the business profile.
Returns the list of all directors associated with the business profile.
profiles.ubos.list
Returns the list of all ultimate beneficial owners associated with the business profile.
profiles.ubos.create
Adds new ultimate beneficial owners to the business profile.
Returns the list of all ultimate beneficial owners associated with the business profile.
All the shareholders that have at least 25% ownership should be submitted via this API.
Note that in some cases, we do not require the `ownershipPercentage`. In these cases, `null` should be passed as the value.
profiles.ubos.update
Overrides ultimate beneficial owners in the business profile.
Returns the list of all ultimate beneficial owners associated with the business profile.
profiles.update_window.create
Opens the update window for updating the profile information: details, addresses, directors, owners, others.
profiles.update_window.delete
Deletes the update window for updating the profile.
profiles.extension_requirements.list
{% admonition type="warning" %}
This endpoint is deprecated. Please check the [Additional Verification](/api-reference/verification) endpoints for providing additional verification details for a profile.
{% /admonition %}
After having a profile created, in some situations we can need more specific information about it. In order to know which fields are required for a given profile, and to send the information over, we expose a few endpoints:
- `GET /v1/profiles/{profileId}/extension-requirements`
- `POST /v1/profiles/{profileId}/extension-requirements`
and
- `POST /v1/profiles/{profileId}/extensions`
- `GET /v1/profiles/{profileId}/extensions`
The `GET` and `POST` profile extension-requirements endpoints help you to figure out which fields are required to create a valid profile for different regions. You can use this data to build a dynamic user interface on top of these endpoints.
The `POST` and `GET` profile extensions endpoints allow you to send the extra profile information and retrieve it, respecti
profiles.extension_requirements.create
{% admonition type="warning" %}
This endpoint is deprecated. Please check the [Additional Verification](/api-reference/verification) endpoints for providing additional verification details for a profile.
{% /admonition %}
Post extension requirements to discover additional required fields based on selected values. See the [GET extension-requirements](/api-reference/profile/profileextensionrequirementsget) endpoint for full details on how to use these endpoints together.
profiles.extensions.list
{% admonition type="warning" %}
This endpoint is deprecated. Please check the [Additional Verification](/api-reference/verification) endpoints for providing additional verification details for a profile.
{% /admonition %}
Retrieve the extra profile information previously submitted via extensions. See the [GET extension-requirements](/api-reference/profile/profileextensionrequirementsget) endpoint for full details on how to use these endpoints together.
profiles.extensions.create
{% admonition type="warning" %}
This endpoint is deprecated. Please check the [Additional Verification](/api-reference/verification) endpoints for providing additional verification details for a profile.
{% /admonition %}
Submit the extra profile information gathered from the extension requirements. See the [GET extension-requirements](/api-reference/profile/profileextensionrequirementsget) endpoint for full details on how to use these endpoints together.
profiles.verification_status.bank_transfer.create
You can check the verification status of a profile using this API. This is a profile-specific API resource which should be accessed using an access token acquired for the profile.
We do not expose any finer details of customer verification.
spend.profiles.cards.payment_tokens.create
You have the option to obtain the payment tokens associated with a card, which can assist in determining if it's already linked to a specific wallet.
Note that the payment token status associated with the card may not be accurate (for example, after a phone factory reset).
Therefore, it's advisable to consistently check the wallet instance for the most up-to-date token status.
spend.profiles.cards.payment_tokens.activation.create
This endpoint activates the payment token for a card that has been manually added to a wallet provider. Please read this [guide](/guides/product/issue-cards/card-digital-wallet.md) before implementing this API.
{% admonition type="warning" %}
This API is not available for sandbox testing.
{% /admonition %}
cards.push_provisioning.encrypted_payload.google_pay.create
Returns encrypted cardholder information and other metadata needed for Google Pay push provisioning.
{% admonition type="warning" %}
This API is not available for sandbox testing.
{% /admonition %}
cards.push_provisioning.encrypted_payload.apple_pay.create
Returns encrypted cardholder information and other metadata needed for Apple Pay push provisioning.
{% admonition type="warning" %}
This API is not available for sandbox testing.
{% /admonition %}
quotes.create
Use this endpoint to get example quotes for people to see the exchange rate and fees Wise offers before a user has created or linked an account. This can drive a version of the quote screen that shows the user what Wise offers before they sign up.
Note that this endpoint does not require a token to create the resource, however, since it is just an example, the returned quote has no ID so can't be used later to create a transfer.
In order to get an accurate partner fee, we require a client credentials token to be provided. If you are a partner and would like your fee to be included in the quote returned, you must provide your auth token. If not, you do not require the Authorization header.
{% admonition type="info" %}
Unauthenticated quotes cannot be used to create transfers, they are meant for illustration purposes in partner interfaces only. Make sure to create an authenticated quote during the transfer creation flow.
{% /admonition %}
profiles.quotes.create
{% admonition type="info" %}
You must use a user access token to authenticate this call and supply the profile with which the quote should be associated. This ensures that quote can be used to create a transfer.
{% /admonition %}
If you are funding the transfer from a Multi Currency Balance, you must set the `payIn` as `BALANCE` to get the correct pricing in the quote. Not doing so will default to `BANK_TRANSFER` and the fees will be inconsistent between quote and transfer.
{% admonition type="info" %}
When SWIFT_OUR is set as payOut value, it enables payment protection for swift recipients for global currency transfers. By using this payOut method, you can guarantee your customers that the fee will be charged to the sender and can ensure that the recipient gets the complete target amount.
{% /admonition %}
#### Response
The following describes the fields of the quote response that may be useful when building your integration.
The `payOut` field is used to select the correct entry in the `paymentOptions`
profiles.quotes.get
Get quote info by ID. If the quote has expired (not used to create a transfer within 30 minutes of quote creation), it will only be accessible for approximately 48 hours via this endpoint.
profiles.quotes.update
You should update a quote using a `PATCH` call to add a recipient. This will update the saved quote's data based on who and where the money will be sent to.
Updating the quote with a recipient may cause the available payment options, prices and estimated delivery times to change from the original quoted amounts. This is due to the fact that sending some currencies to some destinations costs a different amount based on the payment networks we use, for example sending USD to a country outside the USA uses international rather than domestic payment networks and as such costs more, or sending CAD over the Interac network is a more expensive operation.
When updating a quote the `payOut` field may change to denote the payment option you should select when sending to this recipient. For example sending USD to a `swift_code` recipient or CAD to an `interac` recipient will change `payOut` to `SWIFT` or `INTERAC` respectively. This field defaults to `BANK_TRANSFER` so it can be used in all cases to help select the co
rates.list
{% admonition type="warning" %}
The `from`, `to`, and `group` parameters are not testable in our Sandbox environment at this time.
{% /admonition %}
`GET /v1/rates`<br>
Fetch latest exchange rates of all currencies.
`GET /v1/rates?source=EUR&target=USD`<br>
Fetch latest exchange rate of one currency pair.
`GET /v1/rates?source=EUR&target=USD&time=2019-02-13T14:53:01`<br>
Fetch exchange rate of specific historical timestamp.
`GET /v1/rates?source=EUR&target=USD&from=2019-02-13T14:53:01&to=2019-03-13T14:53:01&group=day`<br>
Fetch exchange rate history over period of time with daily interval.
`GET /v1/rates?source=EUR&target=USD&from=2019-02-13T14:53:01&to=2019-03-13T14:53:01&group=hour`<br>
Fetch exchange rate history over period of time with hourly interval.
`GET /v1/rates?source=EUR&target=USD&from=2019-02-13T14:53:01&to=2019-03-13T14:53:01&group=minute`<br>
Fetch exchange rate history over period of time with 1 minute interval.
{% admonition type="warning" %}
This endpoint only supports Bearer authent
accounts.list_v1
{% admonition type="warning" %}
This is a deprecated v1 endpoint. For new integrations please use the [v2 list endpoint](/api-reference/recipient/recipientlist).
{% /admonition %}
Fetch a list of the user's recipient accounts. Use the `currency` and `profile` parameters to filter by currency and/or the owning user profile ID. This endpoint does not support pagination, so please filter by currency to ensure a reasonable response time.
Both query parameters are optional.
accounts.create
Creates a recipient account. A **recipient** is a person or institution who is the ultimate beneficiary of your payment.
Recipient data includes three data blocks:
- General data - the personal details of an individual and basic information about a business.
- Bank details - account numbers, routing numbers, and other region-specific bank details.
- Address details - country and street address of an individual or business.
Notes:
- Date of Birth is optional; consult the account-requirements APIs to confirm if it is needed or contact Wise Support.
- `ownedByCustomer` is optional but strongly recommended for self-transfers.
- Email recipients: testing transfers to email recipients in sandbox is not currently possible.
Refund recipients:
- Use `refund=true` query parameter.
#### Bank account data
There are many different variations of bank account details needed depending on recipient target currency. For example:
- **GBP** — sort code and account number
- **BGN, CHF, DKK, EUR, GEL, GBP, NOK, PKR, PLN, RON,
accounts.list_v2
Fetch a list of the user's recipient accounts. Use the `profileId` parameter to filter by the profile who created the accounts, you should do this based on the personal or business profile ID you have linked to, based on your use case. Other filters are listed below for your convenience, for example `currency` is a useful filter to use when presenting the user a list of recipients to choose from in the case they have already submitted the target currency in your flow.
#### Pagination
Pagination is supported for this endpoint. The response includes the `seekPositionForNext` and `size` parameters to manage this.
It works by setting `size` and `seekPosition` parameters in the call. Set the value in the `seekPositionForNext` of the previous response into the `seekPosition` parameter of your subsequent call in order to get the next page. To get the current page again, use the `seekPositionForCurrent` value.
#### Sorting
You can also set the `sort` parameter to control the sorting of the response, for example:
accounts.get_v1
{% admonition type="warning" %}
This is a deprecated v1 endpoint. For new integrations please use the [v2 get endpoint](/api-reference/recipient/recipientget).
{% /admonition %}
Get recipient account info by ID.
accounts.get_v2
Get recipient account info by ID.
{% admonition type="info" %}
V1 and v2 versions are cross compatible, but the v2 endpoint provides additional features.
{% /admonition %}
accounts.delete
Deletes a recipient by changing its status to inactive (`"active": false`).
Requesting to delete a recipient that is already inactive returns HTTP 403 (Forbidden).
{% admonition type="info" %}
Only active recipients can be deleted and a recipient cannot be reactivated, however you can create a new recipient with the same details instead if necessary.
{% /admonition %}
quotes.account_requirements.list
{% admonition type="info" %}
Please note that to use v1.1 `Accept-Minor-Version: 1` request header must be set.
{% /admonition %}
`GET /v1/quotes/{quoteId}/account-requirements`<br>
`POST /v1/quotes/{quoteId}/account-requirements`<br>
`GET /v1/account-requirements?source=EUR&target=USD&sourceAmount=1000`
You can use the data returned by this API to build a dynamic user interface for recipient creation. The `GET` and `POST` account-requirements endpoints help you to figure out which fields are required to create a valid recipient for different currencies. This is a step-by-step guide on how these endpoints work.
Use the `GET` endpoint to learn what datapoints are required to send a payment to your beneficiary. As you build that form, use the POST endpoint to learn if any additional datapoints are required as a result of passing a field that has `"refreshRequirementsOnChange": true` in the `GET` response. You should be posting the same recipient account payload that will be posted to `/v1/accounts`.
An exam
quotes.account_requirements.create
POST the same recipient account payload that you will POST to `/v1/accounts`.
Use this endpoint after setting any field that has `refreshRequirementsOnChange=true` in the GET response,
to discover any additional required fields.
See the [GET endpoint](/api-reference/recipient/recipientaccountrequirementsget) for a full overview of how the account requirements flow works.
accounts.quotes.compatibility.create_v1
{% admonition type="warning" %}
This is a deprecated v1 endpoint. For new integrations please use the [v2 compatibility endpoint](/api-reference/recipient/recipientcompatibilitycheck).
{% /admonition %}
{% admonition type="info" %}
Use this version if you are fetching recipients through the v1 API. There are no functional differences between v1 and v2, but the field paths referenced in the response differ between the v1 and v2 recipient resources.
{% /admonition %}
Use this endpoint to check the compatibility of a recipient account with a quote before creating a transfer. This validation includes:
- Re-validating the recipient account details
- Checking all required fields are present (e.g., recipient address for USD transfers)
- Verifying account details with the recipient's bank (for supported currencies)
This endpoint is optional but recommended to identify potential issues before transfer creation.
{% admonition type="info" %}
The confirmations field is only populated for currencies with recipient ve
accounts.quotes.compatibility.create_v2
Use this endpoint to check the compatibility of a recipient account with a quote before creating a transfer. This validation includes:
- Re-validating the recipient account details
- Checking all required fields are present (e.g., recipient address for USD transfers)
- Verifying account details with the recipient's bank (for supported currencies)
This endpoint is optional but useful to identify potential issues before transfer creation.
{% admonition type="info" %}
The confirmations field is only populated for currencies with recipient verification enabled. If absent, only standard validations apply.
{% /admonition %}
accounts.confirmations.update
When `requiresCustomerAcceptance` is `true` in the confirmation outcomes, the recipient cannot be used for a transfer until the customer explicitly confirms the details. You must present the mismatch to the customer and get their approval.
{% admonition type="warning" %}
If the confirmation result contained a `quoteId` then the acceptance request must also specify that as part of the query parameters, otherwise the request will be rejected.
{% /admonition %}
spend.applications.spend_controls.rules.list
Retrieves all the existing authorisation rules, regardless of whether or not they are applied.
spend.applications.spend_controls.rules.create
Creates an authorisation rule. It won't be enabled unless it is [applied](/api-reference/spend-controls/spendcontrolsruleapply).
{% admonition type="warning" %}
An `ALLOW` rule permits only the transactions that match the specified criteria and blocks all others. For instance, a rule allowing `SGD` transactions will block all transactions that are not in `SGD`.
{% /admonition %}
spend.applications.spend_controls.rules.apply.create
Apply an authorisation rule. This will result in the rule being evaluated against every incoming card authorisation request.
spend.applications.spend_controls.rules.unapply.create
Deactivates an authorisation rule. This will result in all card transactions **not** being evaluated against this rule.
The rule still [exists](/api-reference/spend-controls/spendcontrolsruleslist) and can be [applied](/api-reference/spend-controls/spendcontrolsruleapply) again.
spend.applications.spend_controls.rules.applied.list
Returns the list of all the active authorisation rules that have been applied.
spend.applications.spend_controls.rules.delete
Deletes an authorisation rule that is **currently not applied**.
If a rule is applied, you should [unapply](/api-reference/spend-controls/spendcontrolsruleunapply) the rule before deleting it.
spend.profiles.spend_limits.list
Retrieves the spend limits that are configured for a profile.
spend.profiles.spend_limits.update
Update profile daily and monthly spend limits for `PURCHASE` or `ATM_WITHDRAWAL`. Both daily and monthly must be set.
spend.profiles.cards.spend_limits.list
Retrieves the spend limits that are configured for a card.
spend.profiles.cards.spend_limits.update
Create or update card transaction, daily, monthly or lifetime spend limits.
spend.profiles.cards.spend_limits.delete
Delete card spend limits for a specific granularity.
spend.profiles.spending_limits.list
Retrieves the spending limits that are configured for a profile.
{% admonition type="warning" %}
This endpoint has been deprecated. Use [Retrieve profile limits](/api-reference/spend-limits/spendlimitsprofileget) instead.
{% /admonition %}
profiles.pin.create
Creates a new PIN factor used to resolve a SCA knowledge challenge type.
The request and response are encrypted using the JOSE framework. Please refer to the [SCA over API guide](/guides/developer/auth-and-security/sca-over-api) to understand how encryption and decryption work.
profiles.pin.delete
Deletes a PIN associated to a profile.
To update a PIN for a profile, use this endpoint followed by [Create a PIN](/api-reference/sca-pin/scapincreate).
{% admonition type="warning" %}
This operation is irreversible.
{% /admonition %}
profiles.pin.verify
Verifies a PIN challenge when calling a SCA-secured endpoint. Make sure to [create a PIN](/api-reference/sca-pin/scapincreate) before using this endpoint.
The request and response are encrypted using the JOSE framework. Please refer to the [SCA over API guide](/guides/developer/auth-and-security/sca-over-api) to understand how encryption and decryption work.
profiles.device_fingerprints.create
Creates a new device fingerprint factor used to resolve a SCA possession challenge type.
The request and response are encrypted using the JOSE framework. Please refer to the [SCA over API guide](/guides/developer/auth-and-security/sca-over-api) to understand how encryption and decryption work.
profiles.device_fingerprints.verify
Verifies a device fingerprint challenge when calling a SCA-secured endpoint. Make sure to [create a device fingerprint](/api-reference/sca-device-fingerprints/scadevicefingerprintcreate) before using this endpoint.
The request and response are encrypted using the JOSE framework. Please refer to the [SCA over API guide](/guides/developer/auth-and-security/sca-over-api) to understand how encryption and decryption work.
profiles.device_fingerprints.delete
Deletes a device fingerprint associated to a profile. Include the `deviceFingerprintId` in the URL to delete a device fingerprint. This ID is provided in the response when the device fingerprint is created.
{% admonition type="warning" %}
This operation is irreversible.
{% /admonition %}
profiles.facemaps.create
Creates a new facemap factor used to resolve a SCA inherence challenge type.
A facemap should be exported from your FaceTec server using the SDK's [export API](https://dev.facetec.com/api-guide#export-3d-facemap). Please use Wise's FaceTec [public key](/api-reference/facetec/facetecpublickeyget) to encrypt the facemap during the export process.
profiles.facemaps.delete
Deletes a facemap associated to a profile.
To update a facemap for a profile, use this endpoint followed by [Create a facemap](/api-reference/sca-facemaps/scafacemapcreate).
{% admonition type="warning" %}
This operation is irreversible.
{% /admonition %}
profiles.facemaps.verify
Verifies a facemap challenge when calling a SCA-secured endpoint. Make sure to [create a facemap](/api-reference/sca-facemaps/scafacemapcreate) before using this endpoint.
A facemap should be exported from your FaceTec server using the SDK's [export API](https://dev.facetec.com/api-guide#export-3d-facemap). Please use Wise's FaceTec [public key](/api-reference/facetec/facetecpublickeyget) to encrypt a facemap during the export process.
profiles.sca_sessions.authorise.create
Manually triggers SCA, returning a one-time token along with a list of associated challenges. These challenges can be cleared with the verify endpoints.
transfers.list
Get the list of transfers for a given user's profile (defaults to user's personal profile).
You can add query parameters to specify user's profile (personal or business), time period and/or payment status. For example, you can query all failed payments created since last week, or all completed payments created since yesterday.
transfers.create
Create a transfer to a recipient account based on a quote.
Some fields are conditionally required depending on the currency route and transfer amount. Always call the [transfer requirements](/api-reference/transfer/transferrequirementsvalidate) endpoint to determine which fields are needed, and submit values accordingly. These requirements may change over time.
#### Avoiding duplicate transfers
The `customerTransactionId` field is used to avoid duplicate transfer requests. If your initial call to create a transfer fails (error or timeout), retry the call using the same `customerTransactionId` value. Subsequent retry messages are treated as repeat messages and will not create duplicate transfers. Use a sensible retry limit, ideally with a back-off approach.
#### Payment Approvals
{% admonition type="warning" %}
Business Payment Approvals created on your wise.com settings page are not compatible with creating transfers over the API.
{% /admonition %}
If you use personal tokens and do not use client creden
transfers.get
Get transfer info by ID. To receive dynamic updates as the state of the transfer changes, see the [webhooks documentation](/guides/developer/webhooks).
transfers.cancel.update
Transfers may be cancelled up until the transfer has been processed and funds converted. Cancellation is final — it cannot be undone.
{% admonition type="info" name="When can a transfer be cancelled?" %}
A transfer can only be cancelled programmatically via the API if it meets **all** of the following criteria:
- The transfer is not in `funds_converted` or later state.
- There are no processing problems with the transfer.
If the transfer does not meet these criteria, the API will return a **409 Conflict** error with the code `transfer.cancellation.not.allowed`.
For more information about transfer states, see [Tracking Transfers](/guides/product/send-money/tracking-transfers#transfer-statuses).
{% /admonition %}
transfer_requirements.create
Exposes transfer-specific requirements based on the sender, quote, and target recipient account. Requirements vary by currency route, transfer amount, and regulatory region.
For example, the maximum allowed length of reference text varies — the US payment system (ACH) supports 10 characters only, but transfers within Mexico allow up to 100 characters. Similarly, depending on the chosen currencies and the amount to be transferred, Wise may require additional details such as source of funds or transfer purpose.
We highly recommend verifying transfer requirements before submitting any transfer to avoid delays caused by missing details.
{% admonition type="success" name="Integration guide" %}
See the [Transfer Requirements guide](/guides/developer/api-guides/transfer-requirements) for step-by-step integration instructions and a list of common requirement fields.
{% /admonition %}
profiles.third_party_transfers.create
Create a transfer on behalf of a third party.
When creating a third party transfer:
- The `originator` datablock is **required**. This details the ultimate sender of funds in the transfer.
- Depending on the legal entity type of the originator (`PRIVATE` or `BUSINESS`), the required fields vary.
- `originalTransferId` field must be used. This is your own ID for the transfer.
You need to save the transfer ID for tracking its status later via webhooks.
#### Avoiding duplicate transfers
The `originalTransferId` field is used to avoid duplicate transfer requests. If your initial call fails (error or timeout), retry the call using the same `originalTransferId` value. Subsequent retry messages are treated as repeat messages and will not create duplicate transfers.
profiles.third_party_transfers.get_v1
{% admonition type="warning" %}
This endpoint is deprecated. Use [Get a third party transfer by ID](transferthirdpartyget) (V2) instead.
{% /admonition %}
Get third party transfer info by ID. To receive dynamic updates as the state of the transfer changes, see the [webhooks documentation](/api-reference/webhook).
profiles.third_party_transfers.get_v2
Get third party transfer info by ID. To receive dynamic updates as the state of the transfer changes, see the [webhooks documentation](/api-reference/webhook).
profiles.transfers.payments.create
{% 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.
Please read more about [implementing SCA](/guides/developer/auth-and-security/sca-and-2fa).
{% /admonition %}
This API call is the final step for executing payouts when using a balance with Wise. Upon calling the endpoint, Wise will begin the processing of the transfer, depending on the status of funds.
When using the transfer by transfer settlement model, the following funding type(s) must be used:
- **BALANCE** — Funds are pulled from a multi-currency account held with Wise.
- **BANK_TRANSFER** — Manually send funds from your business bank account to pay for any transfers. Only applicable when using the [Batch Group API](/api-reference/batch-group/).
When funding through the Bulk Settlement model, the following funding type(s) must be used:
- **TRUSTED_PRE_FUND_BULK** — Funds for the transfer will be settled through a bulk payment at a l
transfers.payments.list
Fetch completed payments used to fund the transfer.
In most cases there should only be a single payment associated with the transfer. There are rare occasions that a transfer can be funded with multiple payment methods and when this occurs the first completed payment method would be used to calculate the fees provided on the quote.
transfers.invoices.bankingpartner.list
Fetch banking reference information for transfers that are in `outgoing_payment_sent` status, enabling you to track transfers with the transfer recipient's bank.
It may take up to 3 days to get the correct information through this endpoint, as some partners don't share the information until 3 days later.
transfers.receipt_pdf.get
Download transfer confirmation receipt in PDF format for transfers that are in status `outgoing_payment_sent`.
There's also the [transfer state change webhook](/api-reference/webhook-event/eventtransfersstatechange).
{% admonition type="info" %}
If you service US retail consumers you must use the [US combined receipt](/api-reference/transfer/transferuscombinedreceiptget) endpoint instead.
{% /admonition %}
transfers.us_combined_receipt_pdf.get
Download US combined receipt in PDF format for transfers that are in status `incoming_payment_initiated` and again when the status is updated to `outgoing_payment_sent`.
transfers.documents.noc.list
Download transfer non objection certificate in PDF format for transfers that are in status `outgoing_payment_sent`.
This document can be used to obtain a Foreign Inward Remittance Certificate (FIRC) from the bank that paid out the transfer.
This is only applicable to INR payments with either a business sender or recipient.
profiles.partner_licence_transfers.create
{% admonition type="warning" name="Deprecated" %}
This endpoint is deprecated and only maintained for existing legacy integrations. Do not use it for new integrations. Use [Create a transfer](/api-reference/standard-transfer/transfercreate) or [Create a third party transfer](/api-reference/third-party-transfer/transferthirdpartycreate) instead.
{% /admonition %}
This is similar to the [Create a transfer](/api-reference/standard-transfer/transfercreate) endpoint, but the `originator` datablock is additionally required.
You need to save the transfer ID for tracking its status later via webhooks.
#### Avoiding duplicate transfers
The `customerTransactionId` field is used to avoid duplicate transfer requests. If your initial call fails (error or timeout), retry the call using the same `customerTransactionId` value. Subsequent retry messages are treated as repeat messages and will not create duplicate transfers.
me.list
Get authenticated user details for the user's token submitted in the Authorization header.
users.get
Get authenticated user details by user ID.
user.signup.registration_code.create
Wise uses email address as unique identifier for users. If email is new (there is no active user already) then a new user will be created.
When you are submitting an email which already exists amongst our users then you will get a warning that "You're already a member. Please login". If user already exists then you need to redirect to "Get user authorization" webpage.
users.exists.create
Check if a user already exists by email. Wise uses email address as unique identifier for users. If email has already been used by a user, it cannot be reused to create a new user.
Note that this uses a `client-credentials-token` and not a `user access_token` for authentication.
users.contact_email.get
Retrieves a contact email address.
users.contact_email.update
Sets a contact email address. The contact email address is used to send notifications to users who have been registered with a dummy email address.
user.pin.create
Create PIN for a user as a form of authentication.
Can be used to [verify pin](/api-reference/sca-pin/ottpinverify) when accessing a strongly protected endpoint via [One Time Token Framework](/api-reference/sca-ott).
The request and response are encrypted using the JOSE framework. Please refer to the [JOSE JWE guide](/guides/developer/auth-and-security/jose-jwe) to understand how encryption and decryption work.
users.pin.delete
Remove the PIN from the user's account.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
user.facemap.enrol.create
Facial biometric enrolment for Strong Customer Authentication (SCA).
Can be used to [verify facemap](/api-reference/sca-facemaps/ottfacemapverify) when accessing a strongly protected endpoint via [One Time Token Framework](/api-reference/sca-ott).
users.facemap.enrol.delete
Remove the FaceMap from the user's account.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
user.partner_device_fingerprints.create
A device fingerprint represents a string that identifies a unique device.
This endpoint is used to register the fingerprint of the device as one of the allowed devices used during an One Time Token (OTT) challenge.
This can be used to [verify device fingerprint](/api-reference/sca-device-fingerprints/ottdevicefingerprintverify) when clearing a [OTT](/api-reference/sca-ott).
The request and response are encrypted using the JOSE framework. Please refer to the [JOSE JWE guide](/guides/developer/auth-and-security/jose-jwe) to understand how encryption and decryption work.
users.partner_device_fingerprints.list
Returns a list of device fingerprints created for this user.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
users.partner_device_fingerprints.delete
Remove a specific device fingerprint from the allowed devices of a user.
{% admonition type="warning" %}
This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API.
{% /admonition %}
applications.subscriptions.list
List all webhook subscriptions for your application.
applications.subscriptions.create
Create a webhook subscription at the application level.
`clientKey` can be received upon obtaining client credentials from our tech support.
applications.subscriptions.get
Retrieve an application webhook subscription by its identifier.
applications.subscriptions.delete
Delete an application webhook subscription by its identifier.
applications.subscriptions.test_notifications.create
Generate test notifications for an existing application subscription.
Test notifications will have the correct structure for their source subscription's event type and version, and will contain "dummy" data. These data include random UUIDs, entity IDs of zero, current dates and times, and hard-coded status codes.
Test notifications are delivered with the usual notification HTTP request headers, including a unique delivery ID for the notification, and a "test notification" flag set to true. You can check for the presence of this test flag to determine that an incoming notification is a test notification which should not be processed as real data. See the section [Event HTTP requests](/guides/developer/webhooks/event-handling#requests) for more information on request headers.
When test notifications are created with the API, they are queued for sending in the same way as non-test notifications. This means that there may be some delay in notification delivery, and delivery failures will result in attempts to
profiles.subscriptions.list
List all webhook subscriptions for a profile.
profiles.subscriptions.create
Create a webhook subscription at the profile level.
profiles.subscriptions.get
Retrieve a profile webhook subscription by its identifier.
profiles.subscriptions.delete
Delete a profile webhook subscription by its identifier.