openapi: 3.1.0 info: title: Wise Platform API version: '' description: > 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: - url: https://api.wise.com description: Production Environment - url: https://api.wise-sandbox.com description: Sandbox Environment tags: - name: 3ds x-displayName: 3D Secure Authentication description: > To manage certain aspects of the 3D Secure (3DS) authentication, you will need to integrate with the following APIs. - name: activity x-displayName: Activity description: | Activity represents a snapshot of a performed action for a profile. - name: verification x-displayName: Additional Verification description: > 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. - name: address x-displayName: Addresses description: > 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. - name: balance x-displayName: Balances description: > 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). - name: balance-statement x-displayName: Balance Statements description: > 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. - name: bank-account-details x-displayName: Bank Account Details description: > 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. - name: batch-group x-displayName: Batch Payment Groups description: > 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. - name: bulk-settlement x-displayName: Bulk Settlement description: > 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. - name: card x-displayName: Cards description: >- Manage your customers' cards programmatically. These APIs allow you to list cards, retrieve card details, control card status, and manage spending permissions. **Key capabilities:** - List and retrieve card details for a profile - Update card status (active, frozen, blocked) - Control spending permissions (e-commerce, ATM, contactless, magnetic stripe, etc.) - Reset PIN attempt counter after incorrect PIN entries - Update card phone number for verification purposes {% admonition type="info" %} For accessing sensitive card data (PAN, CVV, PIN), see the [Sensitive Card Details API](/api-reference/card-sensitive-details). For ordering new cards, see the [Card Orders API](/api-reference/card-order). For transaction history, see the [Card Transactions API](/api-reference/card-transaction). {% /admonition %} - name: card-sensitive-details x-displayName: Sensitive Card Details description: >- 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). **Key capabilities:** - Access sensitive card data (PAN, CVV, PIN) via encrypted JWE payloads **Related operations:** - For card management (list, status, permissions), see the [Cards API](/api-reference/card) - For ordering new cards, see the [Card Orders API](/api-reference/card-order) - For transaction history, see the [Card Transaction API](/api-reference/card-transaction) - name: card-kiosk-collection x-displayName: Card Kiosk Collection description: > 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/simulationcardproduction) 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. ![Card production status flow](/images/diagrams/card-production-status-flow.png) - name: card-order x-displayName: Card Orders description: > 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) ![Card order status state machine](/images/diagrams/card-order-status-flow.png) - name: card-transaction x-displayName: Card Transactions description: >- 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`. ![Transaction state flow](/images/diagrams/transaction-state-flow.png) 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/spendlimitscardupdate) or [profile](/api-reference/spend-limits/spendlimitsprofileupdate) 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/spendlimitscardupdate) 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/spendlimitscardupdate) or [profile](/api-reference/spend-limits/spendlimitsprofileupdate) limit - `PAYMENT_METHOD_NOT_ALLOWED` - This payment type has been disabled. Advise if they would like to [enable](/api-reference/card/cardpermissionsbulkupdate) 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/spendlimitscardupdate) 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 Detailed decline reasons {% #card-transaction-detailed-decline-reasons .title-3 .m-t-5 %} Detailed decline reasons provide secondary level information for certain decline reasons, adding more context to transaction failures. Please be aware that new detailed decline reasons may be added in the future, and not all reasons are currently documented. Therefore, it is important to exercise caution and regularly review the documentation to ensure accuracy. {% admonition type="warning" %} Please exercise caution when communicating reasons to your customers, as some may not be relevant or may cause confusion. If you have any questions or concerns, we are here to assist you. {% /admonition %} - `INSUFFICIENT_FUNDS_FOR_BLOCKED_SMART_CONVERSION` - Transaction was declined due to insufficient balance in transaction currency when smart conversion feature is disabled (e.g. BRL cards). The customer needs to convert their funds to the transaction currency and try again. - `INSUFFICIENT_FUNDS_FOR_SPECIFIC_CURRENCY_RESERVATION` - The transaction will be declined with this reason if the customer's card is issued in a region subject to smart conversion limitations, and the transaction currency is the limited currency but the customer doesn't hold enough of that currency. Other currencies won't be automatically converted to the limited currency. The customer needs to convert their funds to the transaction currency before retrying the payment. - `SUSPECTED_FRAUD_NO_BALANCE` - The customer might be abusing merchants by saving a card without having any balance to cover upcoming charges from them. The customer will need to top up their account to cover any charges from the merchant at a later date before re-attempting the transaction. - `RESET_YOUR_PIN_AT_ATM` - There's a problem with how Chip was read and we had to decline the transaction. The customer will need to reset their PIN at an ATM. - `INCORRECT_CVV2` - Invalid CVV2 was provided. The customer needs to check their saved card details and if they're correct, they should remove and add their card details to the merchant's website again. If this doesn't help, they could try to use their card at another merchant's website. If the same issue happens, they'll need to order a new card. - `SCA_SOFT_DECLINE_CONTACTLESS` - Contactless transaction could not be approved due to SCA regulations. The customer should perform at least one PIN transaction or use an ATM to reset PIN. - `SUSPECTED_FRAUD_REVIEW_ACTIVITY` - We couldn't confirm all transactions in the customer's activity were done by them, so we froze their card. The customer should review recent transactions and unfreeze the card. - `INVALID_TRANSACTION_TYPE_FINAL` - This decline reason is used for unmapped processor or network error codes, indicating an external system issue or unclassified response. The decision authority on the transaction information identifies a SCHEME decline, which may relate to card usage in unsupported countries. The customer will need to use an alternative payment method to complete this transaction. - `INVALID_TRANSACTION_TYPE_CONTACTLESS_MAGSTRIPE` - The POS terminal used a deprecated and not secure way to transmit card data. The customer will need to use another POS machine or try another payment method (Chip and PIN or Mobile Wallet). - `INVALID_TRANSACTION_TYPE_FALLBACK` - The chip couldn't be read due to a technical issue which resulted in the transaction "falling back" to magnetic stripe. As damaging the chip (so it would fall back to stripe) is a common way of fraud, these types of transactions are often deemed risky and being blocked. The customer will need to: - Try again or try a different terminal / ATM if it still doesn't work - Use another payment method, e.g. Contactless - Use another card - If the issue persists with multiple terminals, they'll need to replace their card as it may be damaged - `CONTACTLESS_DISABLED` - `POS_CONTACTLESS` permission (contactless payments) is disabled. The customer will need to enable the permission to allow contactless transactions. - `ECOM_DISABLED` - `ECOM` permission (online payments) is disabled. The customer will need to enable the permission to allow e-commerce transactions. - `CHIP_DISABLED` - `POS_CHIP` permission (Chip transactions) is disabled. The customer will need to enable the permission to allow Chip transactions. - `MAGSTRIPE_DISABLED` - `POS_MAGSTRIPE` permission (magnetic stripe transactions) is disabled. The customer will need to enable the permission to allow magnetic stripe transactions. - `WALLET_DISABLED` - `MOBILE_WALLETS` permission is disabled. The customer will need to enable the permission to allow mobile wallet transactions. - `PROFILE_GENERAL_DAILY_LIMIT_EXCEEDED_CHANGEABLE` - The customer has reached their daily total account limit (profile-level). The customer will need to edit the limit. - `PROFILE_GENERAL_MONTHLY_LIMIT_EXCEEDED_CHANGEABLE` - The customer has gone over their monthly total account limit (profile-level). The customer will need to edit the limit. - `CARD_GENERAL_DAILY_LIMIT_EXCEEDED_CHANGEABLE` - The customer has reached their daily limit for this card (card-level). The customer will need to edit the limit. - `CARD_GENERAL_MONTHLY_LIMIT_EXCEEDED_CHANGEABLE` - The customer has gone over the monthly limit for this card (card-level). The customer will need to edit the limit. - `PAYMENT_METHOD_MAX_MONTHLY_LIMIT_EXCEEDED` - The card's maximum non-changeable monthly spending limit has been reached. The customer will need to wait until the start of the next calendar month to perform transactions again. - `UNKNOWN` - This decline reason is used when the processor or network returns an error code that is not mapped to any of our specific detailed decline reasons. This can be caused by various external system issues or unclassified processor responses. - name: claim-account x-displayName: Claim Account description: > Allow a customer to take ownership of an account [created on their behalf](/api-reference/user/usercreate). 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. - name: comparison x-displayName: Comparison description: > 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: [comparison@wise.com](mailto:comparison@wise.com) 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) - name: contact x-displayName: Contacts description: > 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/quotecreate), 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/transfercreate) using the `targetAccount` from the Quote response. - name: currencies x-displayName: Currencies description: > Retrieve the list of currencies supported for transfers, including currency codes and display names. - name: delivery-estimate x-displayName: Delivery Estimate description: > Get the estimated delivery time for a transfer, showing when funds are expected to arrive in the recipient's bank account. - name: digital-wallet x-displayName: Digital Wallet description: > These APIs provide encrypted cardholder information needed to implement push provisioning (Apple Pay, Google Pay) in your own mobile app. - name: direct-debit-account x-displayName: Direct Debit Account description: > Register and retrieve external bank accounts used to fund batch transfers via ACH (USD) or EFT (CAD) direct debit. - name: disputes x-displayName: Disputes description: > 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" /%} - name: facetec x-displayName: FaceTec description: > 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. - name: jose x-displayName: JOSE description: > 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. - name: kyc-review x-displayName: KYC Review description: > KYC Review API provides endpoints to view, update and submit information related to the KYC flow. There are two ways to collect KYC requirements from your customers: - **Hosted KYC** — redirect your customer to a Wise-hosted UI that guides them through the process. - **API submission** — use the [KYC Requirement Submit](/api-reference/kyc-review/kycreviewrequirementsubmit) endpoint to submit requirements directly. This is only available for requirement types where `apiCollectionSupported` is `true`. Please refer to our [Hosted KYC guide](/guides/product/kyc/wise-kyc/hosted-kyc) for more information on the general use of the endpoints included below. - name: multi-currency-account x-displayName: Multi Currency Account description: > 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. - name: oauth-token x-displayName: OAuth Token description: > Exchange client credentials or authorisation grants for OAuth 2.0 access tokens. All grant types use `POST /oauth/token` with basic authentication (your `client_id` and `client_secret`). Depending on the grant type, this endpoint issues either a **client credentials token** or a **user token**. Client credentials token {% .title-3 .m-t-5 %} An application-level token for requests that aren't tied to a specific Wise user, such as generating un-authenticated quotes and subscribing to application webhooks. Valid for 12 hours. - `client_credentials` — the only grant type for this token. User token {% .title-3 .m-t-5 %} A token for making API calls on behalf of a specific Wise user, such as creating transfers and managing balances. Access tokens are valid for 12 hours and can be refreshed using a refresh token. Grant types: - `registration_code` — for partners that create Wise users via API. Exchanges a registration code for a user access token and refresh token. - `authorization_code` — for partners using the OAuth redirect flow. Exchanges an authorisation code for a user access token and refresh token. - `refresh_token` — obtain a new user access token without requiring the user to re-authorise. Managing token expiration {% #managing-token-expiration .title-3 .m-t-5 %} Access tokens are valid for 12 hours. You can request a new access token whenever it's close to expiring — there is no need to wait for the actual expiration to happen first. Depending on how your application uses the Wise Platform API, requesting a new access token before attempting a series of API calls on behalf of an individual user will avoid issues with expired access tokens. - name: case x-displayName: Partner Cases description: > Partner Cases are part of the Partner Support API, allowing partners to open, retrieve and respond to support and operations queries. The endpoints described here allow partners to directly integrate their back end tooling with Wise's, allowing faster responses, better structure to data, and operational efficiencies. {% admonition type="warning" %} The Partner Support APIs are currently in a closed Beta and subject to change. Please speak with your implementation manager if you would like to integrate with these APIs. {% /admonition %} Case Statuses {% #case-statuses .title-3 .m-t-5 %} Partner cases can move through different statuses. | Status | Transitions to | Description | |--------|---------------|-------------| | `CREATING` | OPEN | Cases being created by Wise from a Partner call. Once created, cases move into the open status. | | `OPEN` | PENDING, SOLVED, CLOSED | Cases being actioned by Wise. Partners do not need to action these cases. Note that we may update a case in this status and not change it. | | `PENDING` | OPEN, SOLVED, CLOSED | Cases that require additional information from the partner. You should action these cases by reviewing the newest comment and updating the case. | | `SOLVED` | OPEN, PENDING, CLOSED | Cases that have been solved and scheduled for closure. These can be re-opened by the partner or Wise if needed before closing. | | `CLOSED` | — | Cases that have been solved and closed. Once closed, they cannot be reopened and a new case should be created if needed. | {% img src="/images/diagrams/case-flow.png" /%} - name: payins x-displayName: Payins description: >- The payin APIs allow you to fund the MCA or transfers with local payment rails, by retrieving or creating the relevant details to send to for funding a payment. These details will be provided in the local format for that currency, and also includes the name and address of the receiving bank. - name: payin-deposit-detail x-displayName: Payin Deposit Detail description: > The payin deposit details API allows you to get the bank details for the account that the customer should send funds to when paying for a Wise transfer via a bank transfer. These details will be provided in the local format for that currency and usually contain bank account information — like IBAN, SWIFT code etc. It also includes the name and address of the receiving bank and the name and address of the Wise entity that owns the bank account, as sometimes these are required to make a payment. - name: profile x-displayName: Profiles description: >+ A profile represents an identity that can send and receive money through Wise — either a personal profile (an individual) or a business profile (a company). Most API endpoints require a `profileId` parameter, which is the ID of either profile type. - name: quote x-displayName: Quotes description: > The quote resource defines the basic information required for a Wise transfer - the currencies to send between, the amount to send and the profile who is sending the money. The profile _must_ be included when creating a quote. Quote is one of the required resources to create a transfer, along with the recipient who is to receive the funds. The quote response contains other information such as the exchange rate, the estimated delivery time and the methods the user can pay for the transfer. Not all of this information may apply to your use case. Upon creating a quote the current mid-market exchange rate is locked and will be used for the transfer that is created from the quote. The rate will be locked for 30 minutes to give a user time to complete the transfer creation flow. - name: rate x-displayName: Exchange Rates description: | Current and historical exchange rates by currency routes. - name: recipient x-displayName: Recipient Accounts description: > Recipient or beneficiary is the one who will receive the funds. Recipient account endpoints use a mixture of our v1 and v2 APIs. Please ensure you address the right version to get the expected results. {% admonition type="info" %} All recipient IDs are cross compatible with v1 and v2. {% /admonition %} - name: simulation x-displayName: Simulations description: > Use these endpoints to simulate key actions in the sandbox environment, including transfer state changes, balance top-ups, card transactions, KYC reviews, and incoming payments. {% admonition type="info" %} These features are limited to sandbox only. {% /admonition %} - name: spend-controls x-displayName: Spend Controls description: > Control which card transactions are permitted by creating rules based on merchant category code (MCC) or transaction currency. An authorisation rule dictates whether transactions should be declined or approved based on a pre-determined set of rules. A transaction can only pass if it satisfies all the applied rules. Creating a rule has no practical implication until it is [applied](/api-reference/spend-controls/spendcontrolsruleapply). Applying a rule results in the authorisation rule being evaluated against every incoming card authorisation request. Rules are scoped at the application level. Use a [client credentials token](/api-reference/oauth-token/oauthtokencreate) to call these endpoints. - name: spend-limits x-displayName: Spend Limits description: > Manage spending limits applied to profiles and cards. Profile limits are shared across all cards under the same profile, while card limits apply to individual cards. For more details on how profile and card limits interact, see the [card management guide](/guides/product/issue-cards/card-management#spend-limits). - name: sca-ott x-displayName: One Time Token description: > One-time tokens are temporary authentication sessions used to track SCA challenges. When an SCA-protected endpoint is called, a one-time token is returned containing the challenges that must be completed. Please read the [SCA over API guide](/guides/developer/auth-and-security/sca-over-api) to understand how SCA integration works. - name: sca-sessions x-displayName: SCA Sessions description: > SCA sessions allow you to manually trigger Strong Customer Authentication, returning a one-time token along with a list of associated challenges. These challenges can be cleared using the verify endpoints for PIN, device fingerprints, and facemaps. Please read the [SCA over API guide](/guides/developer/auth-and-security/sca-over-api) to understand how SCA integration works. {% admonition type="info" %} Please reach out to your Implementation Manager to determine which challenges can be enabled. {% /admonition %} - name: sca-pin x-displayName: PIN description: >- PIN (Personal Identification Number) is a knowledge-based SCA challenge factor. Users create a 4-digit PIN that can be used to verify their identity when accessing SCA-protected endpoints. All PIN creation and verification requests use JOSE (JWE) encryption to ensure the PIN is never transmitted in plain text. See the [SCA over API guide](/guides/developer/auth-and-security/sca-and-2fa) for encryption details. - name: sca-device-fingerprints x-displayName: Device Fingerprints description: >- Device fingerprints are possession-based SCA challenge factors. They allow you to verify that a user is accessing the API from a recognized device. A profile can have up to 3 device fingerprints registered simultaneously. All device fingerprint operations use JOSE (JWE) encryption. See the [SCA over API guide](/guides/developer/auth-and-security/sca-and-2fa) for encryption details. - name: sca-facemaps x-displayName: Facemaps description: >- Facemaps are inherence-based (biometric) SCA challenge factors that use FaceTec's 3D face recognition technology. Facemaps should be exported from your FaceTec server using their SDK's export API. Use Wise's [FaceTec public key](/api-reference/facetec/facetecpublickeyget) to encrypt the facemap during export. - name: sca-otp x-displayName: OTP description: > For phone-based OTP (one-time password) authentication — where an OTP is a single-use 6-digit code sent to verify the identity of a user — Wise supports multiple delivery methods, including SMS, WhatsApp, and voice. Use Wise's secure endpoint to [create](/api-reference/sca-otp/usersecurityphonenumbercreate) and register the end user's phone number. Then, call the trigger endpoints ([SMS](/api-reference/sca-otp/ottsmstrigger), [WhatsApp](/api-reference/sca-otp/ottwhatsapptrigger), [Voice](/api-reference/sca-otp/ottvoicetrigger)) to send an OTP to the registered number. Finally, submit the OTP via the verify endpoints ([SMS](/api-reference/sca-otp/ottsmsverify), [WhatsApp](/api-reference/sca-otp/ottwhatsappverify), [Voice](/api-reference/sca-otp/ottvoiceverify)) to complete the authentication challenge. Please read the [SCA over API guide](/guides/developer/auth-and-security/sca-over-api) to understand how SCA integration works. - name: transfer x-displayName: Transfers description: > A transfer is a payment order to a [recipient account](/api-reference/recipient) based on a [quote](/api-reference/quote). Once created, a transfer usually needs to be funded within fourteen days. Otherwise, it will be automatically cancelled. There are 2 types of transfer resources: standard transfer resource and originator transfer resource. Please see below for differences between the two. Standard Transfer {% #standard-transfer .title-3 .m-t-5 %} The standard transfer object is returned by the [create transfer](/api-reference/transfer/transfercreate), [get transfer](/api-reference/transfer/transferget), [list transfers](/api-reference/transfer/transferlist), and [cancel transfer](/api-reference/transfer/transfercancel) endpoints. Originator Transfer {% #originator-transfer .title-3 .m-t-5 %} The originator transfer object is returned by the [create third party transfer](/api-reference/transfer/transferthirdpartycreate) and [get third party transfer](/api-reference/transfer/transferthirdpartyget) endpoints. It includes an additional `originator` data block with details about the payment originator. - name: user x-displayName: Users description: > A User serves as the primary entity and can possess multiple Profiles to represent different contexts or settings. A User can have one personal Profile and multiple business Profiles. Each [Profile](/api-reference/profile) — whether personal or business — can have its own [multi-currency account](/api-reference/multi-currency-account), enabling transactions across various currencies. This hierarchical structure allows for flexible management of user settings and financial operations, accommodating both personal and business needs. ![User profile structure](/images/diagrams/user-profile-structure.svg) - name: user-security x-displayName: User Security description: > {% admonition type="warning" %} These endpoints are deprecated. Please refer to [PIN](/api-reference/sca-pin), [Facemaps](/api-reference/sca-facemaps), and [Device Fingerprints](/api-reference/sca-device-fingerprints) to integrate with SCA. {% /admonition %} User security allows users to set up security-related protections over the API. - name: webhook x-displayName: Subscriptions description: > Manage webhook subscriptions at both the application and profile level. Create, list, retrieve, and delete subscriptions, as well as test your webhook endpoints. For more information on creating and managing webhooks, and specific event types, see [Webhooks & Notifications](/guides/developer/webhooks). - name: webhook-event x-displayName: Events description: > Webhook events are notifications sent by Wise to your server when specific actions occur. Subscribe to events using the [Webhook](/api-reference/webhook) endpoints at the application or profile level. See the [Webhooks guide](/guides/developer/webhooks) for setup instructions, signature verification, and best practices. {% admonition type="info" %} We're migrating event type documentation to this section. For a complete list of available event types, see the [Event Types](/guides/developer/webhooks/event-types) guide. {% /admonition %} x-tagGroups: - name: Authentication tags: - oauth-token - name: Enhanced Security tags: - jose - name: Users tags: - user - claim-account - name: Profiles tags: - profile - activity - address - name: Verification tags: - kyc-review - verification - facetec - name: Strong Customer Authentication tags: - sca-ott - sca-sessions - sca-pin - sca-facemaps - sca-device-fingerprints - sca-otp - user-security - name: Balances tags: - balance - balance-statement - bank-account-details - multi-currency-account - name: Cards tags: - card - card-sensitive-details - 3ds - card-kiosk-collection - card-order - card-transaction - spend-limits - spend-controls - digital-wallet - disputes - name: Quotes tags: - quote - rate - comparison - name: Recipients tags: - recipient - contact - name: Transfers tags: - transfer - delivery-estimate - currencies - batch-group - name: Funding tags: - payin-deposit-detail - direct-debit-account - bulk-settlement - payins - name: Webhooks tags: - webhook - webhook-event - name: Simulations tags: - simulation - name: Partner Support tags: - case paths: /v3/spend/profiles/{profileId}/3dsecure/challenge-result: post: tags: - 3ds summary: Inform challenge result operationId: 3dsChallengeResultPost security: - UserToken: [] description: > 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](/guides/developer/webhooks/event-types#3ds-challenge). 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](/guides/developer/auth-and-security/sca-and-2fa). {% /admonition %} parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: >- The profile ID (personal or business) associated with the 3DS challenge. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/ChallengeResultRequest' responses: '204': description: No Content - Challenge result has been successfully recorded. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/activities: get: tags: - activity summary: List Activities for a Profile operationId: activityList description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The unique identifier of the profile. - name: monetaryResourceType in: query required: false schema: $ref: '#/components/schemas/ActivityResourceType' description: Filter activity by resource type. - name: status in: query required: false schema: $ref: '#/components/schemas/ActivityStatus' description: Filter by activity status. - name: since in: query required: false schema: type: string format: date-time example: '2025-03-10T11:56:30.376Z' description: Filter activity list after a certain timestamp. Use ISO 8601 format. - name: until in: query required: false schema: type: string format: date-time example: '2025-03-30T23:59:59.999Z' description: Filter activity list until a certain timestamp. Use ISO 8601 format. - name: nextCursor in: query required: false schema: type: string example: '' description: > Pagination cursor returned from a previous response. Use the `cursor` value from the response to fetch the next page of activities. - name: size in: query required: false schema: type: integer minimum: 1 maximum: 100 default: 10 description: >- Desired size of query. Min 1, max 100, and default value is 10 if not specified. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved activities. content: application/json: schema: type: object description: Response containing a list of activities for a profile. properties: cursor: type: - string - 'null' description: >- Pagination cursor. Pass this value as the `nextCursor` query parameter to fetch the next page of results. Returns `null` when there are no more pages. activities: type: array description: Array of activity objects. items: $ref: '#/components/schemas/Activity' example: cursor: WyJQUklPUklUWSIsMTAwMDAxNjY5NzA4MjI0MDAwMDE2MDk5OV0= activities: - id: >- TU9ORVRBUllfQUNUSVZJVFk6OjE0NTU4OTk4OjpDQVJEX1RSQU5TQUNUSU9OOjozNDMwNDk= type: CARD_PAYMENT resource: type: CARD_TRANSACTION id: '343049' title: Test Payment description: '' primaryAmount: 150 JPY secondaryAmount: 1.50 SGD status: COMPLETED createdOn: '2023-01-01T00:00:00.000Z' updatedOn: '2023-01-01T00:00:00.000Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/additional-verification/upload-evidences: post: deprecated: true tags: - verification summary: Upload Evidences (v3) operationId: verificationUploadEvidencesV3 description: > Uploads verification evidence for a specific profile. The request body varies significantly between **Personal** and **Business** profiles. security: - UserToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The unique identifier of the profile. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: oneOf: - title: Personal Profile type: object description: Payload for Personal profile verification. example: accountPurpose: MOVING_SAVINGS intendedCountries: - deu - esp yearlyAnticipatedVolume: '0_2350' mainSourceOfIncome: SALARY annualIncome: '0_11500' properties: accountPurpose: type: string description: The primary reason for using the account. enum: - MOVING_SAVINGS - SENDING_MONEY_TO_FRIENDS_OR_FAMILY - GENERAL_LIVING_EXPENSES - BUYING_GOODS_OR_SERVICES_ABROAD - PAYING_FOR_MORTGAGE_OR_LOAN - PAYING_BILLS - RECEIVING_SALARY_OR_PENSION - INVESTING accountPurposeExplanation: type: string description: >- Additional reasons and specific examples for using Wise account. This is a free-text field. intendedCountries: type: array description: > List of ISO 3166-1 alpha-3 country codes.
Check the [lists of countries you can send money to with Wise](https://wise.com/help/articles/2571942/what-countries-can-i-send-to). items: type: string yearlyAnticipatedVolume: type: string description: Expected yearly transaction volume in Euros. enum: - '0_2350' - '2351_6000' - '6001_11500' - '11501_60000' - '60001_175000' - 175001_+ mainSourceOfIncome: type: string description: >- Primary source of income. Must be submitted with annualIncome. enum: - SALARY - INVESTMENTS - PENSION - INHERITANCE - LOAN - OTHER annualIncome: type: string description: >- Expected annual income in Euros. Must be submitted with mainSourceOfIncome. enum: - '0_11500' - '11501_19000' - '19001_28500' - '28501_47500' - '47501_75000' - 75001_+ incomeExplanation: type: string description: >- Additional ways you earn money that were not identified in the provided documents. This is a free-text field. - title: Business Profile type: object description: Payload for Business profile verification. example: businessUseCase: - PAYING_SUPPLIERS_CONTRACTORS_OR_EMPLOYEES - PAYING_RENT_OR_UTILITIES intendedCountries: - deu - esp monthlyAnticipatedVolume: '0_1200' mainSourceOfFunding: BUSINESS_LOAN properties: businessUseCase: type: array description: How the business intends to use the platform. items: type: string enum: - INVESTING_IN_FUNDS_STOCKS_BONDS_OR_SIMILAR - DISTRIBUTING_COMPANY_PROFITS_OR_PAYING_DIVIDENDS - PAYING_MORTGAGE_BANK_LOAN_INSURANCE_OR_CREDIT - PAYING_FOR_GOODS_PROPERTIES_OR_SERVICES_ABROAD - PAYING_RENT_OR_UTILITIES - PAYING_SUPPLIERS_CONTRACTORS_OR_EMPLOYEES - PAYING_TAX_ON_PROFIT_OR_PROPERTY - TRANSFER_WITHIN_COMPANY_OR_GROUP - RECEIVE_INVESTMENTS_OR_FUNDS - RECEIVE_PAYMENTS_FROM_CLIENTS - DONATION - OTHER intendedCountries: type: array description: > List of ISO 3166-1 alpha-3 country codes.
Check the [lists of countries you can send money to with Wise](https://wise.com/help/articles/2571942/what-countries-can-i-send-to). items: type: string mainSourceOfFunding: type: string description: Primary source of business funding. enum: - REVENUE - BUSINESS_LOAN - FUNDING_AND_SHAREHOLDER_INVESTMENTS - INVESTMENT_INCOME - DONATIONS - GRANTS - OTHER monthlyAnticipatedVolume: type: string description: Expected monthly transaction volume in Euros. enum: - '0_1200' - '1201_6000' - '6001_12000' - '12001_60000' - '60001_120000' - '120001_235000' - '235001_600000' - '600001_1200000' - '1200001_6000000' - '6000001_12000000' - 12000001_+ responses: '204': description: No Content - Evidence successfully uploaded. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: > Bad Request - Invalid request payload (e.g. no evidence, misspelled evidence, unexpected value). Invalid evidence is populated in the response message. Note that correct evidence might be successfully uploaded. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Forbidden - The client is not authorized to perform this request. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: > Conflict - One or more evidences are already uploaded and can't be re-submitted without an agent review. Unacceptable evidence is populated in the response message. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v5/profiles/{profileId}/additional-verification/upload-evidences: post: tags: - verification summary: Upload Evidences operationId: verificationUploadEvidences description: > 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. security: - UserToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The unique identifier of the profile. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: oneOf: - title: Personal Profile type: object description: Payload for Personal profile verification. example: accountPurpose: MOVING_SAVINGS intendedCountries: - deu - esp yearlyAnticipatedVolume: '0_2350' mainSourceOfIncome: SALARY annualIncome: '0_11500' properties: accountPurpose: type: string description: The primary reason for using the account. enum: - MOVING_SAVINGS - SENDING_MONEY_TO_FRIENDS_OR_FAMILY - GENERAL_LIVING_EXPENSES - BUYING_GOODS_OR_SERVICES_ABROAD - PAYING_FOR_MORTGAGE_OR_LOAN - PAYING_BILLS - RECEIVING_SALARY_OR_PENSION - INVESTING accountPurposeExplanation: type: string description: >- Additional reasons and specific examples for using Wise account. This is a free-text field. intendedCountries: type: array description: > List of ISO 3166-1 alpha-3 country codes.
Check the [lists of countries you can send money to with Wise](https://wise.com/help/articles/2571942/what-countries-can-i-send-to). items: type: string yearlyAnticipatedVolume: type: string description: Expected yearly transaction volume in Euros. enum: - '0_2350' - '2351_6000' - '6001_11500' - '11501_60000' - '60001_175000' - 175001_+ mainSourceOfIncome: type: string description: >- Primary source of income. Must be submitted with annualIncome. enum: - SALARY - INVESTMENTS - PENSION - INHERITANCE - LOAN - OTHER annualIncome: type: string description: >- Expected annual income in Euros. Must be submitted with mainSourceOfIncome. enum: - '0_11500' - '11501_19000' - '19001_28500' - '28501_47500' - '47501_75000' - 75001_+ incomeExplanation: type: string description: >- Additional ways you earn money that were not identified in the provided documents. This is a free-text field. - title: Business Profile type: object description: Payload for Business profile verification. example: businessUseCase: - PAYING_SUPPLIERS_CONTRACTORS_OR_EMPLOYEES - PAYING_RENT_OR_UTILITIES intendedCountries: - deu - esp monthlyAnticipatedVolume: '0_1200' mainSourceOfFunding: BUSINESS_LOAN properties: businessUseCase: type: array description: How the business intends to use the platform. items: type: string enum: - INVESTING_IN_FUNDS_STOCKS_BONDS_OR_SIMILAR - DISTRIBUTING_COMPANY_PROFITS_OR_PAYING_DIVIDENDS - PAYING_MORTGAGE_BANK_LOAN_INSURANCE_OR_CREDIT - PAYING_FOR_GOODS_PROPERTIES_OR_SERVICES_ABROAD - PAYING_RENT_OR_UTILITIES - PAYING_SUPPLIERS_CONTRACTORS_OR_EMPLOYEES - PAYING_TAX_ON_PROFIT_OR_PROPERTY - TRANSFER_WITHIN_COMPANY_OR_GROUP - RECEIVE_INVESTMENTS_OR_FUNDS - RECEIVE_PAYMENTS_FROM_CLIENTS - DONATION - OTHER intendedCountries: type: array description: > List of ISO 3166-1 alpha-3 country codes.
Check the [lists of countries you can send money to with Wise](https://wise.com/help/articles/2571942/what-countries-can-i-send-to). items: type: string mainSourceOfFunding: type: string description: Primary source of business funding. enum: - REVENUE - BUSINESS_LOAN - FUNDING_AND_SHAREHOLDER_INVESTMENTS - INVESTMENT_INCOME - DONATIONS - GRANTS - OTHER monthlyAnticipatedVolume: type: string description: Expected monthly transaction volume in Euros. enum: - '0_1200' - '1201_6000' - '6001_12000' - '12001_60000' - '60001_120000' - '120001_235000' - '235001_600000' - '600001_1200000' - '1200001_6000000' - '6000001_12000000' - 12000001_+ responses: '207': description: >- Multi-Status - Evidence(s) successfully uploaded, fully or partially. content: application/json: schema: type: object description: Response payload for evidence upload result. properties: overallStatus: type: string description: Status of the entire request. enum: - SUCCESS - PARTIAL_SUCCESS - FAIL results: type: array description: Results for each evidence. items: type: object properties: evidenceRequirementKey: type: string description: Name of the evidence. result: type: string description: Result for the evidence. enum: - SUCCESS - FAIL message: type: string description: Explanation of result for the evidence. examples: success: summary: Full success value: overallStatus: SUCCESS results: - evidenceRequirementKey: accountPurpose result: SUCCESS message: SUCCESS - evidenceRequirementKey: annualIncome result: SUCCESS message: SUCCESS - evidenceRequirementKey: intendedCountries result: SUCCESS message: SUCCESS - evidenceRequirementKey: mainSourceOfIncome result: SUCCESS message: SUCCESS - evidenceRequirementKey: yearlyAnticipatedVolume result: SUCCESS message: SUCCESS partialSuccess: summary: Partial success value: overallStatus: PARTIAL_SUCCESS results: - evidenceRequirementKey: accountPurpose result: SUCCESS message: SUCCESS - evidenceRequirementKey: annualIncome result: SUCCESS message: SUCCESS - evidenceRequirementKey: intendedCountries result: FAIL message: >- Could not update verification requirement at the moment - evidenceRequirementKey: mainSourceOfIncome result: SUCCESS message: SUCCESS - evidenceRequirementKey: yearlyAnticipatedVolume result: SUCCESS message: SUCCESS headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: >- Bad Request - Invalid request payload (e.g. no evidence, misspelled evidence, unexpected value). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Forbidden - The client is not authorized to perform this request. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/verification-status/upload-document: post: tags: - verification summary: Upload Document operationId: verificationUploadDocument description: > 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. security: - UserToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID (personal or business). - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: multipart/form-data: schema: type: object description: Request payload for uploading documents for verification properties: files: type: string format: binary description: Path of the files to be uploaded. example: '@/Users/test/file.png' documentType: type: string description: > Type of document being uploaded. Read our guides on acceptable documents for each of the following: - Source of wealth - [guide](/guides/product/kyc/partner-kyc/additional-verification#source-of-wealth-document) - Id Proof - [guide](https://wise.com/help/articles/2949801/how-does-wise-verify-my-identity?origin=search-ID+coument+) - Address Proof - [guide](https://wise.com/help/articles/2949804/how-does-wise-verify-my-address?origin=search-proof+of+address+) - Trading Address Proof - [guide](/guides/product/kyc/partner-kyc/additional-verification#proof-of-trading-address-document) - Business Authorisation Letter - [guide](/guides/product/kyc/partner-kyc/additional-verification#business-authorisation-letter-document) enum: - SOURCE_OF_WEALTH - ID_PROOF - ADDRESS_PROOF - TRADING_ADDRESS_PROOF - BUSINESS_AUTH_REP_PROOF_BY_AUTH_LETTER required: - files - documentType responses: '204': description: No Content - Document successfully uploaded. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: >- Bad Request - Document cannot be uploaded in the current format. Check file size and extension. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Forbidden - The client is not authorized to perform this request. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: >- Conflict - Document is already uploaded and cannot be re-submitted before review. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '413': description: Payload Too Large - Requested file size is too large. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '415': description: >- Unsupported Media Type - Request payload is in an unsupported format. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/verification-status/required-evidences: get: tags: - verification summary: Required Evidences operationId: verificationGetRequiredEvidences description: > 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](/guides/product/kyc/partner-kyc/supported-evidences) for the list of possible evidence types and how to submit them. security: - UserToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The unique identifier of the profile. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved required evidences. content: application/json: schema: type: object description: Response payload containing required evidences for a profile. properties: required_evidences: type: array description: List of evidence types required to complete verification. items: type: string example: required_evidences: - SOURCE_OF_WEALTH - INCOME - USE_CASE_COUNTRIES headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Forbidden - The client is not authorized to perform this request. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/addresses: post: tags: - address summary: Create or Update an Address operationId: addressCreate description: > 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. security: - UserToken: [] - PersonalToken: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/AddressRequest' responses: '200': description: OK - Address successfully created or updated. content: application/json: schema: $ref: '#/components/schemas/Address' example: id: 10000001 profile: 12345678 details: country: US state: AZ city: Phoenix postCode: '10025' firstLine: 50 Sunflower Ave occupations: - code: Software Engineer format: FREE_FORM headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' get: tags: - address summary: List Addresses for a Profile operationId: addressList description: List of addresses belonging to user profile. security: - UserToken: [] - PersonalToken: [] parameters: - name: profile in: query example: 12345678 schema: type: integer format: int64 description: The profile ID to list addresses for. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved addresses. content: application/json: schema: type: array items: $ref: '#/components/schemas/Address' example: - id: 10000001 profile: 12345678 details: country: US state: AZ city: Phoenix postCode: '10025' firstLine: 50 Sunflower Ave occupations: - code: Software Engineer format: FREE_FORM headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/addresses/{addressId}: get: tags: - address summary: Retrieve an Address by ID operationId: addressGet description: Get address info by ID. security: - UserToken: [] - PersonalToken: [] parameters: - name: addressId in: path required: true schema: type: integer format: int64 description: The unique identifier of the address. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved the address. content: application/json: schema: $ref: '#/components/schemas/Address' example: id: 10000001 profile: 12345678 details: country: US state: AZ city: Phoenix postCode: '10025' firstLine: 50 Sunflower Ave occupations: - code: Software Engineer format: FREE_FORM headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/address-requirements: get: tags: - address summary: Get Address Requirements operationId: addressRequirementsGet description: > 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). security: - UserToken: [] - PersonalToken: [] responses: '200': description: OK - Successfully retrieved address requirements. content: application/json: schema: $ref: '#/components/schemas/AddressRequirementsResponse' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' post: tags: - address summary: Get Address Requirements (with context) operationId: addressRequirementsPost description: > 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). security: - UserToken: [] - PersonalToken: [] requestBody: required: false content: application/json: schema: $ref: '#/components/schemas/AddressRequirementsRequest' example: details: country: US responses: '200': description: OK - Successfully retrieved address requirements. content: application/json: schema: $ref: '#/components/schemas/AddressRequirementsResponse' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v4/profiles/{profileId}/balances: post: tags: - balance summary: Create a Balance Account operationId: balanceCreate description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: X-idempotence-uuid in: header required: true schema: type: string format: uuid description: >- Unique identifier assigned by you. Used for idempotency check purposes. Should your call fail for technical reasons then you can use the same value again for making a retry call. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object description: Request body for creating a balance account. required: - currency - type properties: currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR type: $ref: '#/components/schemas/BalanceType' name: type: string description: Name of the balance. Required for SAVINGS type balances. example: currency: EUR type: STANDARD responses: '201': description: Created - Balance successfully created. content: application/json: schema: $ref: '#/components/schemas/Balance' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: tags: - balance summary: List Balances for a Profile operationId: balanceList description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: types in: query required: true schema: type: string description: >- Comma-separated list of balance types to return. Acceptable values are `STANDARD` and `SAVINGS`. example: STANDARD - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved balances. content: application/json: schema: type: array items: $ref: '#/components/schemas/Balance' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/profiles/{profileId}/balances/{balanceId}: get: tags: - balance summary: Retrieve a Balance by ID operationId: balanceGet description: Returns a balance based on the specified balance ID. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: balanceId in: path required: true schema: type: integer format: int64 description: The balance ID. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved the balance. content: application/json: schema: $ref: '#/components/schemas/Balance' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: tags: - balance summary: Remove a Balance Account operationId: balanceDelete description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: balanceId in: path required: true schema: type: integer format: int64 description: The balance ID. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: No Content - Balance successfully removed. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/balance-movements: post: tags: - balance summary: Convert or Move Money Between Balances operationId: balanceMovement description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: X-idempotence-uuid in: header required: true schema: type: string format: uuid description: >- Unique identifier assigned by you. Used for idempotency check purposes. Should your call fail for technical reasons then you can use the same value again for making a retry call. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object description: Request body for balance movements (conversion or transfer). properties: quoteId: type: string format: uuid description: >- Quote ID. Required for cross-currency movements. Quote must be created with `payOut: BALANCE`. sourceBalanceId: type: integer format: int64 description: >- Source balance ID. Required when moving between balances (with targetBalanceId). targetBalanceId: type: integer format: int64 description: >- Target balance ID. Required when moving between balances (with sourceBalanceId). amount: type: object description: >- Amount to move. Required for same-currency movements. Either `amount` or `quoteId` must be provided. properties: value: type: number description: Amount value. currency: type: string description: Currency code (ISO 4217 Alphabetic Code). examples: conversion: summary: Convert between currencies value: quoteId: 00000000-0000-0000-0000-000000000000 move: summary: Move within same currency value: sourceBalanceId: 1 targetBalanceId: 2 amount: value: 100 currency: EUR responses: '201': description: Created - Movement completed successfully. content: application/json: schema: type: object description: Response from a balance movement operation. properties: id: type: integer format: int64 description: Movement transaction ID. example: 30000001 type: type: string description: Type of movement. enum: - DEPOSIT - WITHDRAWAL - CONVERSION example: CONVERSION state: type: string description: State of the movement. enum: - PENDING - COMPLETED - CANCELLED - REVERSED example: COMPLETED balancesAfter: type: array description: Balance states after the movement. items: type: object properties: id: type: integer format: int64 description: Balance ID. example: 1 value: type: number description: Balance value after movement. example: 10000594.71 currency: type: string description: Currency code. example: GBP creationTime: type: string format: date-time description: When the movement was created. example: '2017-11-21T09:55:49.275Z' sourceAmount: type: object description: Source amount of the movement. properties: value: type: number example: 113.48 currency: type: string example: EUR targetAmount: type: object description: Target amount of the movement. properties: value: type: number example: 100 currency: type: string example: GBP rate: type: number description: Exchange rate applied to the conversion. example: 0.88558 feeAmounts: type: array description: Fee amounts charged for the movement. items: type: object properties: value: type: number example: 0.56 currency: type: string example: EUR steps: type: array description: Steps involved in the movement. items: type: object properties: id: type: integer format: int64 description: Step ID. example: 369588 type: type: string description: Step type. example: CONVERSION creationTime: type: string format: date-time description: When the step was created. example: '2017-11-21T09:55:49.276Z' balancesAfter: type: array items: type: object properties: value: type: number example: 9998887.01 currency: type: string example: EUR sourceAmount: type: object properties: value: type: number example: 113.48 currency: type: string example: EUR targetAmount: type: object properties: value: type: number example: 100 currency: type: string example: GBP fee: type: object properties: value: type: number example: 0.56 currency: type: string example: EUR rate: type: number description: Exchange rate applied. example: 0.88558 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/balance-capacity: get: tags: - balance summary: Retrieve Deposit Limits operationId: balanceCapacity description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: currency in: query required: true schema: type: string description: >- Currency code (ISO 4217 Alphabetic Code). The deposit limit will be returned in this currency. example: SGD - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved deposit limits. content: application/json: schema: type: object description: Deposit limit information for a profile. properties: hasLimit: type: boolean description: >- True if there is a regulatory hold limit for the profile's country. example: true depositLimit: type: object description: Amount of money that can be added to the account. properties: amount: type: number description: Deposit limit amount. example: 2000 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: SGD headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/excess-money-account: post: tags: - balance summary: Add an Excess Money Account operationId: excessMoneyAccount description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object description: Request body for configuring an excess money account. required: - recipientId properties: recipientId: type: integer format: int64 description: ID of the recipient for excess money transfers. example: 148393305 responses: '200': description: OK - Excess money account configured successfully. content: application/json: schema: type: object description: Response from configuring an excess money account. properties: userProfileId: type: integer format: int64 description: ID of the profile. example: 12321323 recipientId: type: integer format: int64 description: ID of the recipient for excess money transfers. example: 148393305 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/total-funds/{currency}: get: tags: - balance summary: Get Total Funds operationId: totalFunds description: > 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 | security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: currency in: path required: true schema: type: string description: >- Currency code (ISO 4217 Alphabetic Code). All values will be converted to this currency. example: EUR - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved total funds. content: application/json: schema: type: object description: Total funds overview for a profile. properties: totalWorth: type: object description: >- Total worth of the account, including cash ledger balance and valuation of any asset portfolio if invested. properties: value: type: number description: Amount value. example: 2000 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR totalAvailable: type: object description: >- Total available balance, which is the sum of cash ledger balance and any approved overdraft limit. properties: value: type: number description: Amount value. example: 2500 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR totalCash: type: object description: >- Total cash balance across all balances, including group balances but excluding asset portfolios. properties: value: type: number description: Amount value. example: 2000 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR overdraft: type: object description: Overdraft details for the account. properties: limit: type: object description: >- Maximum overdraft available through an overdraft program. Zero if no approved overdraft. properties: value: type: number description: Amount value. example: 500 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR used: type: object description: >- Portion of the approved overdraft limit currently being utilized. properties: value: type: number description: Amount value. example: 0 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR available: type: object description: >- Amount of overdraft currently available (limit minus used). properties: value: type: number description: Amount value. example: 500 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR availableByCurrency: type: array description: >- Available overdraft amounts converted to each currency the customer has a balance in. items: type: object properties: value: type: number description: Amount value. example: 500 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/borderless-accounts: get: operationId: balanceGetV1 summary: Get account balance (v1) deprecated: true description: > {% 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. tags: - balance security: - UserToken: [] parameters: - name: profileId in: query required: true description: Your profile ID. schema: type: integer format: int64 example: 33333333 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Array of borderless account objects with balances. content: application/json: schema: type: array items: type: object properties: id: type: integer description: Multi-currency account ID. example: 64 profileId: type: integer description: Personal or business profile ID. example: 33333333 recipientId: type: integer description: >- Recipient ID you can use for a multi-currency account deposit. example: 13828530 creationTime: type: string format: date-time description: Date when multi-currency account was opened. example: '2018-03-14T12:31:15.678Z' modificationTime: type: string format: date-time description: Date when multi-currency account setup was modified. example: '2018-03-19T15:19:42.111Z' active: type: boolean description: Is multi-currency account active or inactive. example: true eligible: type: boolean description: Ignore. example: true balances: type: array items: type: object properties: balanceType: type: string description: Balance type. example: AVAILABLE currency: type: string description: Currency code. example: GBP amount: type: object properties: value: type: number description: Available balance in specified currency. example: 10999859 currency: type: string description: Currency code. example: GBP reservedAmount: type: object properties: value: type: number description: Reserved amount from your balance. example: 0 currency: type: string description: Reserved amount currency code. example: GBP bankDetails: type: - object - 'null' description: >- Bank account details assigned to your multi-currency account. Available for EUR, GBP, USD, AUD, NZD. properties: id: type: integer format: int64 description: Bank account details ID. example: 90 currency: type: string description: Bank account currency. example: EUR bankCode: type: string description: Bank account code. example: DEKTDE7GXXX accountNumber: type: string description: Bank account number. example: DE51 7001 1110 6050 1008 91 swift: type: string description: Bank account swift code. example: DEKTDE7GXXX iban: type: string description: Bank account IBAN. example: DE51 7001 1110 6050 0008 91 bankName: type: string description: Bank name. example: Handelsbank accountHolderName: type: string description: Bank account holder name. example: Oliver Wilson bankAddress: type: object properties: addressFirstLine: type: string description: Bank address street and house. example: Elsenheimer Str. 41 postCode: type: string description: Bank address zip code. example: '80687' city: type: string description: Bank address city. example: München country: type: string description: Bank address country. example: Germany stateCode: type: - string - 'null' description: Bank address state code. example: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/borderless-accounts/{borderlessAccountId}/conversions: post: operationId: balanceConvertV1 summary: Convert currencies between balances (v1) deprecated: true description: > {% 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`. tags: - balance security: - UserToken: [] parameters: - name: borderlessAccountId in: path required: true description: Your borderless account ID. schema: type: integer format: int64 example: 64 - name: X-idempotence-uuid in: header required: true description: >- Unique identifier assigned by you. Used for idempotency check purposes. Should your call fail for technical reasons then you can use the same value again for making retry call. schema: type: string format: uuid example: a1b2c3d4-e5f6-7890-abcd-ef0123456789 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - quoteId properties: quoteId: type: integer description: Conversion quote ID. example: 1234 responses: '200': description: Conversion result. content: application/json: schema: type: object description: >- Conversion result containing source and target amounts, exchange rate, fees, and balance state after conversion. example: id: 1 type: CONVERSION state: COMPLETED balancesAfter: - value: 10000594.71 currency: GBP - value: 9998887.01 currency: EUR creationTime: '2017-11-21T09:55:49.275Z' steps: - id: 369588 type: CONVERSION creationTime: '2017-11-21T09:55:49.276Z' balancesAfter: - value: 9998887.01 currency: EUR - value: 10000594.71 currency: GBP channelName: null channelReferenceId: null tracingReferenceCode: null sourceAmount: value: 113.48 currency: EUR targetAmount: value: 100 currency: GBP fee: value: 0.56 currency: EUR rate: 0.88558 sourceAmount: value: 113.48 currency: EUR targetAmount: value: 100 currency: GBP rate: 0.88558 feeAmounts: - value: 0.56 currency: EUR headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/balances/hold-limit-breach: post: tags: - balance summary: List hold limit breaches operationId: holdLimitBreachList description: > 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`. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: state in: query required: false description: Filter by breach state. One of `OPEN`, `CLOSED` schema: type: string format: string example: OPEN - name: closingReason in: query required: false description: >- Filter by closing reason. One of `AUTOMATICALLY_RESOLVED`, `MANUALLY_RESOLVED` schema: type: string format: string example: AUTOMATICALLY_RESOLVED - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Successfully returned list of hold limit breaches. content: application/json: schema: type: array items: $ref: '#/components/schemas/HoldLimitBreach' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid closing reason or state used. content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Must be /errors/types/validation for this error type examples: - /errors/types/validation title: type: string description: Request parameter type mismatch examples: - Request parameter type mismatch status: type: string description: Bad request error examples: - 400 instance: type: string description: The uri that triggered the error examples: - >- /v1/profiles/{profileId}/balances/hold-limit-breach?state=INVALID_STATE errors: type: array description: A list of specific validation failures. items: type: object properties: detail: type: string description: A detailed description of the validation failure. examples: - The parameter value is not of the expected type. code: type: string description: A specific code for the validation failure type. examples: - parameter_invalid_type_mismatch ref: type: string description: A reference to the field that failed validation. examples: - state - closing_reason headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Caller does not have access to the profile. content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Must be /errors/types/access for this error type examples: - /errors/types/access title: type: string description: Forbidden examples: - Forbidden status: type: string description: Forbidden error examples: - 403 instance: type: string description: The uri that triggered the error examples: - /v1/profiles/{profileId}/balances/hold-limit-breach detail: type: string description: Detail of the error example: Unauthorized code: type: string description: Error code of the request example: forbidden headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/balances/hold-limit-breach/{holdLimitBreachId}: post: tags: - balance summary: Close a hold limit breach operationId: holdLimitBreachClose description: > 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. security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. - name: holdLimitBreachId in: path required: true schema: type: integer format: int64 description: The hold limit breach ID. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - targetRecipientId - state properties: targetRecipientId: type: integer description: >- ID of the recipient to receive the refund of the excess funds. example: 148393305 state: type: string description: Must be `CLOSED`. This is the only supported value. example: CLOSED responses: '204': description: Returns 204 No Content on success. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid state used. content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Must be /errors/types/validation for this error type examples: - /errors/types/validation title: type: string description: Validation Error examples: - Validation Error status: type: string description: Bad request error examples: - 400 instance: type: string description: The uri that triggered the error examples: - >- /v1/profiles/{profileId}/balances/hold-limit-breach?state=INVALID_STATE errors: type: array description: A list of specific validation failures. items: type: object properties: detail: type: string description: A detailed description of the validation failure. examples: - Only state CLOSED is supported code: type: string description: A specific code for the validation failure type. examples: - invalid_value ref: type: string description: A reference to the field that failed validation. examples: - state headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: >- Caller attempts to close a holdLimitBreach that does not belong to them. content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Must be /errors/types/access for this error type examples: - /errors/types/access title: type: string description: Forbidden examples: - Forbidden status: type: string description: Forbidden error examples: - 403 instance: type: string description: The uri that triggered the error examples: - >- /v1/profiles/{profileId}/balances/hold-limit-breach/{holdLimitBreachId} detail: type: string description: Detail of the error example: >- Hold limit breach {holdLimitBreachId} does not belong to profile {profileId} code: type: string description: Error code of the request example: forbidden headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Caller attempts to close a holdLimitBreach that does not exist. content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Must be /errors/types/validation for this error type examples: - /errors/types/validation title: type: string description: Validation Error examples: - Validation Error status: type: string description: Validation error examples: - 404 instance: type: string description: The uri that triggered the error examples: - >- /v1/profiles/{profileId}/balances/hold-limit-breach/{holdLimitBreachId} detail: type: string description: Detail of the error example: 'Hold limit breach not found: 123' code: type: string description: Error code of the request example: not_found headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/balance-statements/{balanceId}/statement.json: get: tags: - balance-statement summary: Get Balance Statement operationId: balanceStatementGet description: > 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 %} security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true schema: type: integer format: int64 description: The profile ID. example: 12345 - name: balanceId in: path required: true schema: type: integer format: int64 description: The balance ID to get the statement for. example: 64 - name: currency in: query required: true schema: type: string description: >- Currency of the balance statement requested (ISO 4217 Alphabetic Code). example: EUR - name: intervalStart in: query required: true schema: type: string format: date-time description: Statement start time in UTC. example: '2025-03-01T00:00:00.000Z' - name: intervalEnd in: query required: true schema: type: string format: date-time description: Statement end time in UTC. example: '2025-04-30T23:59:59.999Z' - name: type in: query required: false schema: type: string enum: - COMPACT - FLAT description: > Statement type: - `COMPACT` - Single statement line per transaction - `FLAT` - Accounting statements where transaction fees are on a separate line example: COMPACT - name: statementLocale in: query required: false schema: type: string description: Language for the statement. Supports 2 character language codes. example: en - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved balance statement. content: application/json: schema: type: object description: Balance statement containing transactional activities. properties: accountHolder: type: object description: Account holder information. properties: type: type: string description: Account holder type. enum: - PERSONAL - BUSINESS example: PERSONAL address: type: object description: Account holder address. properties: addressFirstLine: type: string description: Street address. example: Veerenni 24 city: type: string description: City. example: Tallinn postCode: type: string description: Postal/ZIP code. example: '12112' stateCode: type: string description: State code. example: '' countryName: type: string description: Country name. example: Estonia firstName: type: string description: Account holder first name. example: Oliver lastName: type: string description: Account holder last name. example: Wilson issuer: type: object description: Account issuer information. properties: name: type: string description: Issuer name. example: TransferWise Ltd. firstLine: type: string description: Street address. example: 56 Shoreditch High Street city: type: string description: City. example: London postCode: type: string description: Postal/ZIP code. example: E1 6JJ stateCode: type: string description: State code. example: '' country: type: string description: Country. example: United Kingdom bankDetails: type: - object - 'null' description: Local bank details for the account. transactions: type: array description: List of transactions in the statement period. items: type: object properties: type: type: string description: Transaction direction. enum: - DEBIT - CREDIT example: DEBIT date: type: string format: date-time description: Date when transaction was created. example: '2018-04-30T08:47:05.832Z' amount: type: object description: Transaction amount. properties: value: type: number description: Amount value (negative for debits). example: -7.76 currency: type: string description: Currency code. example: EUR totalFees: type: object description: Transaction fees. properties: value: type: number description: Fee amount. example: 0.04 currency: type: string description: Currency code. example: EUR details: type: object description: Transaction details. properties: type: type: string description: Transaction type. enum: - CARD - CONVERSION - DEPOSIT - TRANSFER - MONEY_ADDED - INCOMING_CROSS_BALANCE - OUTGOING_CROSS_BALANCE - DIRECT_DEBIT - BALANCE_INTEREST - BALANCE_ADJUSTMENT - UNKNOWN - ACCRUAL_CHARGE - INVESTMENT_TRADE_ORDER - ACQUIRING_PAYMENT - CARD_CASHBACK - CARD_ORDER_CHECKOUT example: CARD description: type: string description: >- Human readable explanation about the transaction. example: >- Card transaction of 6.80 GBP issued by Tfl.gov.uk/cp TFL TRAVEL CH amount: type: object description: >- Amount in original currency (for card transactions abroad). properties: value: type: number example: 6.8 currency: type: string example: GBP senderName: type: string description: Deposit sender name. example: HEIN LAURI senderAccount: type: string description: Deposit sender bank account details. example: EE76 1700 0170 0049 6704 paymentReference: type: string description: Deposit payment reference text. example: SVWZ+topup card category: type: string description: Card transaction category. example: Transportation Suburban and Loca merchant: type: object description: Card transaction merchant details. properties: name: type: string description: Merchant name. example: Tfl.gov.uk/cp firstLine: type: - string - 'null' description: Merchant address street. postCode: type: string description: Merchant address postal code. example: SW1H 0TL city: type: string description: Merchant address city. example: TFL TRAVEL CH state: type: string description: Merchant address state. example: '' country: type: string description: Merchant address country. example: GB category: type: string description: Merchant category. example: Transportation Suburban and Loca sourceAmount: type: object description: Source amount for conversions. properties: value: type: number example: 8.69 currency: type: string example: GBP targetAmount: type: object description: Target amount for conversions. properties: value: type: number example: 9.94 currency: type: string example: EUR fee: type: object description: Conversion fee. properties: value: type: number example: 0.03 currency: type: string example: GBP rate: type: number description: Conversion exchange rate. example: 1.147806 exchangeDetails: type: - object - 'null' description: Exchange details for card transactions abroad. properties: forAmount: type: object properties: value: type: number example: 6.8 currency: type: string example: GBP rate: type: - number - 'null' description: Exchange rate applied. runningBalance: type: object description: Running balance after the transaction. properties: value: type: number example: 16.01 currency: type: string example: EUR referenceNumber: type: string description: >- Wise assigned unique transaction reference number. Can be used to map refunds to the original transfer. example: CARD-249281 endOfStatementBalance: type: object description: Closing balance for the specified time period. properties: value: type: number description: Balance value. example: 9.94 currency: type: string description: Currency code. example: EUR query: type: object description: Query parameters used for the request. properties: intervalStart: type: string format: date-time description: Statement start time. example: '2018-03-01T00:00:00Z' intervalEnd: type: string format: date-time description: Statement end time. example: '2018-04-30T23:59:59.999Z' currency: type: string description: Currency code. example: EUR accountId: type: integer format: int64 description: Balance account ID. example: 64 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/account-details-orders: post: tags: - bank-account-details summary: Create bank account details order operationId: bankAccountDetailsOrderCreate security: - UserToken: [] - PersonalToken: [] description: > 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. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile to create the bank account details order for. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - currency properties: currency: type: string description: Balance currency (ISO 4217 Alphabetic Code). example: EUR responses: '200': description: Bank account details order created. content: application/json: schema: type: object properties: status: type: string description: Order status. enum: - PENDING_USER - PENDING_TW - DONE example: PENDING_USER currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR requirements: type: array description: List of requirements to fulfill the order. items: type: object properties: type: type: string description: Requirement type. enum: - VERIFICATION - TOP_UP example: VERIFICATION status: type: string description: Requirement status. enum: - PENDING_USER - PENDING_TW - DONE example: PENDING_USER headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: tags: - bank-account-details summary: List bank account detail orders (v1) operationId: bankAccountDetailsOrdersListV1 deprecated: true security: - UserToken: [] - PersonalToken: [] description: > 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 %} parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile to list bank account detail orders for. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: A list of bank account detail orders. content: application/json: schema: type: array items: type: object properties: status: type: string description: Order status. enum: - PENDING_USER - PENDING_TW - DONE example: PENDING_USER currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR requirements: type: array description: List of requirements for the order. items: type: object properties: type: type: string description: Requirement type. enum: - VERIFICATION - TOP_UP example: TOP_UP status: type: string description: Requirement status. enum: - PENDING_USER - PENDING_TW - DONE example: PENDING_USER headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/bank-details: post: tags: - bank-account-details summary: Create multiple bank account details operationId: bankAccountDetailsBankDetailsCreate security: - UserToken: [] description: > 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 %} parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile to create bank account details for. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - targetAccountId properties: targetAccountId: type: integer format: int64 description: ID of the currency balance to create account details on. example: 123456 responses: '200': description: Bank account details created. content: application/json: schema: type: object properties: id: type: string description: Account detail ID. example: '2' currency: type: string description: Account detail currency (ISO 4217 Alphabetic Code). example: GBP active: type: boolean description: Status of the account detail. example: true localDetails: type: object description: Local bank account details. properties: bankName: type: string description: Name of the bank. example: Wise bankAddress: type: string description: Address of the bank. example: TEA BUILDING, FLOOR 6, SHOREDITCH HIGH STREET sortCode: type: string description: Sort code of the bank. example: '231370' accountNumber: type: string description: Bank account number. example: '00000001' type: type: string description: Type of account detail. example: UK_ACCOUNT internationalDetails: type: - object - 'null' description: >- International bank account details. Only returned if SWIFT payments are supported for that currency. properties: bankName: type: string description: Name of the bank. example: Wise bankAddress: type: string description: Address of the bank. example: TEA BUILDING, FLOOR 6, SHOREDITCH HIGH STREET swiftCode: type: string description: Bank SWIFT code. example: TRWIGB22XXX iban: type: string description: IBAN. example: GB123450000000001 type: type: string description: Type of account detail. example: IBAN headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/account-details: get: tags: - bank-account-details summary: Retrieve bank account details operationId: bankAccountDetailsGet security: - UserToken: [] - PersonalToken: [] description: > 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`. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile to retrieve bank account details for. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: A list of bank account details. content: application/json: schema: type: array items: $ref: '#/components/schemas/BankAccountDetails' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/account-details-orders: get: tags: - bank-account-details summary: List bank account detail orders operationId: bankAccountDetailsOrdersList security: - UserToken: [] - PersonalToken: [] description: > 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`. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile to list bank account detail orders for. - name: currency in: query required: true schema: type: string example: GBP description: Currency code (ISO 4217 Alphabetic Code). - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: A list of bank account detail orders. content: application/json: schema: type: array items: type: object properties: status: type: string description: Order status. enum: - PENDING_USER - PENDING_TW - REQUIREMENTS_FULFILLED - DONE example: DONE currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR requirements: type: array description: List of requirements for the order. items: type: object properties: type: type: string description: Requirement type. enum: - VERIFICATION - TOP_UP example: TOP_UP status: type: string description: Requirement status. enum: - PENDING_USER - PENDING_TW - DONE example: DONE headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/account-details/payments/{paymentId}/returns: post: tags: - bank-account-details summary: Create payment return operationId: bankAccountDetailsReturnsCreate security: - UserToken: [] description: > 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. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile that received the payment. - name: paymentId in: path required: true schema: type: integer format: int64 example: 987654321 description: The ID of the payment to return. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: false content: application/json: schema: type: object properties: reason: type: string description: > Reason for the return. Required when returning SWIFT payments. enum: - INCORRECT_ACCOUNT_NUMBER - CLOSED_ACCOUNT - BLOCKED_ACCOUNT - CANCELLATION_REQUEST - REGULATORY - CUSTOMER_REQUEST example: CLOSED_ACCOUNT responses: '201': description: Payment return created. content: application/json: schema: type: object properties: id: type: string format: uuid description: ID of the return created. example: 4cc39f2b-3513-453d-8792-9ccc22e513c3 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid request. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string description: Error code. example: error.payment-return.invalid message: type: string description: Error message. example: A valid reason is required to return a Swift payment arguments: type: array description: Additional context values related to the error. items: {} example: - 987654321 - 123456789 - null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Payment not found. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string description: Error code. example: error.payment.not-found message: type: string description: Error message. example: >- No payment found with id [123456789] for profile id [987654321] arguments: type: array description: Additional context values related to the error. items: {} example: - 987654321 - 123456789 - null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/batch-groups: post: tags: - batch-group summary: Create a batch group operationId: batchGroupCreate security: - UserToken: [] - PersonalToken: [] description: > 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. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile to create the batch group for. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - sourceCurrency - name properties: sourceCurrency: type: string description: >- Source currency code (ISO 4217 Alphabetic Code). This currency is expected to be used for funding the batch group. example: GBP name: type: string description: >- Descriptive name for display purposes. Recommended to use a name that uniquely represents this batch. Maximum length of 100 characters. example: My batch group responses: '201': description: | Batch group created successfully. Note that `payInDetails` is empty for newly created batch groups. content: application/json: schema: $ref: '#/components/schemas/BatchGroup' example: id: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 version: 0 name: My batch group sourceCurrency: GBP status: NEW transferIds: [] payInDetails: [] headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/batch-groups/{batchGroupId}: get: tags: - batch-group summary: Retrieve a batch group operationId: batchGroupGet security: - UserToken: [] - PersonalToken: [] description: | Get an existing batch group by ID. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile that the batch group is associated with. - name: batchGroupId in: path required: true schema: type: string format: uuid example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 description: The batch group ID. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Batch group retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/BatchGroup' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' patch: tags: - batch-group summary: Update batch group status operationId: batchGroupUpdate security: - UserToken: [] - PersonalToken: [] description: > 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. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile that the batch group is associated with. - name: batchGroupId in: path required: true schema: type: string format: uuid example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 description: The batch group ID. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - status - version properties: status: type: string description: | Status to update to: - `COMPLETED` — Close the group and allow funding - `CANCELLED` — Cancel the group and all transfers enum: - COMPLETED - CANCELLED example: COMPLETED version: type: integer format: int64 description: >- The expected batch group version for concurrency control. Must match the server's current version. example: 1234 responses: '200': description: Batch group updated successfully. content: application/json: schema: $ref: '#/components/schemas/BatchGroup' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/batch-groups/{batchGroupId}/transfers: post: tags: - batch-group summary: Create a batch group transfer operationId: batchGroupTransferCreate security: - UserToken: [] - PersonalToken: [] description: > 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). parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile that the batch group is associated with. - name: batchGroupId in: path required: true schema: type: string format: uuid example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 description: The batch group ID. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - targetAccount - quoteUuid - customerTransactionId properties: targetAccount: type: integer format: int64 description: Recipient account ID. example: 67890 sourceAccount: type: integer format: int64 description: Refund recipient account ID. example: 12345 quoteUuid: type: string format: uuid description: Quote ID. example: bd244a95-dcf8-4c31-aac8-bf5e2f3e54c0 customerTransactionId: type: string format: uuid description: Unique identifier you generate for this transfer attempt. example: a]1b2c3d4-e5f6-7890-abcd-ef1234567890 details: type: object properties: reference: type: string description: Recipient-facing reference (payment narrative). example: to my friend transferPurpose: type: string description: Transfer purpose code. example: verification.transfers.purpose.pay.bills transferPurposeSubTransferPurpose: type: string description: Sub-purpose code for the transfer. example: >- verification.sub.transfers.purpose.pay.interpretation.service sourceOfFunds: type: string description: Source of funds code. example: verification.source.of.funds.other responses: '200': description: Transfer created successfully. Returns a transfer object. content: application/json: schema: type: object description: >- Transfer object. See [Transfer API reference](/api-reference/transfer#object) for full details. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/batch-payments/{batchGroupId}/payments: post: tags: - batch-group summary: Fund a batch group operationId: batchGroupFund security: - UserToken: [] - PersonalToken: [] description: > 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 %} parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile that the batch group is associated with. - name: batchGroupId in: path required: true schema: type: string format: uuid example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 description: The batch group ID. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - type properties: type: type: string description: The method of payment to use. enum: - BALANCE example: BALANCE responses: '200': description: Batch group funded successfully. content: application/json: schema: type: object properties: id: type: string format: uuid description: Unique batch group ID. example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 name: type: string description: Descriptive name. example: My batch group fileName: type: - string - 'null' description: >- If this batch was submitted as a file, this is the given file name. example: null alreadyPaid: type: boolean description: Not applicable to this use case. example: true shortId: type: integer format: int64 description: Not applicable to this use case. example: 12345 userId: type: integer format: int64 description: The ID of the user who initiated this payment. example: 33333333 profileId: type: integer format: int64 description: The ID of the profile this payment belongs to. example: 44444444 sourceCurrency: type: string description: >- The source currency of the batch. Note that if there are insufficient funds, an automatic conversion from another currency can occur. example: GBP status: type: string description: Current batch group status. enum: - NEW - COMPLETED - MARKED_FOR_CANCELLATION - PROCESSING_CANCEL - CANCELLED example: COMPLETED groupType: type: string description: >- Whether this batch was submitted over the API or as a file. enum: - API - FILE example: API transferIds: type: array items: type: integer format: int64 description: The IDs of all transfers in the group. example: - 100001 - 100002 - 100003 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/batch-groups/{batchGroupId}/payment-initiations: post: tags: - batch-group summary: Fund a batch group via direct debit operationId: batchGroupPaymentInitiationCreate security: - UserToken: [] description: > 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 %} parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile that the batch group is associated with. - name: batchGroupId in: path required: true schema: type: string format: uuid example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 description: The batch group ID. - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - type - accountId properties: type: type: string description: The method of payment to use. enum: - DIRECT_DEBIT example: DIRECT_DEBIT accountId: type: integer format: int64 description: >- Direct debit account ID. See [direct debit account creation](/api-reference/direct-debit-account/directdebitaccountcreate). example: 1 reference: type: string description: >- Optional payment initiation reference. Maximum 10 characters. If not provided, a reference will be generated automatically. example: B1234567 responses: '200': description: > Payment initiation created successfully. You need to save payment initiation ID for tracking its status later. content: application/json: schema: $ref: '#/components/schemas/PaymentInitiation' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/batch-groups/{batchGroupId}/payment-initiations/{paymentInitiationId}: get: tags: - batch-group summary: Retrieve a payment initiation operationId: batchGroupPaymentInitiationGet security: - UserToken: [] - PersonalToken: [] description: > Get payment initiation info by ID. In addition to [webhooks](/guides/developer/webhooks/event-types#batch-payment-initiations-state-change-event), this endpoint can be used for polling the status of a payment initiation. parameters: - name: profileId in: path required: true schema: type: integer format: int64 example: 12345678 description: The ID of the profile that the batch group is associated with. - name: batchGroupId in: path required: true schema: type: string format: uuid example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 description: The batch group ID. - name: paymentInitiationId in: path required: true schema: type: integer format: int64 example: 12345 description: The payment initiation ID. - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Payment initiation retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/PaymentInitiation' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/settlements: post: tags: - bulk-settlement summary: Send a settlement journal operationId: bulkSettlementJournalCreate security: - ClientCredentialsToken: [] description: > 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 %} requestBody: required: true content: application/json: schema: type: object required: - type - settlementReference - settlementDate - transfers properties: type: type: string description: Type of settlement. enum: - TRUSTED_BULK_SETTLEMENT example: TRUSTED_BULK_SETTLEMENT settlementReference: type: string description: > Reference used when paying the end of day settlement monies to Wise. This should match so that Wise can link the payment. Maximum 10 characters, must start with `TPFB` prefix. pattern: ^TPFB.{1,6}$ example: TPFB190322 settlementDate: type: string format: date-time description: The date you send the settlement funds, ISO 8601 format. example: '2019-03-22T23:59:59-05:00' settlementCurrency: type: string description: > The currency in which the transfers in this journal will be settled. If included, the `exchangeRate` must be set on every transfer in the transfers array. **Only include if you will settle in a currency different to the source currency of transfers.** example: USD transfers: type: array description: Array of transfers to be settled. items: type: object required: - id - date - sourceAmount - sourceCurrency - customerName - partnerReference properties: id: type: integer format: int64 description: ID of the transfer to be settled. example: 125678 date: type: string format: date-time description: The date the transfer was created, ISO 8601 format. example: '2019-03-22T10:00:12-05:00' sourceAmount: type: number format: decimal description: Transfer source amount with fee, always positive. example: 23.24 sourceCurrency: type: string description: Transfer source currency (ISO 4217). example: USD customerName: type: string description: >- Name of the customer. Helps identify customer when manual operation is required. example: Joe Bloggs partnerReference: type: string description: >- The transaction/payment identifier in your system, uniquely identifies the transfer in your platform. example: '11111' comment: type: string description: > Other data about the transfer or sender. For USA, you should send the account refund information for the sending customer (account number, routing number, street address, etc.) example: Extra Data exchangeRate: type: number format: decimal description: > The exchange rate you used to calculate the settlement amount for this transfer. **Required if `settlementCurrency` is set on the journal.** You can set this value to be unique per transfer or the same for every transfer, depending on your settlement approach and agreements with Wise. example: 0.875469 refundedTransfers: type: array description: >- Array of transfers for which refunds have been processed. Only for Net Settlement. items: type: object required: - id - partnerReference properties: id: type: integer format: int64 description: ID of the refunded transfer. example: 178880 exchangeRate: type: number format: decimal description: >- The exchange rate used for this transfer. Should be the same value as the one used for the original transfer settlement. example: 0.875469 partnerReference: type: string description: >- The transaction/payment identifier in your system, uniquely identifies the transfer in your platform. example: '11108' balanceTransfer: type: number format: decimal description: > The amount of money to be deducted from the expected settlement amount based on what is owed to you for previous days where the total settlement from you to Wise was negative. This value must be 0 or negative. example: 0 examples: sameCurrency: summary: Same Currency Settlement value: type: TRUSTED_BULK_SETTLEMENT settlementReference: TPFB190322 settlementDate: '2019-03-22T23:59:59-05:00' transfers: - id: 125678 date: '2019-03-22T10:00:12-05:00' sourceAmount: 23.24 sourceCurrency: USD customerName: Joe Bloggs partnerReference: '11111' comment: Extra Data - id: 178889 date: '2019-03-23T12:40:05-05:00' sourceAmount: 125.67 sourceCurrency: USD customerName: Mat Newman partnerReference: '11112' comment: Extra Data refundedTransfers: - id: 178880 partnerReference: '11108' balanceTransfer: 0 crossCurrency: summary: Cross Currency Settlement value: type: TRUSTED_BULK_SETTLEMENT settlementReference: TPFB190322 settlementDate: '2019-03-22T23:59:59-05:00' settlementCurrency: USD transfers: - id: 125678 date: '2019-03-22T10:00:12-05:00' sourceAmount: 23.24 sourceCurrency: PHP customerName: Joe Bloggs partnerReference: '11111' comment: Extra Data exchangeRate: 0.875469 - id: 178889 date: '2019-03-23T12:40:05-05:00' sourceAmount: 125.67 sourceCurrency: PHP customerName: Mat Newman partnerReference: '11112' comment: Extra Data exchangeRate: 0.875469 refundedTransfers: - id: 178880 partnerReference: '11108' - id: 178881 partnerReference: '11109' balanceTransfer: 0 responses: '200': description: Settlement journal received successfully. Empty response body. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v3/spend/profiles/{profileId}/cards: get: operationId: cardList summary: List cards for a profile description: | Returns a paginated list of cards that belong to a specific profile. tags: - card parameters: - name: profileId in: path required: true description: The ID of the profile to retrieve cards for. schema: type: integer format: int64 example: 123456 - name: pageSize in: query required: false description: >- The maximum number of cards to return per page. Must be between 10 and 100. schema: type: integer format: int64 minimum: 10 maximum: 100 default: 10 example: 10 - name: pageNumber in: query required: false description: The page number to retrieve. Must be greater than or equal to 1. schema: type: integer format: int64 minimum: 1 default: 1 example: 1 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] responses: '200': description: List of cards retrieved successfully. content: application/json: schema: type: object properties: cards: type: array description: Collection of cards for this profile. items: $ref: '#/components/schemas/Card' totalCount: type: integer format: int64 description: The total number of cards for this profile. example: 1 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}: get: operationId: cardGet summary: Get card details description: | Retrieves details for a specific card by its token. tags: - card parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] responses: '200': description: Card details retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/Card' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}/status: put: operationId: cardStatusUpdate summary: Update card status description: > 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 tags: - card parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object required: - status properties: status: type: string description: The status to update the card to. enum: - ACTIVE - FROZEN - BLOCKED example: ACTIVE example: status: ACTIVE responses: '200': description: Card status updated successfully. content: application/json: schema: $ref: '#/components/schemas/Card' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}/reset-pin-count: post: operationId: cardPinCountReset summary: Reset PIN count description: > 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 %} tags: - card parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] responses: '200': description: PIN count reset successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions: get: operationId: cardPermissionsGet summary: Get card spending permissions description: | Retrieves the current spending permissions configured for a card. tags: - card parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] responses: '200': description: Card permissions retrieved successfully. content: application/json: schema: type: object properties: permissions: type: array description: List of spending permissions for this card. items: $ref: '#/components/schemas/Permission' example: permissions: - type: ECOM isEnabled: false isLocked: false - type: POS_CHIP isEnabled: true isLocked: false - type: ATM_WITHDRAWAL isEnabled: false isLocked: false - type: MOBILE_WALLETS isEnabled: true isLocked: false - type: POS_CONTACTLESS isEnabled: false isLocked: true - type: POS_MAGSTRIPE isEnabled: false isLocked: true headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' patch: operationId: cardPermissionsUpdate summary: Update a single card permission deprecated: true description: > 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 %} tags: - card parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object required: - type - isEnabled properties: type: type: string description: The permission type to update. enum: - ECOM - POS_CHIP - POS_MAGSTRIPE - POS_CONTACTLESS - ATM_WITHDRAWAL - MOBILE_WALLETS example: ECOM isEnabled: type: boolean description: Whether to enable or disable this permission. example: true responses: '200': description: Permission updated successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/spend/profiles/{profileId}/cards/{cardToken}/spending-permissions: patch: operationId: cardPermissionsBulkUpdate summary: Bulk update card permissions description: > 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. tags: - card parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object required: - permissions properties: permissions: type: array description: List of permissions to update. items: type: object required: - type - isEnabled properties: type: type: string description: The permission type to update. enum: - ECOM - POS_CHIP - POS_MAGSTRIPE - POS_CONTACTLESS - ATM_WITHDRAWAL - MOBILE_WALLETS isEnabled: type: boolean description: Whether to enable or disable this permission. example: permissions: - type: ECOM isEnabled: true - type: POS_CHIP isEnabled: true responses: '200': description: Permissions updated successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /twcard-data/v1/clientSideEncryption/fetchEncryptingKey: get: operationId: cardEncryptionKeyGet summary: Fetch RSA encryption key description: > 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. tags: - card-sensitive-details servers: - url: https://twcard.wise.com description: Production Environment - url: https://twcard.wise-sandbox.com description: Sandbox Environment security: - UserToken: [] responses: '200': description: RSA encryption key retrieved successfully. content: application/json: schema: type: object properties: version: type: integer format: int32 description: Version of the encryption key. example: 1 key: type: string description: The RSA public key. example: headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /twcard-data/v1/sensitive-card-data/details: post: operationId: cardSensitiveDetailsGet summary: Get sensitive card details description: > 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 %} tags: - card-sensitive-details servers: - url: https://twcard.wise.com description: Production Environment - url: https://twcard.wise-sandbox.com description: Sandbox Environment parameters: - name: x-tw-twcard-card-token in: header required: true description: The card token identifying which card to retrieve details for. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object required: - keyVersion - encryptedPayload properties: keyVersion: type: integer format: int32 description: The version of the encryption key to use. Always set to 1. example: 1 encryptedPayload: type: string description: Your JWE encrypted payload. example: responses: '200': description: Sensitive card details retrieved successfully. content: application/json: schema: type: object properties: nonce: type: string format: uuid description: >- An arbitrary UUID issued from the cryptographic communication. example: 33d51227-9ad6-4624-b4b7-7853b56076dd cvv2: type: string description: The card CVV2 security code. example: '111' pan: type: string description: The card Primary Account Number. example: '4396910000012345' expiryDate: type: string description: The card expiry date in MM/YY format. example: 10/31 cardholderName: type: string description: Name on the card. example: John Smith headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /twcard-data/v1/sensitive-card-data/pin: post: operationId: cardPinGet summary: Get card PIN description: > 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 %} tags: - card-sensitive-details servers: - url: https://twcard.wise.com description: Production Environment - url: https://twcard.wise-sandbox.com description: Sandbox Environment parameters: - name: x-tw-twcard-card-token in: header required: true description: The card token identifying which card to retrieve the PIN for. schema: type: string format: uuid example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object required: - keyVersion - encryptedPayload properties: keyVersion: type: integer format: int32 description: The version of the encryption key to use. Always set to 1. example: 1 encryptedPayload: type: string description: Your JWE encrypted payload. example: responses: '200': description: Card PIN retrieved successfully. content: application/json: schema: type: object properties: nonce: type: string format: uuid description: >- An arbitrary UUID issued from the cryptographic communication. example: 33d51227-9ad6-4624-b4b7-7853b56076dd pin: type: string description: The card PIN. example: '1234' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}/phone-number: put: operationId: cardPhoneNumberUpdate summary: Update phone number deprecated: true description: > {% 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. tags: - card security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 30000000 - name: cardToken in: path required: true description: The card token. schema: type: string example: 12345-12345-12345-12345 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - phoneNumber properties: phoneNumber: type: string description: >- Must be a valid phone number prefixed with + and country code. example: '+6588888888' responses: '200': description: Updated card phone number details. content: application/json: schema: type: object properties: token: type: string description: The card token that you are modifying. example: 12345-12345-12345-12345 profileId: type: integer description: The profile ID that the card is linked to. example: 30000000 phoneNumber: type: string description: The new phone number associated with the card. example: '+6588888888' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}/production: put: tags: - card-kiosk-collection summary: Produce a card operationId: cardKioskCollectionProduce description: > 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](/guides/developer/webhooks/event-types#cards-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 %} security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business) that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object description: Request body for producing a card at a kiosk machine. required: - kioskId properties: kioskId: type: string description: >- Identifier that specifies on which kiosk the card should be produced. example: WIS00001 responses: '200': description: >- OK - The card information has been successfully sent to the kiosk machine. content: application/json: schema: $ref: '#/components/schemas/ProductionStatus' example: status: IN_PROGRESS kioskId: WIS00001 occurredAt: '2024-01-01T12:24:56.121Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '422': description: >- Unprocessable Content - The card information can't be processed by the kiosk machine. For more details, check the error code returned. content: application/json: schema: $ref: '#/components/schemas/ProductionStatus' example: status: REQUEST_ERROR kioskId: WIS00001 occurredAt: '2024-01-01T12:24:56.121Z' errorCode: PIN_VERIFICATION_FAILED description: The PIN cannot be verified because the server is unreachable headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: tags: - card-kiosk-collection summary: Retrieve card production status operationId: cardKioskCollectionProductionGet description: > Retrieves the current production status of a card at a kiosk machine. **Best practice**: Subscribe to the [card production status change](/guides/developer/webhooks/event-types#cards-card-production-status-change) webhook for real-time notifications. Use this endpoint only when you need to synchronously check the status. security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business) that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved card production status. content: application/json: schema: $ref: '#/components/schemas/ProductionStatus' example: status: READY kioskId: null occurredAt: '2024-01-01T12:24:56.124Z' errorCode: null description: Card ready for production headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/card-orders: post: tags: - card-order summary: Create a card order operationId: cardOrderCreate description: > 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). security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business). schema: type: integer format: int64 example: 123456 - name: X-idempotence-uuid in: header required: true description: >- Idempotency key. Should be generated and used for any subsequent retries. schema: type: string format: uuid example: 054064c9-e01e-49fb-8fd9-b0990b9442f4 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object description: Request body for creating a card order. required: - program - cardHolderName - address properties: program: type: string description: The name of the card program. example: VISA_DEBIT_BUSINESS_UK_1_PHYSICAL_CARDS_API cardHolderName: type: string description: The cardholder's name. example: John Smith embossedName: type: string description: >- The cardholder's name to print on the card (physical card only). The field length should be between 1 and 22 characters (spaces included). example: Smith John phoneNumber: type: string description: > For partners onboarded after 1/3/2025, we will use the profile phone number for any Card-related One-Time Password (OTP) requests. See [3ds](/guides/product/issue-cards/3ds). Ensure that the phone number is valid and starts with a "+" followed by the country code. example: '+441234567890' address: type: object description: >- The cardholder's billing address or delivery address. Fields vary by country. See the [card address validation guide](/guides/developer/api-guides/card-address-validation). additionalProperties: true properties: firstLine: type: string example: 56 Shoreditch High St secondLine: type: - string - 'null' example: The Tea Bldg thirdLine: type: - string - 'null' example: null city: type: string example: London postCode: type: string example: E1 6JJ state: type: - string - 'null' example: null country: type: string description: ISO 3166-1 alpha-2 country code. example: GB deliveryOption: type: string description: > The delivery method for the card order. The delivery method will be defined during scoping phase. Please reach out to your Implementation Manager for more information. Only specify this field for `KIOSK_COLLECTION`. If not specified, the default delivery method for your region will be used. - `POSTAL_SERVICE_STANDARD` - Default delivery method. Not traceable. - `POSTAL_SERVICE_WITH_TRACKING` - Available in certain regions. Default in Brazil. - `KIOSK_COLLECTION` - Available in select regions. See the [kiosk collection guide](/guides/product/issue-cards/card-kiosk-collection). enum: - POSTAL_SERVICE_STANDARD - POSTAL_SERVICE_WITH_TRACKING - KIOSK_COLLECTION example: null lifetimeLimit: type: number description: >- Optionally sets a lifetime spending limit on the card. A lifetime limit of 0 means that a card cannot be used until the lifetime limit is updated. example: 100 cardHolderProfileId: type: integer format: int64 description: >- The cardholder profile for this card. This is used for business profiles. example: 654321 replacementDetails: type: object description: The replacement details for this card. properties: cardToken: type: string description: Token of the card to replace. example: 4a75fdb7-5791-49ac-832c-81c4347e4df0 reason: type: string description: | Reason for replacing the card: - `CARD_DAMAGED` - `CARD_EXPIRING` enum: - CARD_DAMAGED - CARD_EXPIRING example: CARD_DAMAGED responses: '200': description: OK - Card order created successfully. content: application/json: schema: $ref: '#/components/schemas/CardOrder' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: tags: - card-order summary: Retrieve all card orders operationId: cardOrderList description: Retrieves a list of card orders created for the specified `profileId`. security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business). schema: type: integer format: int64 example: 123456 - name: pageSize in: query description: >- The maximum number of card orders to return per page. This number can be between 10 - 100, and will default to 10. schema: type: integer format: int32 example: 10 - name: pageNumber in: query description: >- The page number to retrieve the next set of card orders. The number has to be greater or equal to 1, and will default to 1. schema: type: integer format: int32 example: 1 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved card orders. content: application/json: schema: type: object properties: totalCount: type: integer description: The total number of card orders for this profile. example: 5 cardOrders: type: array items: $ref: '#/components/schemas/CardOrder' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/card-orders/{cardOrderId}: get: tags: - card-order summary: Retrieve a card order operationId: cardOrderGet description: Retrieves a card order based on the `cardOrderId`. security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business). schema: type: integer format: int64 example: 123456 - name: cardOrderId in: path required: true description: The card order ID. schema: type: integer format: int64 example: 142 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved card order. content: application/json: schema: $ref: '#/components/schemas/CardOrder' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/card-orders/availability: get: tags: - card-order summary: Retrieve available card programs operationId: cardOrderProgramsGet description: Retrieves the list of available card programs for each `profileId`. security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business). schema: type: integer format: int64 example: 123456 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved available card programs. content: application/json: schema: type: object properties: cardPrograms: type: array description: >- List of available card programs. A Card Program is what Wise refers to all the cards that you will be issuing with us, grouped by product type and by issuing country. items: type: object properties: name: type: string description: The name of the card program. example: VISA_DEBIT_BUSINESS_UK_1_CARDS_API scheme: type: string description: | The network of the card program: - `MASTERCARD` - `VISA` enum: - MASTERCARD - VISA example: VISA defaultCurrency: type: string description: The default currency assigned to the card program. example: GBP cardType: type: string description: | The type of the card: - `VIRTUAL_NON_UPGRADEABLE` - `PHYSICAL` enum: - VIRTUAL_NON_UPGRADEABLE - PHYSICAL example: VIRTUAL_NON_UPGRADEABLE headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/card-orders/{cardOrderId}/requirements: get: tags: - card-order summary: Retrieve card order requirements operationId: cardOrderRequirementsGet description: > 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` security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business). schema: type: integer format: int64 example: 123456 - name: cardOrderId in: path required: true description: The card order ID. schema: type: integer format: int64 example: 142 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved card order requirements. content: application/json: schema: type: object properties: requirements: type: array items: type: object properties: type: type: string description: > The type of requirement: - `PIN` - Set a PIN on the card order - `VERIFICATION` - Verify customer by providing KYC evidences - `ADDRESS` - Provide a valid address for the card order enum: - PIN - VERIFICATION - ADDRESS example: PIN status: type: string description: | The status of the requirement: - `NOT_INITIATED` - `NEEDS_ACTION` - `PENDING` - `COMPLETED` - `FAILED` enum: - NOT_INITIATED - NEEDS_ACTION - PENDING - COMPLETED - FAILED example: NOT_INITIATED example: requirements: - type: PIN status: NOT_INITIATED - type: VERIFICATION status: PENDING - type: ADDRESS status: COMPLETED headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/card-orders/{cardOrderId}/status: put: tags: - card-order summary: Update card order status operationId: cardOrderStatusUpdate description: > 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 %} security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID (personal or business). schema: type: integer format: int64 example: 123456 - name: cardOrderId in: path required: true description: The card order ID. schema: type: integer format: int64 example: 142 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - status properties: status: type: string description: | The intended new status of the card order: - `CANCELLED` - `COMPLETED` (deprecated) enum: - CANCELLED - COMPLETED example: CANCELLED responses: '202': description: Accepted - Card order status update has been accepted. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/address/validate: post: tags: - card-order summary: Validate an address operationId: cardOrderValidateAddress description: > 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 %} security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object description: >- Address to validate. Fields vary by country. See the [card address validation guide](/guides/developer/api-guides/card-address-validation). additionalProperties: true properties: firstLine: type: string description: Card holder's address (max 30 characters). example: 56 Shoreditch High St secondLine: type: - string - 'null' description: Card holder's address (max 30 characters). example: The Tea Bldg thirdLine: type: - string - 'null' description: Card holder's address (max 30 characters). example: null city: type: string description: Card holder's city (max 30 characters). example: London postCode: type: string description: Card holder's postal code (max 10 characters). example: E1 6JJ state: type: - string - 'null' description: Card holder's state (max 30 characters). example: null country: type: string description: >- Card holder's country (ISO 3166-1 alpha-2, max 2 characters). example: GB responses: '200': description: >- OK - Validation result returned. An empty errors collection means the address is valid. content: application/json: schema: type: object properties: errors: type: array description: >- Collection of validation errors. Empty if address is valid. items: type: object properties: field: type: string description: The field that failed validation. example: postCode message: type: string description: Description of the validation error. example: Please enter a valid postcode example: errors: - field: city message: Required Field - field: postCode message: Please enter a valid postcode - field: firstLine message: Must be less than 30 characters headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /twcard-data/v1/sensitive-card-data/preset-pin: post: tags: - card-order summary: Set card PIN operationId: cardOrderPresetPin description: > 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. servers: - url: https://twcard.wise.com description: Production Environment - url: https://twcard.wise-sandbox.com description: Sandbox Environment security: - UserToken: [] parameters: - name: x-tw-twcard-order-id in: header required: true description: The card order ID. schema: type: string example: '142' - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object description: Request body for setting a card PIN. required: - keyVersion - encryptedPayload properties: keyVersion: type: integer description: The version of the key to use. It is always set to 1. example: 1 encryptedPayload: type: string description: >- Your [JWE payload](/guides/product/issue-cards/sensitive-card-details). example: eyJhbGciOiJSU0... responses: '200': description: OK - PIN set successfully. content: application/json: schema: type: object properties: cardOrderId: type: string description: The card order ID. example: '142' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/transactions/{transactionId}: get: deprecated: true operationId: cardTransactionGetV3 summary: Get card transaction (V3) description: > {% 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. tags: - card-transaction security: - UserToken: [] parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: transactionId in: path required: true description: The ID of the transaction. schema: type: string example: '342671' - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Card transaction retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/CardTransactionV3' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/spend/profiles/{profileId}/cards/transactions/{transactionId}: get: operationId: cardTransactionGet summary: Get card transaction description: > 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. tags: - card-transaction security: - UserToken: [] parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: transactionId in: path required: true description: The ID of the transaction. schema: type: integer format: int64 example: 342671 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Card transaction retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/CardTransaction' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/spend/profiles/{profileId}/cards/{cardToken}/transactions: get: operationId: cardTransactionList summary: List card transactions description: > 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. tags: - card-transaction security: - UserToken: [] parameters: - name: profileId in: path required: true description: The ID of the profile that owns the card. schema: type: integer format: int64 example: 123456 - name: cardToken in: path required: true description: The unique token identifying the card. schema: type: string format: uuid example: 59123122-223d-45f9-b840-0ad4a4f80937 - name: fromCreationTime in: query required: true description: >- Start of range for transaction creation time in UTC, in ISO-8601 format. schema: type: string format: date-time example: '2025-12-15T00:00:00Z' - name: toCreationTime in: query required: true description: >- End of range for transaction creation time in UTC, in ISO-8601 format. schema: type: string format: date-time example: '2026-01-15T00:00:10Z' - name: pageSize in: query required: false description: Page size of query between 10 and 100 inclusive, defaults to 20. schema: type: integer format: int32 minimum: 10 maximum: 100 default: 20 example: 10 - name: lastId in: query required: false description: >- A pagination cursor that marks your position in the list. Include the ID of the last transaction from the previous page to retrieve the next page (transactions with IDs less than the provided value). schema: type: integer format: int64 example: 342672 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Card transactions retrieved successfully. content: application/json: schema: type: object properties: transactions: type: array items: $ref: '#/components/schemas/CardTransaction' example: transactions: - id: 342671 cardToken: 59123122-223d-45f9-b840-0ad4a4f80937 type: ECOM_PURCHASE state: IN_PROGRESS declineReason: null creationTime: '2022-11-28T08:17:54.241Z' modificationTime: '2022-11-28T08:17:54.241Z' purgeTime: '2022-11-28T08:17:54.241Z' transactionAmount: amount: 1.4 currency: SGD fees: - amount: 0.1 currency: SGD fee_type: ATM_ACQUIRER transactionAmountWithFees: amount: 1.5 currency: SGD merchant: name: Test Payment location: country: France city: Rouen zipCode: '00000' region: null state: null category: name: MISCELLANEOUS_FOOD_STORES_CONVEN code: '5999' description: 5999 R Miscellaneous and Special authorisationMethod: MANUAL_ENTRY approvalCode: '913647' billingAmount: amount: 1.1 currency: EUR arn: '04300014127798385983852' pinValidationResult: ONLINE_PIN_VALIDATED balanceChannelReferenceId: 6e71018d-2f4d-4fc3-6711-f517f4664712 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/user/claim-account: post: operationId: claimAccountCreate summary: Generate a claim account code description: > 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. tags: - claim-account security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object required: - registrationCode properties: registrationCode: type: string description: >- The `registration_code` obtained when [creating the user](/api-reference/user/usercreate). example: registrationCode: responses: '200': description: Claim account code generated successfully. content: application/json: schema: type: object properties: claimAccountCode: type: string description: >- The `claim_account_code` to be used in the redirect to Wise. example: claimAccountCode: headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v3/comparisons: get: operationId: comparisonGetV3 summary: Request a comparison quote (V3) deprecated: true description: > {% 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. tags: - comparison parameters: - name: sourceCurrency in: query required: true description: ISO 4217 source currency code schema: type: string example: GBP - name: targetCurrency in: query required: true description: ISO 4217 target currency code schema: type: string example: EUR - name: sendAmount in: query required: true description: Amount to send in source currency schema: type: number example: 10000 - name: midMarketRate in: query required: false description: Current mid-market rate between the source and target currency schema: type: number - name: wiseFee in: query required: false description: Wise's fee, if the Wise quote is known schema: type: number - name: wiseEstimatedDelivery in: query required: false description: Wise's estimated delivery timestamp, if the Wise quote is known schema: type: string - name: wiseQuoteCreatedTime in: query required: false description: Timestamp when the Wise quote was created schema: type: string - name: payInMethod in: query required: false description: >- Change the pay-in method of the Wise quote only (all other quotes will remain as bank transfer) schema: type: string - name: sourceCountry in: query required: false description: Filter by source country (ISO 3166-1 Alpha-2 code) schema: type: string - name: targetCountry in: query required: false description: Filter by target country (ISO 3166-1 Alpha-2 code) schema: type: string - name: providerCountry in: query required: false description: Filter by provider country (ISO 3166-1 Alpha-2 code) schema: type: string - name: providerTypes in: query required: false description: Filter by provider type schema: type: array items: type: string enum: - bank - moneytransferprovider - travelMoney - name: providers in: query required: false description: Filter by specific provider aliases schema: type: string - name: excludePartners in: query required: false description: Exclude Wise's partner banks - default true schema: type: boolean - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Comparison data retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/ComparisonV3' example: sourceCurrency: GBP targetCurrency: EUR sourceCountry: null targetCountry: null providerCountry: null providerTypes: - bank - moneyTransferProvider amount: 10000 providerType: null providers: - id: 39 alias: wise name: Wise logos: normal: svgUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.svg pngUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.png inverse: svgUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.svg pngUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.png white: svgUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.svg pngUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.png circle: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/wise-mark.svg pngUrl: null altText: Wise type: moneyTransferProvider partner: false quotes: - rate: 1.15989 fee: 37.12 dateCollected: '2019-10-22T14:36:43Z' sourceCountry: null targetCountry: null markup: 0 receivedAmount: 11555.84 deliveryEstimation: duration: min: PT20H8M16.305111S max: PT20H8M16.305111S providerGivesEstimate: true durationType: CALENDAR deliveryDate: min: '2025-02-05T15:08:00.000000492Z' max: '2025-02-05T15:08:00.000000492Z' logo: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.svg - id: 1 alias: barclays name: Barclays logos: normal: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays.svg pngUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays.png inverse: svgUrl: null pngUrl: null white: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays--white.svg pngUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays--white.png circle: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays-mark.svg pngUrl: null altText: Barclays type: bank partner: false quotes: - rate: 1.12792426 fee: 0 dateCollected: '2019-10-22T14:00:04Z' sourceCountry: GB targetCountry: ES markup: 2.75592858 receivedAmount: 11279.24 deliveryEstimation: duration: min: PT24H max: PT24H providerGivesEstimate: true durationType: CALENDAR deliveryDate: min: '2025-02-06T13:12:13.428650596Z' max: '2025-02-06T13:12:13.428650596Z' logo: https://dq8dwmysp7hk1.cloudfront.net/logos/barclays.svg headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/comparisons: get: operationId: comparisonGet summary: Request a comparison quote description: > 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). tags: - comparison parameters: - name: sourceCurrency in: query required: true description: ISO 4217 source currency code schema: type: string example: GBP - name: targetCurrency in: query required: true description: ISO 4217 target currency code schema: type: string example: EUR - name: sendAmount in: query required: false description: >- Amount to send in source currency. Must provide either `sendAmount` or `recipientGetsAmount`. schema: type: number example: 10000 - name: recipientGetsAmount in: query required: false description: >- Amount to be received in target currency. Must provide either `sendAmount` or `recipientGetsAmount`. schema: type: number - name: midMarketRate in: query required: false description: Current mid-market rate between the source and target currency schema: type: number - name: wiseFee in: query required: false description: Wise's fee, if the Wise quote is known schema: type: number - name: wiseEstimatedDelivery in: query required: false description: Wise's estimated delivery timestamp, if the Wise quote is known schema: type: string - name: wiseQuoteCreatedTime in: query required: false description: Timestamp when the Wise quote was created schema: type: string - name: payInMethod in: query required: false description: >- Change the pay-in method of the Wise quote only (all other quotes will remain as bank transfer) schema: type: string - name: sourceCountry in: query required: false description: Filter by source country (ISO 3166-1 Alpha-2 code) schema: type: string - name: targetCountry in: query required: false description: Filter by target country (ISO 3166-1 Alpha-2 code) schema: type: string - name: providerCountry in: query required: false description: Filter by provider country (ISO 3166-1 Alpha-2 code) schema: type: string - name: filter in: query required: false description: Filter by most popular competitors schema: type: string enum: - POPULAR - name: numberOfProviders in: query required: false description: >- Number of popular competitors to return if `filter` is set to `POPULAR` - default value is 4 schema: type: integer format: int32 - name: providerTypes in: query required: false description: Filter by provider type schema: type: array items: type: string enum: - bank - moneytransferprovider - travelMoney - name: providers in: query required: false description: Filter by specific provider aliases schema: type: string - name: excludePartners in: query required: false description: Exclude Wise's partner banks - default true schema: type: boolean - name: includeWise in: query required: false description: >- Overrides filters to ensure Wise data is returned, even if exclusionary filters are applied schema: type: boolean - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Comparison data retrieved successfully. content: application/json: schema: $ref: '#/components/schemas/Comparison' example: sourceCurrency: GBP targetCurrency: EUR sourceCountry: null targetCountry: null providerCountry: null providerTypes: - bank - moneyTransferProvider amount: 10000 amountType: SEND providers: - id: 39 alias: wise name: Wise logos: normal: svgUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.svg pngUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.png inverse: svgUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.svg pngUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.png white: svgUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.svg pngUrl: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.png circle: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/wise-mark.svg pngUrl: null altText: Wise type: moneyTransferProvider partner: false quotes: - rate: 1.15989 fee: 37.12 dateCollected: '2019-10-22T14:36:43Z' sourceCountry: null targetCountry: null markup: 0 receivedAmount: 11555.84 sendAmount: null deliveryEstimation: duration: min: PT20H8M16.305111S max: PT20H8M16.305111S providerGivesEstimate: true isConsideredMidMarketRate: true - id: 1 alias: barclays name: Barclays logos: normal: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays.svg pngUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays.png inverse: svgUrl: null pngUrl: null white: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays--white.svg pngUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays--white.png circle: svgUrl: >- https://dq8dwmysp7hk1.cloudfront.net/logos/barclays-mark.svg pngUrl: null altText: Barclays type: bank partner: false quotes: - rate: 1.12792426 fee: 0 dateCollected: '2019-10-22T14:00:04Z' sourceCountry: GB targetCountry: ES markup: 2.75592858 receivedAmount: 11279.24 sendAmount: null deliveryEstimation: duration: min: PT24H max: PT24H providerGivesEstimate: true isConsideredMidMarketRate: false headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/contacts: post: operationId: contactCreate summary: Create a contact from an identifier description: > 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. tags: - contact security: - ClientCredentialsToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 12345678 - name: isDirectIdentifierCreation in: query required: true description: Must be set to `true` for identifier-based contact creation. schema: type: boolean example: true - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: identifier: type: string description: >- A Wise profile's identifier. It can be a Wisetag, email or phone number. targetCurrency: type: string description: 3 character currency code. example: identifier: '@JonathanP' targetCurrency: EUR responses: '200': description: Contact created successfully. content: application/json: schema: type: object properties: contactId: type: string format: uuid description: Contact ID in the format of UUID. name: type: string description: Full name of the contact. example: contactId: 00000000-0000-0000-0000-000000000000 name: Jonathan Peters headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/currencies: get: operationId: currenciesGet summary: Get all currencies allowed for transfers description: > Returns all currencies available for creating transfers. Currency names are returned in English by default — pass an `Accept-Language` header to receive localized names. tags: - currencies security: - UserToken: [] - PersonalToken: [] parameters: - name: Accept-Language in: header required: false description: > Locale code for localizing currency names (e.g. `de`, `fr`, `ja`). Defaults to `en` (British English) if omitted or unsupported. See [Language Support](/guides/developer/language-support) for the full list of supported languages. schema: type: string example: en - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of currencies allowed for transfers. content: application/json: schema: type: array items: type: object properties: code: type: string description: Currency code (ISO 4217 Alphabetic Code). symbol: type: string description: The symbol of this currency. name: type: string description: Display name of this currency. countryKeywords: type: array items: type: string description: Keywords associated with this currency. supportsDecimals: type: boolean description: Whether this currency supports decimal values or not. example: - code: AUD symbol: A$ name: Australian dollar countryKeywords: - AUD - AU - Australia - aus supportsDecimals: true - code: JPY symbol: ¥ name: Japanese yen countryKeywords: - JPY - JP - Japan - jpn supportsDecimals: false headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/delivery-estimates/{transferId}: get: operationId: deliveryEstimateGet summary: Get the delivery estimate for a transfer description: > 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. tags: - delivery-estimate security: - UserToken: [] parameters: - name: transferId in: path required: true description: The ID of the transfer. schema: type: integer format: int64 example: 12345678 - name: timezone in: query required: false description: >- Timezone ID for the formatted text. Defaults to `UTC` if not provided. schema: type: string example: Asia/Singapore - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Delivery estimate for the transfer. content: application/json: schema: type: object properties: estimatedDeliveryDate: type: string format: date-time description: >- Estimated time when funds will arrive in the recipient's bank account. formattedEstimatedDeliveryDate: type: string description: >- A string to display to users for the estimated delivery date. example: estimatedDeliveryDate: 2018-01-10T12:15:00.000+0000 formattedEstimatedDeliveryDate: in seconds headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/direct-debit-accounts: post: operationId: directDebitAccountCreate summary: Create a direct debit account description: > Register a new external bank account for funding batch transfers via direct debit. tags: - direct-debit-account security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 12345678 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: currency: type: string description: >- Currency of the bank account. 3-character currency code — `USD` for ACH direct debits, `CAD` for EFT direct debits. example: USD type: type: string description: | Payment type for which the account is used. - `ACH` — US direct debit (USD) - `EFT` — CA direct debit (CAD) enum: - ACH - EFT example: ACH details: type: object description: Bank account details. properties: routingNumber: type: string description: >- A valid ABA routing number. For CAD direct debits, the routing number is a combination of an institution number + transit number. example: '000000000' accountNumber: type: string description: A valid bank account number. example: '0000000000' accountType: type: string description: | Bank account type. - `CHECKING` — Checking account (USD, CAD) - `SAVINGS` — Savings account (USD, CAD) enum: - CHECKING - SAVINGS example: CHECKING responses: '200': description: Direct debit account created successfully. content: application/json: schema: $ref: '#/components/schemas/DirectDebitAccount' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: directDebitAccountGet summary: Retrieve all direct debit accounts description: > Get a list of your direct debit accounts. Use the `type` and `currency` query parameters to filter accounts. tags: - direct-debit-account security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 12345678 - name: type in: query required: true description: | Payment type for which the account is used. - `ACH` — US direct debit (USD) - `EFT` — CA direct debit (CAD) schema: type: string enum: - ACH - EFT example: ACH - name: currency in: query required: true description: >- Currency of the bank account. 3-character currency code — `USD` for ACH direct debits, `CAD` for EFT direct debits. schema: type: string example: USD - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of direct debit accounts matching the filters. content: application/json: schema: type: array items: $ref: '#/components/schemas/DirectDebitAccount' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/dispute-form/flows/step/{scheme}/{reason}: post: operationId: disputeDynamicFlowStep summary: Dispute dynamic flow entry point description: > 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 guide, including example backend implementation and styling, see [Disputes via Dynamic Flow](/guides/product/issue-cards/card-disputes-dynamic-flow). tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 14547572 - name: scheme in: path required: true description: The network of the card that was used to make this transaction. schema: type: string enum: - MASTERCARD - VISA example: VISA - name: reason in: path required: true description: >- Dispute reason code supplied by the [dispute reasons endpoint](/api-reference/disputes/disputereasonsget). schema: type: string example: TROUBLE_WITH_GOODS_SERVICES - name: transactionId in: query required: true description: >- The ID of the transaction being disputed. Can be a comma-separated list of IDs if the reason code has the `supportsMultipleTransactions` flag. schema: type: string example: '6789' - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: email: type: string description: >- Email used to receive communications regarding the dispute from Wise (e.g. your support team's email). example: support@partner.com example: email: support@partner.com responses: '200': description: >- Returns information required to populate the form with the correct information. Note how the `action` field contains the URL and method to the next step. content: application/json: schema: type: object description: >- Dynamic Flow JSON object. Pass this to the Dynamic Flow framework to render the dispute form. example: key: TROUBLE_WITH_GOODS_SERVICES type: form title: There's a problem with the goods or service I ordered actions: [] schemas: [] layout: - type: decision options: - title: I never got the goods or service I ordered action: url: >- /v3/spend/profiles/12345/dispute-form/flows/visa/no-goods-or-services?transactionId=6789 method: GET disabled: false description: >- Choose this if the order was cancelled or never arrived - title: Something is wrong with the goods or service I ordered action: url: >- /v3/spend/profiles/12345/dispute-form/flows/visa/something-wrong-what-was-received?transactionId=6789 method: GET disabled: false - title: I think there might be an issue with the merchant action: url: >- /v3/spend/profiles/12345/dispute-form/flows/visa/scam?transactionId=6789 method: GET disabled: false description: >- Choose this if you haven't heard from the merchant, or have found scam reviews headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/dispute-form/reasons: get: operationId: disputeReasonsGet summary: Retrieve dispute reasons description: > 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. tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 14547572 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of dispute reasons. content: application/json: schema: type: array items: $ref: '#/components/schemas/DisputeReason' example: - code: ATM_DISPENSED_NO_FUNDS description: I didn't receive the money from the ATM or cash machine isFraud: false supportsMultipleTransactions: false tooltip: >- Choose this if the ATM did not dispense the money or gave you less than expected - code: WRONG_AMOUNT description: I was charged the wrong amount or currency isFraud: false supportsMultipleTransactions: false tooltip: >- Choose this if you were overcharged or the payment was in a different currency than you were expecting - code: TROUBLE_WITH_GOODS_SERVICES description: There's a problem with the goods or service I ordered isFraud: false supportsMultipleTransactions: false tooltip: >- Choose this if the goods or service never arrived, or if the product was defective or different from what you expected - code: MERCHANT_CHARGED_AGAIN description: I got an unexpected charge from a merchant isFraud: false supportsMultipleTransactions: false tooltip: >- Choose this for subscription charges, when you've paid twice for one purchase, or when you know the merchant from a past transaction but aren't sure why they charged you - code: NO_REFUND description: I haven't received the refund isFraud: false supportsMultipleTransactions: false tooltip: >- Choose this when you've been promised a refund and it hasn't arrived - code: UNAUTHORIZED description: >- I did not make, authorize, or participate in this transaction tooltip: >- Choose this if you don't know the merchant or have never purchased anything from them subOptions: - code: UNEXPECTEDLY_CHARGED_AGAIN description: A past merchant unexpectedly charged me again isFraud: false supportsMultipleTransactions: false - code: UNWANTED_SUBSCRIPTION description: >- I've been charged for a subscription without my permission isFraud: false supportsMultipleTransactions: false - code: CARD_POSSESSION description: I don't recognise a transaction isFraud: true supportsMultipleTransactions: true tooltip: >- Choose this if you had your card at the time of the transactions, or if you think your card details have been compromised - code: CARD_NO_POSSESSION description: My card was lost or stolen isFraud: true supportsMultipleTransactions: true tooltip: >- Choose this if you didn't have your card at the time of the transactions headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/dispute-form/flows/{scheme}/{reason}: post: operationId: disputeSubmit summary: Submit dispute description: > 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). tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 14547572 - name: scheme in: path required: true description: The network of the card that was used to make this transaction. schema: type: string enum: - MASTERCARD - VISA example: VISA - name: reason in: path required: true description: >- Dispute reason code supplied by the [dispute reasons endpoint](/api-reference/disputes/disputereasonsget). schema: type: string example: WRONG_AMOUNT - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: transaction: type: object description: Transaction details for the dispute. properties: transactionId: type: string description: ID of the transaction. example: '12345' email: type: string description: Email of the support team that Wise should reach out to. example: support@partner.com form: type: object description: > Form fields required to submit this dispute. The specific fields vary per reason code. See the [disputes via API guide](/guides/product/issue-cards/card-disputes-api#reason-examples) for per-reason field details. additionalProperties: true disclaimer: type: object description: Acknowledgement fields. properties: allAnswered: type: boolean description: >- Acknowledgment that all questions have been answered. Must be `true` or the request will be rejected. example: true filesUploaded: type: boolean description: >- Acknowledgment that all relevant files have been attached. Must be `true` or the request will be rejected. example: true files: type: object description: > Key-value pairs mapping file field names to file IDs obtained from the [file upload endpoint](/api-reference/disputes/disputefileupload). Available file fields vary per reason code. additionalProperties: type: string example: transaction: transactionId: '12345' email: support@partner.com form: charged: value: 50 currency: EUR expected: value: 5 currency: EUR agreedDetails: agreed: true agreedReason: some reason goods: something details: wrong amount dispute disclaimer: allAnswered: true filesUploaded: true responses: '200': description: > Dynamic Flow JSON response. If using the Dynamic Flow framework, pass this to the framework. If using the API directly, the response can be ignored. content: application/json: schema: type: object description: Dynamic Flow JSON object. example: key: final type: form title: Done! actions: - title: Continue exit: true $id: continue schemas: [] layout: - width: md components: - url: >- https://wise.com/web-art/assets/illustrations/email-success-large%402x.png type: image type: box - margin: lg align: center type: info markdown: >- Thanks for reporting this transaction. It's pre-authorised right now, but as soon as it becomes "spent" we'll begin our investigation. - type: button action: $ref: continue headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/spend/profiles/{profileId}/dispute-form/file: post: operationId: disputeFileUpload summary: Upload dispute file description: > 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. tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 14547572 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: multipart/form-data: schema: type: object properties: receipt: type: string format: binary description: The file to upload. responses: '200': description: A key-value pair mapping the file name to the assigned file ID. content: application/json: schema: type: object additionalProperties: type: string description: >- Object with the file field name as key and the assigned file ID as value. example: receipt: ab4f5d2 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/disputes: get: operationId: disputeList summary: List disputes description: | List disputes for a profile with optional filters. tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 16605997 - name: status in: query required: false description: Filter by dispute status. schema: type: string enum: - ACTIVE - CLOSED example: ACTIVE - name: transactionId in: query required: false description: Filter by card transaction ID. schema: type: integer format: int64 example: 2040 - name: pageSize in: query required: false description: >- The maximum number of disputes to return per page. Between 10 and 100, defaults to 10. schema: type: integer format: int32 minimum: 10 maximum: 100 default: 10 example: 10 - name: pageNumber in: query required: false description: The page number to retrieve. Must be at least 1, defaults to 1. schema: type: integer format: int32 minimum: 1 default: 1 example: 1 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Paginated list of disputes. content: application/json: schema: type: object properties: totalCount: type: integer description: Total number of disputes matching the filters. example: 2 disputes: type: array items: $ref: '#/components/schemas/Dispute' example: totalCount: 2 disputes: - id: 51e2dc60-9e4b-4ff5-b917-b90cc5e1ecfb transactionId: 2040 profileId: 16605997 reason: NEVER_ARRIVED status: ACTIVE subStatus: SUBMITTED statusMessage: Submitted createdAt: '2024-03-08T08:30:14.989Z' createdBy: '6097861' lastUpdatedAt: '2024-03-08T08:30:14.989Z' canWithdraw: true - id: 9c5ca0cb-00d6-41f7-8214-8cfdb11388a7 transactionId: 3405 profileId: 16605997 reason: CANCELLED_ORDER status: ACTIVE subStatus: SUBMITTED statusMessage: Submitted createdAt: '2024-03-27T02:24:16.878Z' createdBy: '6097861' lastUpdatedAt: '2024-03-27T02:24:16.878Z' canWithdraw: true headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/disputes/{disputeId}: get: operationId: disputeGet summary: Get dispute description: | Retrieve a dispute by its ID. tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 16605997 - name: disputeId in: path required: true description: The dispute ID. schema: type: string example: 51e2dc60-9e4b-4ff5-b917-b90cc5e1ecfb - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: The dispute. content: application/json: schema: $ref: '#/components/schemas/Dispute' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/disputes/{disputeId}/status: put: operationId: disputeWithdraw summary: Withdraw dispute description: > Withdraw a dispute by setting its status to `CLOSED`. You can only withdraw a dispute if `canWithdraw` is `true` on the dispute resource. tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 16605997 - name: disputeId in: path required: true description: The dispute ID. schema: type: string example: 51e2dc60-9e4b-4ff5-b917-b90cc5e1ecfb - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - status properties: status: type: string description: Must be set to `CLOSED`. enum: - CLOSED example: CLOSED example: status: CLOSED responses: '200': description: The updated dispute. content: application/json: schema: $ref: '#/components/schemas/Dispute' example: id: 51e2dc60-9e4b-4ff5-b917-b90cc5e1ecfb transactionId: 2040 profileId: 16605997 reason: NEVER_ARRIVED status: CLOSED subStatus: WITHDRAWN statusMessage: Withdrawn createdAt: '2024-03-08T08:30:14.989Z' createdBy: '6097861' lastUpdatedAt: '2024-03-27T13:12:28.390Z' canWithdraw: false headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/dispute-form/file: post: operationId: disputeFileUploadV3 summary: Upload dispute file (v3) deprecated: true description: > {% 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. tags: - disputes security: - UserToken: [] parameters: - name: profileId in: path required: true description: Your profile ID. schema: type: integer format: int64 example: 14547572 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: multipart/form-data: schema: type: object properties: receipt: type: string format: binary description: The file to upload. responses: '200': description: A key-value pair mapping the file name to the assigned file ID. content: application/json: schema: type: object additionalProperties: type: string description: >- Object with the file field name as key and the assigned file ID as value. example: receipt: ab4f5d2 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/facetec/public-key: get: operationId: facetecPublicKeyGet summary: Get FaceTec public key description: > Retrieve Wise's FaceTec public key to be used when [exporting 3D FaceMap](https://dev.facetec.com/api-guide#export-3d-facemap) from your FaceTec host to Wise. The exported FaceMap can be used to [Enrol FaceMap](/api-reference/user-security/usersecurityfacemapenrol). tags: - facetec security: - UserToken: [] responses: '200': description: Plain text containing the public key. content: text/plain: schema: type: string example: | -----BEGIN PUBLIC KEY----- Public Key Content -----END PUBLIC KEY----- headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/auth/jose/response/public-keys: get: operationId: joseResponsePublicKeysGet summary: Get Wise JOSE public key description: > Returns a public key issued by Wise. Depending on the scope requested, the key will be used for verifying HTTP responses signed by Wise or for for encrypting the payload prior to sending it to Wise. 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 Wise is unable to decrypt your request payload, call this API to issue a fresh key from Wise and reattempt the operation again. {% 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](/api-reference/oauth-token/oauthtokencreate) before performing this call. {% /admonition %} tags: - jose security: - ClientCredentialsToken: [] parameters: - name: version in: query required: false description: >- Fetch a specific public key version. If omitted the most recent public key is provided. schema: type: integer format: int32 - name: algorithm in: query required: true description: > Algorithm to be used for signature verification or payload encryption. This must match the algorithm used during request. - Signature verification (Scope: `PAYLOAD_SIGNING`): `ES256`, `ES384`, `ES512`, `PS256`, `PS384`, `PS512` - Payload encryption (Scope: `PAYLOAD_ENCRYPTION`): `RSA_OAEP_256` schema: type: string enum: - ES256 - ES384 - ES512 - PS256 - PS384 - PS512 - RSA_OAEP_256 example: ES512 - name: scope in: query required: true description: Scope of the key. Must be `PAYLOAD_SIGNING` or `PAYLOAD_ENCRYPTION`. schema: type: string enum: - PAYLOAD_SIGNING - PAYLOAD_ENCRYPTION example: PAYLOAD_SIGNING - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Public key object. content: application/json: schema: type: object properties: keyId: type: string format: UUID description: ID of the key in UUID format. version: type: integer format: int32 description: Version of the public key issued. keyMaterial: type: object properties: algorithm: type: string description: Algorithm to be used with the key. enum: - ES256 - ES384 - ES512 - PS256 - PS384 - PS512 - RSA_OAEP_256 keyMaterial: type: string description: Public key material. scope: type: string description: Scope of the key. enum: - PAYLOAD_SIGNING - PAYLOAD_ENCRYPTION example: version: 1 keyMaterial: algorithm: ES512 keyMaterial: >- MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBYAwVICxD0Paq7MOuO34omujHxSrQXZtiTQ/VMteqAeUfM4wE+vTSpbYCqb1pNhhcQpF+FJd2H8jB1H1zil7qLLcBw+yl4PrnLza1pmNLr+kqQVoVXVyVx/xxMK2WObLn8tHxXtW4k+bm1/ySF+0RQ265IZcw2i8YYX2FY59JkwE2Fac= scope: PAYLOAD_SIGNING headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/auth/jose/request/public-keys: post: operationId: joseRequestPublicKeysCreate summary: Add a new client public key description: > 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](/api-reference/oauth-token/oauthtokencreate) before performing this call. {% /admonition %} tags: - jose security: - ClientCredentialsToken: [] requestBody: required: true content: application/json: schema: type: object properties: keyId: type: string format: uuid description: Unique public key identifier in UUID format. validFrom: type: string description: >- The key is valid from this date. Format: `yyyy-MM-dd HH:mm:ss` (UTC). validTill: type: string description: >- The key is valid until this date. Format: `yyyy-MM-dd HH:mm:ss` (UTC). scope: type: string description: Scope of the payload operation. enum: - PAYLOAD_SIGNING - PAYLOAD_ENCRYPTION publicKeyMaterial: type: object properties: algorithm: type: string description: > Algorithm to be used for: - Signature verification (Scope: `PAYLOAD_SIGNING`): `ES256`, `ES384`, `ES512`, `PS256`, `PS384`, `PS512` - Payload encryption (Scope: `PAYLOAD_ENCRYPTION`): `RSA_OAEP_256` enum: - ES256 - ES384 - ES512 - PS256 - PS384 - PS512 - RSA_OAEP_256 keyMaterial: type: string description: >- Public key material in DER (Distinguished Encoding Rules) format and base64 encoded. example: keyId: e87da464-8e5e-4380-8f2d-4e4e04052672 scope: PAYLOAD_SIGNING validFrom: '2023-04-27 00:00:00' validTill: '2024-04-01 00:00:00' publicKeyMaterial: algorithm: ES512 keyMaterial: >- MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBYAwVICxD0Paq7MOuO34omujHxSrQXZtiTQ/VMteqAeUfM4wE+vTSpbYCqb1pNhhcQpF+FJd2H8jB1H1zil7qLLcBw+yl4PrnLza1pmNLr+kqQVoVXVyVx/xxMK2WObLn8tHxXtW4k+bm1/ySF+0RQ265IZcw2i8YYX2FY59JkwE2Fac= responses: '201': description: Public key created successfully. content: application/json: schema: type: object properties: clientId: type: - string - 'null' description: >- This field is currently not in use and will always return `null`. keyId: type: string format: uuid description: Unique public key identifier in UUID format. scope: type: string description: Scope of the payload operation. enum: - PAYLOAD_SIGNING - PAYLOAD_ENCRYPTION validFrom: type: string description: >- The key is valid from this date. Format: `yyyy-MM-dd HH:mm:ss` (UTC). validTill: type: string description: >- The key is valid until this date. Format: `yyyy-MM-dd HH:mm:ss` (UTC). publicKeyMaterial: type: object properties: algorithm: type: string description: >- Algorithm to be used for request signature verification or for response payload encryption. keyMaterial: type: string description: >- Public key material in DER (Distinguished Encoding Rules) format and base64 encoded. deactivationTimestamp: type: - string - 'null' description: >- This field is currently not in use and will always return `null`. example: clientId: null keyId: e87da464-8e5e-4380-8f2d-4e4e04052672 scope: PAYLOAD_SIGNING validFrom: '2023-04-27 00:00:00' validTill: '2024-04-01 00:00:00' publicKeyMaterial: algorithm: ES512 keyMaterial: >- MIGbMBAGByqGSM49AgEGBSuBBAAjA4GGAAQBYAwVICxD0Paq7MOuO34omujHxSrQXZtiTQ/VMteqAeUfM4wE+vTSpbYCqb1pNhhcQpF+FJd2H8jB1H1zil7qLLcBw+yl4PrnLza1pmNLr+kqQVoVXVyVx/xxMK2WObLn8tHxXtW4k+bm1/ySF+0RQ265IZcw2i8YYX2FY59JkwE2Fac= deactivationTimestamp: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/auth/jose/playground/jws: post: operationId: josePlaygroundJws summary: Playground JWS description: > 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. tags: - jose parameters: - name: Accept in: header required: true schema: type: string enum: - application/jose+json example: application/jose+json - name: x-tw-jose-method in: header required: true description: JOSE method identifier. schema: type: string enum: - jws example: jws - $ref: '#/components/parameters/X-External-Correlation-Id' security: - ClientCredentialsToken: [] x-codeSamples: - lang: bash label: cURL source: | curl -i -X POST \ https://api.wise-sandbox.com/v1/auth/jose/playground/jws \ -H 'Accept: application/jose+json' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/jose+json' \ -H 'x-tw-jose-method: jws' \ -d 'eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCIsInVybCI6Ii92MS9hdXRoL2pvc2UvcGxheWdyb3VuZC9qd3MifQ.eyJtZXNzYWdlIjoiVGhpcyBpcyBhbiBleGFtcGxlIGZyb20gZG9jcy53aXNlLmNvbSJ9.AS9QHdkWvUEn0LxQEMPRBzlceN78J-Le-Qm1XIkkSBpsGdc0WM0MZTIGFEAJEcWeUR2M-abtd5DRdar4hLzs9apPAQ-GT70SIDV6pX9-4UKfIfzJ4g305zCoHflTfn-ijvI7XrVR_yr7xO9GJo86bfBqAX_m5uuxyU7Jy9gM1epd8HcC' requestBody: required: true content: application/jose+json: schema: type: string description: > JWS-encoded string. The payload before signing should contain a `message` field with any text. Original payload: ```json {"message": "This is an example from docs.wise.com"} ``` Encoded (JWS): ``` eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCIsInVybCI6Ii92MS9hdXRoL2pvc2UvcGxheWdyb3VuZC9qd3MifQ.eyJtZXNzYWdlIjoiVGhpcyBpcyBhbiBleGFtcGxlIGZyb20gZG9jcy53aXNlLmNvbSJ9.AS9QHdkWvUEn0LxQEMPRBzlceN78J-Le-Qm1XIkkSBpsGdc0WM0MZTIGFEAJEcWeUR2M-abtd5DRdar4hLzs9apPAQ-GT70SIDV6pX9-4UKfIfzJ4g305zCoHflTfn-ijvI7XrVR_yr7xO9GJo86bfBqAX_m5uuxyU7Jy9gM1epd8HcC ``` example: >- eyJhbGciOiJFUzUxMiIsInR5cCI6IkpXVCIsInVybCI6Ii92MS9hdXRoL2pvc2UvcGxheWdyb3VuZC9qd3MifQ.eyJtZXNzYWdlIjoiVGhpcyBpcyBhbiBleGFtcGxlIGZyb20gZG9jcy53aXNlLmNvbSJ9.AS9QHdkWvUEn0LxQEMPRBzlceN78J-Le-Qm1XIkkSBpsGdc0WM0MZTIGFEAJEcWeUR2M-abtd5DRdar4hLzs9apPAQ-GT70SIDV6pX9-4UKfIfzJ4g305zCoHflTfn-ijvI7XrVR_yr7xO9GJo86bfBqAX_m5uuxyU7Jy9gM1epd8HcC responses: '200': description: Signed response. content: application/jose+json: schema: type: string description: > JWS-encoded string. When decoded, the response contains: - `message` — The original message prefixed with `jose-playground-response-`. Message length is limited to 100 characters. - `method` — Original HTTP request method name: `POST`. Example of decoded response: ```json { "message": "jose-playground-response-This is an example from docs.wise.com", "method": "POST" } ``` example: >- eyJ2ZXJzaW9uIjoxLCJhbGciOiJFUzUxMiJ9.eyJtZXNzYWdlIjoiam9zZS1wbGF5Z3JvdW5kLXJlc3BvbnNlLVRoaXMgaXMgYW4gZXhhbXBsZSBmcm9tIGRvY3Mud2lzZS5jb20iLCJtZXRob2QiOiJQT1NUIn0.APYfoUySW_dPdBBVST3tJdaCBCMQZm0UR6g0vBqxjjX4WWkOdt6h045EXZKMT1m0JEMI5b7KpN14Mib9BxS7VWpLAPwYhTU5pJcQrtiK4fwaBMTT_DwipZk6ASXVevrMK_Tn9YSSkKDsv6X9qyBsnIXKy304Ex5QIHKmSGQT6wNSJ7Ye02 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/auth/jose/playground/jwe: get: operationId: josePlaygroundJweGet summary: Playground JWE for GET requests description: | Send test HTTP GET requests and receive encrypted responses. tags: - jose parameters: - name: Accept in: header required: true schema: type: string enum: - application/jose+json example: application/jose+json - name: x-tw-jose-method in: header required: true description: JOSE method identifier. schema: type: string enum: - jwe example: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' security: - ClientCredentialsToken: [] responses: '200': description: Encrypted response. content: application/jose+json: schema: type: string description: > JWE-encoded string. When decrypted, the response contains: - `message` — The response message is always `jose-playground-response-`. - `method` — Original HTTP request method name: `GET`. Example of decrypted response: ```json { "message": "jose-playground-response-", "method": "GET" } ``` example: >- eyJraWQiOiI2ZGE0OTQ5NS0xNjMyLTQzY2QtOWEwMy1kZDMyNDYwM2VjZDciLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.UC5mC6XSGZZuQzUALpM2QfDWyi-lcl4Wv3v8-9L04BFmqYTyiQMO-YMxiwzOdVbF-L01CaFcr_iuoM36fKp01onJAtsrvuGcnrHeh23kMwZ5k29ycGTckE0YYLe-WV9WtXguudfFC3Hri9v4FTPEE1_BbkrHACVufuhw_xWUWgYAekfm7dnmTI_3SmtExWZ_P-Xn6rkGXhsJ0Kq9LB-F3mnuvz_iglvZsW76RdLV_I4es-TfTnQgVOGO-N38SSS4wCF1qw2TWOkpNAe9kyAg6a8tWw8ZkpOxJlmGdp4jLuG_GDWlmtDrv9ntgeCLDRiTp4SLYL2MGYdmNXigZI5xrg.P_h3CuIiKxEzndER.Zf0wahZEHQSMcb4olkeT1NNzh3Alj34XbXVdREiqQH9CKDa-GnKvh1lXXYuvTO99vtBmNRM.iTzGQ3FNRIybDT_lJcnaeQ03 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' post: operationId: josePlaygroundJwePost summary: Playground JWE for POST requests description: > 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. tags: - jose parameters: - name: Accept in: header required: true schema: type: string enum: - application/jose+json example: application/jose+json - name: x-tw-jose-method in: header required: true description: JOSE method identifier. schema: type: string enum: - jwe example: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' security: - ClientCredentialsToken: [] x-codeSamples: - lang: bash label: cURL source: | curl -i -X POST \ https://api.wise-sandbox.com/v1/auth/jose/playground/jwe \ -H 'Accept: application/jose+json' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/jose+json' \ -H 'x-tw-jose-method: jwe' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W_WPBDXclMryaywqAB-_yC1hUYukKmZxByhE9d1G8hClc2HpewkryILGJW4uVTUeRdo1oVWd68TPIqi7bqMGUsrT-3MI4ggVSjC1rf8Lf1xTZ8-GHjSPso8tFBXnydOKzggi6fnfk98BIW76Rnxkn6sW79LH5NgN1spTOoh8-tI3i_wbHdqJOxTReaUNMYZobm7wxedZcRxhsaSrVqx2qdELeqkfwgvB1DRbHTF_PTe4W0ibMbcJivHjiDf6oAV9vXgVhYb66rhB43pgdFDv4nY1mkQC45R5T6CBdzv80EdAVOj1G4bktHyJWaJzHVsGozpxsNj3bt1AopyvDO8tsw.WLOO5WH4ZpBPi-8B.0g3eUpQPvRIaTbgUi6sH0WejsJ1nLWDGnDKTktZrkquLQlCMmIguj0I5UCyqXEo.URtTniRvfGxrKRLK63trug' requestBody: required: true content: application/jose+json: schema: type: string description: > JWE-encoded string. The payload before encryption should contain a `message` field with any text. Original payload: ```json {"message": "This is an example from docs.wise.com"} ``` Encoded (JWE): ``` eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W_WPBDXclMryaywqAB-_yC1hUYukKmZxByhE9d1G8hClc2HpewkryILGJW4uVTUeRdo1oVWd68TPIqi7bqMGUsrT-3MI4ggVSjC1rf8Lf1xTZ8-GHjSPso8tFBXnydOKzggi6fnfk98BIW76Rnxkn6sW79LH5NgN1spTOoh8-tI3i_wbHdqJOxTReaUNMYZobm7wxedZcRxhsaSrVqx2qdELeqkfwgvB1DRbHTF_PTe4W0ibMbcJivHjiDf6oAV9vXgVhYb66rhB43pgdFDv4nY1mkQC45R5T6CBdzv80EdAVOj1G4bktHyJWaJzHVsGozpxsNj3bt1AopyvDO8tsw.WLOO5WH4ZpBPi-8B.0g3eUpQPvRIaTbgUi6sH0WejsJ1nLWDGnDKTktZrkquLQlCMmIguj0I5UCyqXEo.URtTniRvfGxrKRLK63trug ``` example: >- eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W_WPBDXclMryaywqAB-_yC1hUYukKmZxByhE9d1G8hClc2HpewkryILGJW4uVTUeRdo1oVWd68TPIqi7bqMGUsrT-3MI4ggVSjC1rf8Lf1xTZ8-GHjSPso8tFBXnydOKzggi6fnfk98BIW76Rnxkn6sW79LH5NgN1spTOoh8-tI3i_wbHdqJOxTReaUNMYZobm7wxedZcRxhsaSrVqx2qdELeqkfwgvB1DRbHTF_PTe4W0ibMbcJivHjiDf6oAV9vXgVhYb66rhB43pgdFDv4nY1mkQC45R5T6CBdzv80EdAVOj1G4bktHyJWaJzHVsGozpxsNj3bt1AopyvDO8tsw.WLOO5WH4ZpBPi-8B.0g3eUpQPvRIaTbgUi6sH0WejsJ1nLWDGnDKTktZrkquLQlCMmIguj0I5UCyqXEo.URtTniRvfGxrKRLK63trug responses: '200': description: Encrypted response. content: application/jose+json: schema: type: string description: > JWE-encoded string. When decrypted, the response contains: - `message` — The original message prefixed with `jose-playground-response-`. Message length is limited to 100 characters. - `method` — Original HTTP request method name: `POST`. Example of decrypted response: ```json { "message": "jose-playground-response-This is an example from docs.wise.com", "method": "POST" } ``` example: >- eyJraWQiOiI2ZGE0OTQ5NS0xNjMyLTQzY2QtOWEwMy1kZDMyNDYwM2VjZDciLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.qwMqgFXRI84THQdCHhxNe5yvKOuKp2rAMH62xQ1OioPatnLfxqPHJUX0as13B3g3JKaqGgF0qMi7r3QbJ_cXNFBIg1yenCwWv4192J73-kEkCSyS-FflDCNfih1z1mm95ftAE7FhHJVG5tcSm_B0-bPU3SbjB3SDhR3QlLX5o_sQmYkQay8PKSssyBS5tCjuKdz-9QNvZtNADPujKrJGe5hE5r7ShcNwVUS2vpMXANiQTzZnQ2L3j_m07Rru-PgMxHTD2uR621B87YfTHonWDJe4XogA_pMWD_hzHVQKT7Il--2YOtv8PTnLge-uVvRTgqUiYUdvq85nPyDKsOQMnQ.zprknKK9W4iAX7YA.LJWA6oRcYj0LruM3GLPtZ0CtVNpI0Zs9WFrARDd464kKxSlu15LBiFFCFwOHbeKoRudfp8Br7MfRIlaTLHxPEE1xoBB8jZN8fakAcApU.OlMATtfF9XMtYJtTsGuBGQ02 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/auth/jose/playground/jwe-direct-encryption: post: operationId: josePlaygroundJweDirectEncryption summary: Playground JWE for direct encryption description: > 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. tags: - jose parameters: - name: Accept in: header required: true schema: type: string enum: - application/jose+json example: application/jose+json - name: x-tw-jose-method in: header required: true description: JOSE method identifier. schema: type: string enum: - jwe example: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' security: - ClientCredentialsToken: [] x-codeSamples: - lang: bash label: cURL source: | curl -i -X POST \ https://api.wise-sandbox.com/v1/auth/jose/playground/jwe-direct-encryption \ -H 'Accept: application/jose+json' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/jose+json' \ -H 'x-tw-jose-method: jwe' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.rVqOhX92u637hqwrw96rqA48e7NhMZVeWvUZwA4OAwOa_sBVcpXecd6qivPfZ-CuhRaD4gNKUlUJnTedBwOh5hcDZELRWThtwNiTZKaDS_ZNDjJf1r0VQPj65nT2ikfPAP-S6cYCy6JbWXivf7Jwq6lus-QydmxoLlVRvAuROFe-HzlH0-JhlwOdhPwbwl1AGx64qEir7oOn5VezJvpx3sscipm3w30mfoFc7pLlscMijMNFUwngXCLmgpno1rC_ZDzRcEycVbwvgKW75jO25UyEJif25MdE0UJUx4IT6MDviHqtBXO4OQpwhd_W6jVk-PlZ1WkZyOZqpi8HLKGo8Q.eFHqPV-mcBC82Ga2.W9o2BT7Q-vEUA2u3n4gaSdfQY_4svVj0-jwjcXmlBraZEKmtTW_A1ygvr8b9iHfS9fkxL8H_6S_oEcqzFqTKmNTzwe2V0cRY-kvzsKI.lO2gETmo2WocPZoTpU-pkQ' requestBody: required: true content: application/jose+json: schema: type: string description: > JWE-encoded string. The payload before encryption should contain a `message` field with any text. Original payload: ```json {"message": "This is an example from docs.wise.com"} ``` Encoded (JWE): ``` eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.rVqOhX92u637hqwrw96rqA48e7NhMZVeWvUZwA4OAwOa_sBVcpXecd6qivPfZ-CuhRaD4gNKUlUJnTedBwOh5hcDZELRWThtwNiTZKaDS_ZNDjJf1r0VQPj65nT2ikfPAP-S6cYCy6JbWXivf7Jwq6lus-QydmxoLlVRvAuROFe-HzlH0-JhlwOdhPwbwl1AGx64qEir7oOn5VezJvpx3sscipm3w30mfoFc7pLlscMijMNFUwngXCLmgpno1rC_ZDzRcEycVbwvgKW75jO25UyEJif25MdE0UJUx4IT6MDviHqtBXO4OQpwhd_W6jVk-PlZ1WkZyOZqpi8HLKGo8Q.eFHqPV-mcBC82Ga2.W9o2BT7Q-vEUA2u3n4gaSdfQY_4svVj0-jwjcXmlBraZEKmtTW_A1ygvr8b9iHfS9fkxL8H_6S_oEcqzFqTKmNTzwe2V0cRY-kvzsKI.lO2gETmo2WocPZoTpU-pkQ ``` example: >- eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.rVqOhX92u637hqwrw96rqA48e7NhMZVeWvUZwA4OAwOa_sBVcpXecd6qivPfZ-CuhRaD4gNKUlUJnTedBwOh5hcDZELRWThtwNiTZKaDS_ZNDjJf1r0VQPj65nT2ikfPAP-S6cYCy6JbWXivf7Jwq6lus-QydmxoLlVRvAuROFe-HzlH0-JhlwOdhPwbwl1AGx64qEir7oOn5VezJvpx3sscipm3w30mfoFc7pLlscMijMNFUwngXCLmgpno1rC_ZDzRcEycVbwvgKW75jO25UyEJif25MdE0UJUx4IT6MDviHqtBXO4OQpwhd_W6jVk-PlZ1WkZyOZqpi8HLKGo8Q.eFHqPV-mcBC82Ga2.W9o2BT7Q-vEUA2u3n4gaSdfQY_4svVj0-jwjcXmlBraZEKmtTW_A1ygvr8b9iHfS9fkxL8H_6S_oEcqzFqTKmNTzwe2V0cRY-kvzsKI.lO2gETmo2WocPZoTpU-pkQ responses: '200': description: Encrypted response using direct encryption. content: application/jose+json: schema: type: string description: > JWE-encoded string using direct encryption. The response is encrypted with the original content encryption key from the request. Response JOSE headers: ```json {"enc": "A256GCM", "alg": "dir"} ``` When decrypted, the response contains: - `message` — The original message prefixed with `jose-playground-response-`. Message length is limited to 100 characters. - `method` — Original HTTP request method name: `POST`. Example of decrypted response: ```json { "message": "jose-playground-response-This is an example from docs.wise.com", "method": "POST" } ``` example: >- eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiZGlyIn0..gTnxA4uYrCTWVNp1.jQ3dDidM2Z8RuYkgQt1ydJ6xYy5uG3CH72-pioHlZPqucxPWeN1pWwmceQKgpGulJmw3nYLRNkgCa9yQHMofpFIlV5HQJS6mQDxZP4G2kj3bFKvByckRYQQ3v3W7TkjfVL4NAVlrDqxx3G29-qblRwbyneMP.mVY_uctEfEAleVVbHjcqdA04 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/auth/jose/playground/jwsjwe: post: operationId: josePlaygroundJwsJwe summary: Playground JWS+JWE description: > 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) {% admonition type="warning" name="" %} Currently, the Wise API returns a generic 500 Internal Server Error for decryption failures across endpoints using JWE and JWS+JWE. For example, an invalid key can cause a decryption failure. Our team is currently planning improvements for these types of error messages to make them more specific and clear. Thank you for your patience. {% /admonition %} tags: - jose parameters: - name: Accept in: header required: true schema: type: string enum: - application/jose+json example: application/jose+json - name: x-tw-jose-method in: header required: true description: JOSE method identifier. schema: type: string enum: - jws+jwe example: jws+jwe - $ref: '#/components/parameters/X-External-Correlation-Id' security: - ClientCredentialsToken: [] x-codeSamples: - lang: bash label: cURL source: | curl -i -X POST \ https://api.wise-sandbox.com/v1/auth/jose/playground/jwsjwe \ -H 'Accept: application/jose+json' \ -H 'Authorization: Bearer ' \ -H 'Content-Type: application/jose+json' \ -H 'x-tw-jose-method: jws+jwe' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcxWwgtjEPkOnLdVNyH9ncZi5Y9xQbjD4sYJn8vEQmxKHDw5s14sWhdexSNAPTVMSyzwJaA-LRL0tZTEuQ.ohD4LLjImiKOV4Tu.Rgp9mc2JD6m9Zm5htSqrejwWYy0_hIylYdLD39ZCR-VnQ2VX-Tot8kKGeNncnv7hJ_ApANWiJpKJbiM.5hNt-uaxuOkOraGGZSmsig' requestBody: required: true content: application/jose+json: schema: type: string description: > JWE-encoded string containing a signed JWS. The payload before signing and encryption should contain a `message` field with any text. Original payload: ```json {"message": "This is an example from docs.wise.com"} ``` Encoded (JWS+JWE): ``` eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcxWwgtjEPkOnLdVNyH9ncZi5Y9xQbjD4sYJn8vEQmxKHDw5s14sWhdexSNAPTVMSyzwJaA-LRL0tZTEuQ.ohD4LLjImiKOV4Tu.Rgp9mc2JD6m9Zm5htSqrejwWYy0_hIylYdLD39ZCR-VnQ2VX-Tot8kKGeNncnv7hJ_ApANWiJpKJbiM.5hNt-uaxuOkOraGGZSmsig ``` example: >- eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcxWwgtjEPkOnLdVNyH9ncZi5Y9xQbjD4sYJn8vEQmxKHDw5s14sWhdexSNAPTVMSyzwJaA-LRL0tZTEuQ.ohD4LLjImiKOV4Tu.Rgp9mc2JD6m9Zm5htSqrejwWYy0_hIylYdLD39ZCR-VnQ2VX-Tot8kKGeNncnv7hJ_ApANWiJpKJbiM.5hNt-uaxuOkOraGGZSmsig responses: '200': description: Signed and encrypted response. content: application/jose+json: schema: type: string description: > JWE-encoded string containing a signed JWS. After decryption (JWE) and signature verification (JWS), the response contains: - `message` — The original message prefixed with `jose-playground-response-`. Message length is limited to 100 characters. - `method` — Original HTTP request method name: `POST`. Example of decrypted and decoded response: ```json { "message": "jose-playground-response-This is an example from docs.wise.com", "method": "POST" } ``` example: >- eyJraWQiOiJiMzc0ODE1MC0xNGQ0LTRlMDAtYjM5NC03YWUwYzkzYmUyNDUiLCJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.VGhpcyBpcyB0aGUgZW5jcnlwdGVkIENFSw.aXZfdmFsdWU.ZW5jcnlwdGVkX3BheWxvYWQ.YXV0aF90YWc headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad Request content: application/json: examples: jwsError: summary: Unable to verify request signature value: error: jws_error error_description: Unable to verify the request signature headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' '500': description: Internal Server Error content: application/json: examples: unexpectedError: summary: Unexpected server error value: message: An unexpected error occurred request_id: c29beb2374156c390c06fb583e99c999 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' /v1/profiles/{profileId}/kyc-reviews: post: operationId: kycReviewCreate summary: Create a KYC Review description: | Creates a KYC Review for a specific customer action. tags: - kyc-review security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - type properties: type: type: string description: > Type of the underlying action or process this KYC Review is for. Usually a reference to which product this KYC Review is for (like `QUOTE` or `TRANSFER`) or a reference to a KYC process on the profile that isn't related to a specific product (like `REFRESH_CYCLE` or `REPAPERING`). Following types are available when creating a KYC Review using this endpoint: - `QUOTE` - `PROACTIVE_SEND_MONEY` - `CARD` enum: - QUOTE - PROACTIVE_SEND_MONEY - CARD example: QUOTE triggerData: type: object description: > Object containing data of the underlying product object that triggered the KYC Review. properties: id: type: string format: uuid description: >- ID of the underlying product object. For example, if type is `QUOTE` then this would be the quote ID. This ID might be null when referencing an ID isn't meaningful. As an example, there's only ever one active refresh cycle per profile so referencing by ID isn't useful. example: ba83a43a-f623-46f0-956d-196c13e2ab01 responses: '202': description: KYC Review successfully created. content: application/json: schema: $ref: '#/components/schemas/kyc-review' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid request (e.g. unsupported `type`, null `type`). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: User is not authorised to access the resource. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: >- Underlying action with provided ID is not found (e.g. quote not found). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: kycReviewList summary: Get all KYC Reviews for a profile description: | Retrieves a list of all active KYC Reviews for a given profile. tags: - kyc-review security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: pageNumber in: query required: false description: Page number. Default value is `1`. schema: type: integer default: 1 - name: pageSize in: query required: false description: Desired number of items per page. Max `100`, default `100`. schema: type: integer default: 100 maximum: 100 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: >- Returns a list of KYC Review objects for the profile. Returns an empty list if no KYC Review exists for the profile. content: application/json: schema: type: array items: $ref: '#/components/schemas/kyc-review' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: User is not authorised to access the resource. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/kyc-reviews/{kycReviewId}: get: operationId: kycReviewGetV1 summary: Get KYC Review by ID (V1) deprecated: true description: > {% 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. tags: - kyc-review security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: kycReviewId in: path required: true description: The KYC Review ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Returns the KYC Review object. content: application/json: schema: $ref: '#/components/schemas/kyc-review' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: User is not authorised to access the resource. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: KYC Review not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' patch: operationId: kycReviewRedirectUrlUpdate summary: Update KYC Review to get a Hosted KYC link description: > 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. 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`. tags: - kyc-review security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: kycReviewId in: path required: true description: The KYC Review ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - redirectUrl properties: redirectUrl: type: string description: >- URL where the user will be redirected at the end of the flow. Can contain query params and path fragments. It has to be a valid URL as per [RFC 2396](https://www.ietf.org/rfc/rfc2396.txt). example: https://example.com responses: '200': description: Returns the updated KYC Review object. content: application/json: schema: $ref: '#/components/schemas/kyc-review' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid request (e.g. not a valid URI). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: User is not authorised to access the resource. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: KYC Review not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/kyc-reviews/{kycReviewId}: get: operationId: kycReviewGet summary: Get KYC Review by ID description: | Retrieves a single KYC Review by ID for a profile. tags: - kyc-review security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: kycReviewId in: path required: true description: The KYC Review ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Returns the KYC Review object including the `requirements` field. content: application/json: schema: $ref: '#/components/schemas/kyc-review' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: User is not authorised to access the resource. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: KYC Review not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/kyc-requirements/{requirementKey}: post: operationId: kycReviewRequirementSubmit summary: Submit a KYC Requirement description: > 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. tags: - kyc-review security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: requirementKey in: path required: true description: > The KYC requirement type to submit. See the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for details on each type. schema: type: string enum: - ACCOUNT_INTENT - ACCOUNT_PURPOSE - ANNUAL_VOLUME - BUSINESS_ANNUAL_INCOME - BUSINESS_AUTHORISATION_ID - BUSINESS_AUTHORISATION_LETTER - BUSINESS_DIRECTORS_CHECK - BUSINESS_MONTHLY_VOLUME - BUSINESS_REGISTRATION_DOCS - BUSINESS_SHAREHOLDERS_CHECK - BUSINESS_SOURCE_OF_WEALTH - BUSINESS_SOURCE_OF_WEALTH_INFO - BUSINESS_SOURCE_OF_WEALTH_PROOF - BUSINESS_ULTIMATE_BENEFICIAL_OWNER_ID - BUSINESS_USE_CASE - ID_DOCUMENT - INCOME - INDIA_TRANSFER_PURPOSE - PROOF_OF_TRADING_ADDRESS - SOURCE_OF_FUNDS - SOURCE_OF_WEALTH - SOURCE_OF_WEALTH_INFO - SOURCE_OF_WEALTH_PROOF - TAX_RESIDENCY - USE_CASE_COUNTRIES - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: multipart/form-data: schema: type: object required: - submissionData properties: submissionData: type: string format: application/json description: > A JSON string containing the following fields: - `data` — an object whose fields vary by requirement type. Some requirement types do not require a `data` field. - `version` — the submission version, currently `"V1"`. - `kycReviewId` — the ID of the KYC Review this submission belongs to. For example, the JSON payload would look like below, but it should be included as a string value in the multipart form field: ```json { "data": { "accountPurpose": "SENDING_MONEY_TO_FRIENDS_OR_FAMILY" }, "version": "V1", "kycReviewId": "93a903ea-636c-4c86-a25c-cf6d2bd00e81" } ``` See the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for the `data` structure and accepted values for each requirement type. files: type: array items: type: string format: binary description: > One or more files to upload. Required for certain requirement types. There are 3 accepted types for documents, they must be provided with the below content-type/Mime-type and have a matching file extension. ContentType/MimeType & file extension: - `image/png` & `.png` - `image/jpeg` & (`.jpg` or `jpeg`) - `application/pdf` & `.pdf` See the [KYC requirement types](/guides/product/kyc/wise-kyc/kyc-requirement-types) guide for which types require files. example: submissionData: >- {"data":{"accountPurpose":"SENDING_MONEY_TO_FRIENDS_OR_FAMILY"},"version":"V1","kycReviewId":"93a903ea-636c-4c86-a25c-cf6d2bd00e81"} x-codeSamples: - lang: bash label: cURL source: | curl -X POST \ 'https://api.wise-sandbox.com/v2/profiles/{profileId}/kyc-requirements/{requirementKey}' \ -H 'Authorization: Bearer ' \ -F 'submissionData={"data":{"accountPurpose":"SENDING_MONEY_TO_FRIENDS_OR_FAMILY"},"version":"V1","kycReviewId":"93a903ea-636c-4c86-a25c-cf6d2bd00e81"};type=application/json' \ -F 'files=@""' responses: '202': description: KYC requirement successfully submitted. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: | Invalid request. Common error scenarios: - No `submissionData` provided - No `kycReviewId` provided in submission data - No `data` provided in submission data - Invalid field values - Missing required files content: application/json: schema: type: object properties: type: type: string example: /errors/types/validation title: type: string example: Validation Error status: type: integer example: 400 instance: type: string detail: type: string errors: type: array items: type: object properties: code: type: string ref: type: string detail: type: string attributes: type: object examples: no-submission-data: summary: No submissionData provided value: type: /errors/types/validation title: Validation Error status: 400 instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT errors: - code: invalid_value ref: submissionData detail: submissionData must not be empty no-kyc-review-id: summary: No kycReviewId provided value: type: /errors/types/validation title: Validation Error status: 400 instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT errors: - code: invalid_value ref: submissionData.kycReviewId detail: kycReviewId must not be empty no-data: summary: No data provided value: type: /errors/types/validation title: Validation Error status: 400 detail: No files or submissionData is submitted instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT errors: [] invalid-field-value: summary: Invalid field value value: type: /errors/types/validation title: Validation Error status: 400 instance: /v2/profiles/{profileId}/kyc-requirements/ACCOUNT_INTENT errors: - code: invalid_value ref: accountPurpose detail: 'Invalid accountPurpose submitted: invalid' attributes: acceptedValues: - Consult API documentation negative-amount: summary: Negative amount provided value: type: /errors/types/validation title: Validation Error status: 400 detail: Amount must be greater than zero. instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_ANNUAL_INCOME errors: [] invalid-currency: summary: Invalid currency provided value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_ANNUAL_INCOME errors: - code: invalid_request ref: submissionData detail: submitted data is invalid attributes: null no-files: summary: No files provided value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_AUTHORISATION_ID errors: - code: missing_value ref: files detail: No file has been provided mismatching-filenames: summary: Mismatching fileNames provided value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_AUTHORISATION_ID errors: - code: invalid_value ref: files detail: File - filenames mismatch attributes: acceptedValues: - xx.png missing-front-filename: summary: Multiple files provided without frontFileName field value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_AUTHORISATION_ID errors: - code: missing_value ref: frontSideFilename detail: No front side file name is provided empty-source-of-wealth-list: summary: Empty sourceOfWealthList provided value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH errors: - code: invalid_value ref: sourceOfWealthList detail: No business source of wealth provided attributes: acceptedValues: - REVENUE - PERSONAL_FUNDING - BUSINESS_LOAN - FUNDING_AND_SHAREHOLDER_INVESTMENTS - INVESTMENT_INCOME - DONATIONS - GRANTS - OTHER - LEGAL missing-wealth-description: summary: No description when sourceOfWealthList is OTHER value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH errors: - code: invalid_value ref: sourceOfWealthList detail: Missing business source of wealth description attributes: acceptedValues: - REVENUE - PERSONAL_FUNDING - BUSINESS_LOAN - FUNDING_AND_SHAREHOLDER_INVESTMENTS - INVESTMENT_INCOME - DONATIONS - GRANTS - OTHER - LEGAL wealth-description-too-short: summary: Short description when sourceOfWealthList is OTHER value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH errors: - code: invalid_value ref: sourceOfWealthList detail: Source of wealth description too short attributes: acceptedValues: - REVENUE - PERSONAL_FUNDING - BUSINESS_LOAN - FUNDING_AND_SHAREHOLDER_INVESTMENTS - INVESTMENT_INCOME - DONATIONS - GRANTS - OTHER - LEGAL india-transfer-purpose-non-inr-from-currency: summary: India transfer purpose submitted for non-INR currency value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: invalid_value ref: requirementKey detail: >- Transfer which triggered KycReview is not from INR currency so submission of this requirement is not permitted india-transfer-purpose-not-accepted-to-currency: summary: India transfer purpose submitted to not accepted currency value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: invalid_value ref: requirementKey detail: >- Transfer which triggered KycReview does not have an accepted target currency so submission of this requirement is not permitted india-transfer-purpose-invalid-code: summary: India transfer purpose invalid code value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: invalid_value ref: code detail: The code provided is not valid india-transfer-purpose-not-required: summary: India transfer purpose not required value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: invalid_value ref: requirementKey detail: >- INDIA_TRANSFER_PURPOSE is not required for the KycReview india-transfer-purpose-additionaldocumentfilename-not-supplied: summary: additionalDocumentFileName missing or empty value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: missing_value ref: additionalDocumentFileName detail: additionalDocumentFileName cannot be null or empty india-transfer-purpose-educationpaidwithloan-not-supplied: summary: educationPaidWithLoan missing value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: missing_value ref: educationPaidWithLoan detail: educationPaidWithLoan cannot be null india-transfer-purpose-educationpaidwithloan-not-required: summary: educationPaidWithLoan not required value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: invalid_value ref: educationPaidWithLoan detail: >- educationPaidWithLoan is only valid for OVERSEAS_EDUCATION & EDUCATION_EXPENSES india-transfer-purpose-loandocumentfilename-not-supplied: summary: loanDocumentFileName missing value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: missing_value ref: loanDocumentFileName detail: >- loanDocumentFileName must be provided if the code is OVERSEAS_EDUCATION or EDUCATION_EXPENSES and educationPaidWithLoan is true india-transfer-purpose-passportfilename-not-supplied: summary: passportFileName missing or empty value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: missing_value ref: passportFileName detail: passportFileName cannot be null or empty india-transfer-purpose-tcstaxapplies-not-supplied: summary: tcsTaxApplies missing value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/INDIA_TRANSFER_PURPOSE errors: - code: missing_value ref: tcsTaxApplies detail: tcsTaxApplies cannot be null invalid-wealth-info-data: summary: Invalid sourceOfWealthList submission data value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH_INFO errors: - code: invalid_value ref: sourceOfWealthList detail: Invalid submission data provided attributes: acceptedValues: - REVENUE - PERSONAL_FUNDING - BUSINESS_LOAN - FUNDING_AND_SHAREHOLDER_INVESTMENTS - INVESTMENT_INCOME - DONATIONS - GRANTS - OTHER - LEGAL invalid-source-of-wealth-type: summary: Invalid sourceOfWealthType provided value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH_PROOF errors: - code: invalid_value ref: sourceOfWealthType detail: Invalid Source of Wealth type attributes: acceptedValues: - REVENUE - PERSONAL_FUNDING - BUSINESS_LOAN - FUNDING_AND_SHAREHOLDER_INVESTMENTS - INVESTMENT_INCOME - DONATIONS - GRANTS - OTHER - LEGAL invalid-document-type: summary: Invalid documentType provided value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_SOURCE_OF_WEALTH_PROOF errors: - code: invalid_value ref: documentType detail: Invalid Document Type attributes: acceptedValues: - PAYSLIP - INVOICES - CONTRACTS - TAX_DOCUMENTS - AUDITED_FINANCIAL_STATEMENTS - E_COMMERCE_STATEMENTS - PERSONAL_INVESTMENT - PERSONAL_LOAN_AGREEMENT - PERSONAL_TAX_DECLARATION - LOAN_AGREEMENT - EQUITY_AGREEMENT - SUBSCRIPTION_AGREEMENT - SAVINGS_STATEMENT - ASSET_SALE_AGREEMENT - SHARE_SALE_CERTIFICATE - DONATION_RECEIPTS - GRANT_APPROVAL_LETTER - WRITTEN_CONFIRMATION - BANK_STATEMENT shareholder-file-mismatch: summary: File not matching fileName for shareholder value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_ULTIMATE_BENEFICIAL_OWNER_ID errors: - code: invalid_value ref: file detail: >- No file was provided with a name that matches {fileName} for shareholderId: {shareHolderId} attributes: null shareholder-not-found: summary: Shareholder does not exist value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_ULTIMATE_BENEFICIAL_OWNER_ID errors: - code: invalid_value ref: shareholderId detail: Shareholder does not exist attributes: null shareholder-document-type-mismatch: summary: DocumentType not valid for shareholder value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_ULTIMATE_BENEFICIAL_OWNER_ID errors: - code: invalid_value ref: documentType detail: >- DocumentType cannot be associated with shareholder: {shareHolderId} attributes: acceptedValues: - NATIONAL_ID - DRIVING_LICENSE - PASSPORT empty-required-array: summary: Required array field empty value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_USE_CASE errors: - code: parameter_missing ref: useCases detail: No value provided attributes: null invalid-array-values: summary: Invalid values in array field value: type: /errors/types/validation title: Validation Error status: 400 instance: >- /v2/profiles/{profileId}/kyc-requirements/BUSINESS_USE_CASE errors: - code: invalid_value ref: useCases detail: 'Invalid useCases are submitted: [invalid]' attributes: acceptedValues: - Consult API documentation file-name-not-found: summary: No file matching specified fileName value: type: /errors/types/validation title: Validation Error status: 400 instance: /v2/profiles/{profileId}/kyc-requirements/ID_DOCUMENT errors: - code: invalid_request ref: files detail: >- No file was provided with the specified fileName: xxx.png attributes: null invalid-issuing-country: summary: Invalid issuingCountry provided value: type: /errors/types/validation title: Validation Error status: 400 instance: /v2/profiles/{profileId}/kyc-requirements/ID_DOCUMENT errors: - code: invalid_value ref: issuingCountry detail: Invalid issuingCountry provided attributes: acceptedValues: - Consult API documentation golden-visa-declaration-required: summary: Golden visa declaration required value: type: /errors/types/validation title: Validation Error status: 400 instance: /v2/profiles/{profileId}/kyc-requirements/TAX_RESIDENCY errors: - code: invalid_request ref: goldenVisaDeclaration detail: >- Golden visa declaration is required when all declared countries are within golden visa jurisdictions. golden-visa-values-not-true: summary: Golden visa declaration values must be true value: type: /errors/types/validation title: Validation Error status: 400 instance: /v2/profiles/{profileId}/kyc-requirements/TAX_RESIDENCY errors: - code: invalid_request ref: goldenVisaDeclaration detail: >- All values in the golden visa declaration must be set to true. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: User is not authorised to access the resource. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: KYC Review or provided requirement key not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/borderless-accounts-configuration/profiles/{profileId}/available-currencies: get: operationId: mcaAvailableCurrenciesGet summary: Retrieve available currencies description: > 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. tags: - multi-currency-account security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of currencies available for balance accounts. content: application/json: schema: type: array description: List of currency codes. items: type: string description: 3-letter currency code (e.g. EUR, GBP, USD). example: - EUR - GBP - USD headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/borderless-accounts-configuration/profiles/{profileId}/payin-currencies: get: operationId: mcaPayinCurrenciesGet summary: Retrieve payin currencies description: > 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. tags: - multi-currency-account security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of currencies available for payin with bank account details. content: application/json: schema: type: array description: List of currency codes. items: type: string description: 3-letter currency code (e.g. EUR, GBP, USD). example: - EUR - GBP - USD headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/profiles/{profileId}/multi-currency-account: get: operationId: mcaGet summary: Retrieve multi currency account for a profile description: > 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. tags: - multi-currency-account security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Multi currency account object. content: application/json: schema: type: object properties: id: type: integer format: int64 description: Multi currency account ID. example: 1 profileId: type: integer format: int64 description: Profile ID the multi currency account is attributed to. example: 33333333 recipientId: type: integer format: int64 description: >- Recipient ID of the multi currency account, to be used for transfer recipient. example: 12345678 creationTime: type: string format: date-time description: Datetime when multi currency account was created. example: '2020-05-20T14:43:16.658Z' modificationTime: type: string format: date-time description: Datetime when multi currency account was last modified. example: '2020-05-20T14:43:16.658Z' active: type: boolean description: Whether multi currency account is active or not. example: true eligible: type: boolean description: Whether multi currency account is eligible or not. example: true headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/multi-currency-account/eligibility: get: operationId: mcaEligibilityGet summary: Retrieve multi currency account eligibility description: > 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` tags: - multi-currency-account security: - UserToken: [] parameters: - name: profileId in: query required: false description: Profile ID to check eligibility for. schema: type: integer format: int64 - name: country in: query required: false description: 2-letter ISO 3166 country code to check eligibility for. schema: type: string example: FR - name: state in: query required: false description: 2-letter state/province code. Required when `country` is `US`. schema: type: string example: CA - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Eligibility result. content: application/json: schema: type: object properties: eligible: type: boolean description: >- Whether the profile is eligible for a multi currency account. example: true eligibilityCode: type: string description: Eligibility status code. enum: - eligible - invalid.profile.type - invalid.country - invalid.state example: eligible accountType: type: string description: Account type available. enum: - FULL - RECEIVE_ONLY - INELIGIBLE example: FULL ineligibilityReason: type: - string - 'null' description: Reason the profile is not eligible. example: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /oauth/token: post: operationId: oauthTokenCreate summary: Create an OAuth token description: > Exchange credentials or authorisation grants for an OAuth 2.0 access token. The `grant_type` field determines which parameters are required and which response fields are returned. See [managing token expiration](/api-reference/oauth-token#managing-token-expiration) for guidance on refreshing tokens before they expire. tags: - oauth-token security: - BasicAuth: [] requestBody: required: true content: application/x-www-form-urlencoded: schema: discriminator: propertyName: grant_type mapping: client_credentials: '#/components/schemas/client-credentials-grant' registration_code: '#/components/schemas/registration-code-grant' authorization_code: '#/components/schemas/authorization-code-grant' refresh_token: '#/components/schemas/refresh-token-grant' oneOf: - $ref: '#/components/schemas/client-credentials-grant' - $ref: '#/components/schemas/registration-code-grant' - $ref: '#/components/schemas/authorization-code-grant' - $ref: '#/components/schemas/refresh-token-grant' responses: '200': description: Token created successfully. content: application/json: schema: $ref: '#/components/schemas/token-response' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad request. content: application/json: schema: type: object properties: error: type: string example: invalid_request error_description: type: string example: Missing grant type headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: >- Invalid credentials. For example, the user reclaimed the account or an invalid registration code was used. content: application/json: schema: type: object properties: error: type: string example: invalid_grant error_description: type: string example: Invalid user credentials. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/one-time-token/status: get: operationId: ottStatusGet summary: Get status of a one time token description: | Retrieve necessary information to clear a OTT. tags: - sca-ott security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: One time token status. content: application/json: schema: $ref: '#/components/schemas/ott-response' example: oneTimeTokenProperties: oneTimeToken: 9f5f5812-2609-4e48-8418-b64437c0c7cd challenges: - primaryChallenge: type: PIN viewData: attributes: userId: 6146956 alternatives: [] required: true passed: false validity: 3600 actionType: BALANCE__GET_STATEMENT userId: 6146956 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/pin/verify: post: deprecated: true operationId: ottPinVerify summary: Verify PIN description: > [{% 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. tags: - sca-pin security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - name: Accept in: header required: true schema: type: string enum: - application/jose+json example: application/jose+json - name: X-TW-JOSE-Method in: header required: true description: JOSE method identifier. schema: type: string enum: - jwe example: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -i -X POST \ https://api.wise-sandbox.com/v1/one-time-token/pin/verify \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-TW-JOSE-Method: jwe' \ -H 'One-Time-Token: ' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwi...' requestBody: required: true content: application/jose+json: schema: type: string description: > JWE-encrypted string. The payload before encryption should contain a `pin` field. Original payload: ```json {"pin": "1234"} ``` Encoded (JWE): ``` eyJlbmMiOiJBMjU2R0NNIiwi... ``` example: eyJlbmMiOiJBMjU2R0NNIiwi... responses: '200': description: Encrypted one time token status. content: application/jose+json: schema: type: string description: > JWE-encrypted string. Please refer to our [JOSE guide](/guides/developer/auth-and-security/jose-jws) on how to decrypt this. When decrypted, the response contains `oneTimeTokenProperties` with the one time token details. example: eyJlbmMiOiJBMjU2R0NNIiwi... headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/partner-device-fingerprint/verify: post: deprecated: true operationId: ottDeviceFingerprintVerify summary: Verify Device Fingerprint description: > [{% 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. tags: - sca-device-fingerprints security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - name: Accept in: header required: true schema: type: string enum: - application/jose+json example: application/jose+json - name: X-TW-JOSE-Method in: header required: true description: JOSE method identifier. schema: type: string enum: - jwe example: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -i -X POST \ https://api.wise-sandbox.com/v1/one-time-token/partner-device-fingerprint/verify \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-TW-JOSE-Method: jwe' \ -H 'One-Time-Token: ' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwi...' requestBody: required: true content: application/jose+json: schema: type: string description: > JWE-encrypted string. The payload before encryption should contain a `deviceFingerprint` field. Original payload: ```json {"deviceFingerprint": ""} ``` Encoded (JWE): ``` eyJlbmMiOiJBMjU2R0NNIiwi... ``` example: eyJlbmMiOiJBMjU2R0NNIiwi... responses: '200': description: Encrypted one time token status. content: application/jose+json: schema: type: string description: > JWE-encrypted string. Please refer to our [JOSE guide](/guides/developer/auth-and-security/jose-jws) on how to decrypt this. When decrypted, the response contains `oneTimeTokenProperties` with the one time token details. When successful, response may return the next challenge in `challenges` array. If `challenges` array is empty, you may now use the OTT to access an SCA protected endpoint. example: eyJlbmMiOiJBMjU2R0NNIiwi... headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/facemap/verify: post: deprecated: true operationId: ottFacemapVerify summary: Verify FaceMap description: > 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. tags: - sca-facemaps security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: faceMap: type: string description: > Base64-encoded binary data as a string. For more details how to get this binary, please read FaceTec's [export API](https://dev.facetec.com/api-guide#export-3d-facemap). To retrieve Wise's FaceTec public key, please refer to our FaceTec's [Get Public Key API](/api-reference/facetec/facetecpublickeyget). example: responses: '200': description: One time token status. content: application/json: schema: $ref: '#/components/schemas/ott-response' example: oneTimeTokenProperties: oneTimeToken: 9f5f5812-2609-4e48-8418-b64437c0c7cd challenges: [] validity: 3600 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/application/users/{userId}/phone-numbers: get: deprecated: true operationId: userSecurityPhoneNumberList summary: List Phone Numbers description: > 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 %} tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/phone-number' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' post: operationId: userSecurityPhoneNumberCreate summary: Create Phone Number description: > 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 %} tags: - sca-otp security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: phoneNumber: type: string description: A valid phone number in string. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/phone-number' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '422': description: The phone number is already associated with another account. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string example: errors: - code: phone.number.repeated message: It's linked to an account with the email ****@wise.com headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/sms/trigger: post: operationId: ottSmsTrigger summary: Trigger SMS Challenge description: > 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). tags: - sca-otp security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Trigger result with obfuscated phone number. content: application/json: schema: type: object properties: obfuscatedPhoneNo: type: string description: >- Obfuscated phone number that can be used as a hint for the end customer regarding which phone number the SMS was sent to. example: '*********8888' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/sms/verify: post: operationId: ottSmsVerify summary: Verify SMS Challenge description: > 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**. tags: - sca-otp security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: otpCode: type: string description: 6 digit OTP code in text format. example: '111111' responses: '200': description: One time token status. content: application/json: schema: $ref: '#/components/schemas/ott-response' example: oneTimeTokenProperties: oneTimeToken: 9f5f5812-2609-4e48-8418-b64437c0c7cd challenges: [] validity: 3600 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/whatsapp/trigger: post: operationId: ottWhatsappTrigger summary: Trigger WhatsApp Challenge description: > 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). tags: - sca-otp security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Trigger result with obfuscated phone number. content: application/json: schema: type: object properties: obfuscatedPhoneNo: type: string description: >- Obfuscated phone number that can be used as a hint for the end customer regarding which phone number the WhatsApp message was sent to. example: '*********8888' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/whatsapp/verify: post: operationId: ottWhatsappVerify summary: Verify WhatsApp Challenge description: > 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**. tags: - sca-otp security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: otpCode: type: string description: 6 digit OTP code in text format. example: '111111' responses: '200': description: One time token status. content: application/json: schema: $ref: '#/components/schemas/ott-response' example: oneTimeTokenProperties: oneTimeToken: 9f5f5812-2609-4e48-8418-b64437c0c7cd challenges: [] validity: 3600 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/voice/trigger: post: operationId: ottVoiceTrigger summary: Trigger Voice Challenge description: > 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). tags: - sca-otp security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Trigger result with obfuscated phone number. content: application/json: schema: type: object properties: obfuscatedPhoneNo: type: string description: >- Obfuscated phone number that can be used as a hint for the end customer regarding which phone number the voice message was sent to. example: '*********8888' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/one-time-token/voice/verify: post: operationId: ottVoiceVerify summary: Verify Voice Challenge description: > 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**. tags: - sca-otp security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: otpCode: type: string description: 6 digit OTP code in text format. example: '111111' responses: '200': description: One time token status. content: application/json: schema: $ref: '#/components/schemas/ott-response' example: oneTimeTokenProperties: oneTimeToken: 9f5f5812-2609-4e48-8418-b64437c0c7cd challenges: [] validity: 3600 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/application/users/{userId}/phone-numbers/{phoneNumberId}: put: deprecated: true operationId: userSecurityPhoneNumberUpdate summary: Update Phone Number description: > 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 %} tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - name: phoneNumberId in: path required: true description: ID of a phone number. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: phoneNumber: type: string description: A valid phone number in string. responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/phone-number' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '422': description: The phone number is already associated with another account. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string example: errors: - code: phone.number.repeated message: It's linked to an account with the email ****@wise.com headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: operationId: userSecurityPhoneNumberDelete summary: Delete Phone Number description: > 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 %} tags: - sca-otp security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - name: phoneNumberId in: path required: true description: ID of a phone number. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: No Content. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/identity/one-time-token/status: get: operationId: ottStatusGetV1 summary: Get OTT status (v1) deprecated: true description: > {% 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. tags: - sca-ott security: - UserToken: [] parameters: - name: One-Time-Token in: header required: true description: Text value of a OTT. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: One time token status. content: application/json: schema: $ref: '#/components/schemas/ott-response' example: oneTimeTokenProperties: oneTimeToken: 9f5f5812-2609-4e48-8418-b64437c0c7cd challenges: - primaryChallenge: type: PIN viewData: attributes: userId: 6146956 alternatives: [] required: true passed: false validity: 3600 actionType: BALANCE__GET_STATEMENT userId: 6146956 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/cases: post: operationId: caseCreate summary: Create a partner case description: > 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 %} tags: - case security: - ClientCredentialsToken: [] requestBody: required: true content: application/json: schema: type: object properties: type: type: string description: >- Type of the partner case. Value must be `GENERAL_ENQUIRY`. More case types will be added in the future. example: GENERAL_ENQUIRY subject: type: string description: >- The subject of the case. Do not include PII in the subject of cases. example: Inquiry about Transfer 12345 details: type: object description: Details related to the case. properties: transferId: type: - integer - 'null' format: int64 description: >- ID of the transfer the case relates to. Can also be `null`. example: 58114690 profileId: type: - integer - 'null' format: int64 description: >- ID of the profile the case relates to. Can also be `null`. example: 14556049 userId: type: integer format: int64 description: ID of the user the case relates to. Can not be `null`. example: 1234 externalId: type: string description: >- An ID provided by the external partner for partner internal tracking. example: partner_external_id_12345 description: type: string description: >- The description of the request. The maximum size of the description is 65,535 characters. If additional characters are sent, the field will be truncated. example: Initial summary of the issue responses: '200': description: Created partner case. content: application/json: schema: $ref: '#/components/schemas/case' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/cases/{caseId}: get: operationId: caseGet summary: Retrieve a partner case by ID description: | This endpoint returns a partner case based on the specified case ID. tags: - case security: - ClientCredentialsToken: [] parameters: - name: caseId in: path required: true description: Partner Case ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Partner case object. content: application/json: schema: $ref: '#/components/schemas/case' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/cases/{caseId}/comments: get: operationId: caseCommentsGet summary: Retrieve partner case comments description: > 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). tags: - case security: - ClientCredentialsToken: [] parameters: - name: caseId in: path required: true description: Partner Case ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Comments list object. content: application/json: schema: type: object properties: message: type: - string - 'null' description: >- Message providing context for the response if the comments list is empty due to the case status being in `CREATING`. `null` if case has been created. example: null comments: type: array description: Array of comments associated with the case. items: type: object description: Comment object. properties: id: type: integer format: int64 description: ID of the comment. example: 16554865464081 plainBody: type: string description: >- The plain body of the comment. This can include simple markdown. example: |- We have resolved the issue with this transfer. Thank you! author: type: string description: >- The author of the comment. Can be either `PARTNER` or `WISE_AGENT`. example: WISE_AGENT createdAt: type: string format: date-time description: >- When the comment was created. Note that comments cannot be updated. example: '2023-06-28T15:22:29.901' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' put: operationId: caseCommentCreate summary: Add a partner case comment description: | This endpoint allows for a comment to be placed on a partner case. tags: - case security: - ClientCredentialsToken: [] parameters: - name: caseId in: path required: true description: Partner Case ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: comment: type: string description: >- The comment that you want to add to the case. This can include markdown. The maximum size of the comment is 65,535 characters. If additional characters are sent, the field will be truncated. example: |- Please see the attached information as requested. Transfer Details.... responses: '200': description: Successfully updated. No response body. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/payin-sessions/{payinSessionId}/paynow: post: operationId: paynowCreate summary: Create PayNow payment details description: > 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. {% admonition type="warning" %} This operation is not available for sandbox testing. {% /admonition %} tags: - payins security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID of the profile that created the transfer. schema: type: integer format: int64 - name: payinSessionId in: path required: true description: Payin Session ID retrieved from Transfer object. schema: type: string format: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: PayNow payment object. content: application/json: schema: type: object properties: qrCodeInBase64: type: string description: >- An encoded QR image in base64 format, which can be decoded and displayed directly to the end user. example: >- iVBORw0KGgoAAAANSUhEUgAAAXUAAAF1CAIAAACYn+2fAAB2CUlEQVR4Xux9B2BU15k1cYxAdJCQhB... details: type: object description: >- Manual input details that can be used by the end user to make the transfer without scanning the QR image. properties: virtualPaymentAddress: type: string description: Virtual payment address to pay to. example: UEN123456789R#WISE amount: type: - number description: Transfer amount. example: 100 currency: type: - string description: Currency. example: SGD reference: type: - string description: >- Payment reference used for linking the PayNow transaction to the transfer created by the profile. example: PP12345678 entityName: type: - string description: >- Entity name of the Wise Account to make the PayNow transfer to. example: WISE ASIA-PACIFIC PTE LTD headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid request. content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Must be /errors/types/validation for this error type. examples: - /errors/types/validation title: type: string description: Validation Error examples: - Validation Error status: type: string description: Bad Format Validation Error examples: - 400 instance: type: string description: The uri the triggered a validation error examples: - >- /v1/profiles/12345678/payin-sessions/74a3fe63-f37e-49ff-f744-8ef020efabcde/paynow errors: type: array description: A list of specific validation failures. items: type: object properties: detail: type: string description: A detailed description of the validation failure. examples: - Invalid request to create payment for session 1. code: type: string description: A specific code for the validation failure type. examples: - invalid_request ref: type: string description: A reference to the field that failed validation. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '422': description: Unprocessable request. content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Must be /errors/types/domain for this error type. examples: - /errors/types/domain title: type: string description: Unprocessable Entity examples: - Unprocessable Entity status: type: string description: Unprocessable Entity Domain Error examples: - 422 instance: type: string description: The uri that triggered the error examples: - >- /v1/profiles/12345678/payin-sessions/74a3fe63-f37e-49ff-f744-8ef020efabcde/paynow code: type: string description: Error code of the request example: payins.paynow.details.creation.not.allowed headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/transfers/{transferId}/deposit-details/bank-transfer: get: operationId: payinDepositDetailGet summary: Retrieve bank transfer deposit details description: > 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. tags: - payin-deposit-detail security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - name: transferId in: path required: true description: Transfer ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Payin deposit detail object. content: application/json: schema: type: object properties: payinBank: type: object description: Information about the receiving bank. properties: bankName: type: string description: Bank name. example: Wise Europe SA/NV bankAddress: type: - object - 'null' description: Bank address. properties: country: type: string description: Country ISO 2 code. example: BE firstLine: type: string description: Street address. example: Rue Du Trône 100, box 3 postCode: type: string description: Post code / zip code. example: '1050' city: type: string description: City. example: Brussels state: type: - string - 'null' description: State. example: null phone: type: - string - 'null' description: Phone number. example: +32 472 123 456 payinBankAccount: type: object description: Bank account details to use to send the payment to. properties: currency: type: string description: ISO 4217 source currency code. example: EUR bankAccountType: type: string description: >- The type of bank account to use for the payin, e.g. RECIPIENT, ESCROW, BALANCE, etc. example: RECIPIENT details: type: array description: Account details. items: type: object description: Account detail entry. properties: type: type: string description: >- Account details type, e.g. accountNumber, iban etc. example: iban label: type: string description: >- Account details label that should be displayed in your user interface. example: IBAN value: type: string description: >- Account details value. This field is deprecated. Use `rawValue` and `formattedValue` instead. example: BE11111111111111 deprecated: true rawValue: type: string description: >- Account details value, always unformatted. Can be used for processing. example: BE11111111111111 formattedValue: type: - string - 'null' description: >- Account details value, formatted according to the type of the field. Intended to be human-readable. This can be null. example: BE11 1111 1111 1111 description: type: string description: Description of the account detail type. example: International Bank Account Number wiseInformation: type: object description: >- Information about the receiving Wise entity, the owner of the bank account. properties: localCompanyName: type: string description: Wise local company name. example: Wise Europe SA localAddress: type: - object - 'null' description: Wise local address. properties: country: type: string description: Country ISO 2 code. example: BE firstLine: type: string description: Street address. example: Rue du Trône 100, 3rd floor postCode: type: string description: Post code / zip code. example: '1050' city: type: string description: City. example: Brussels state: type: - string - 'null' description: State. example: null phone: type: - string - 'null' description: Phone number. example: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles: post: operationId: profileCreateV1 summary: Create a profile (V1) description: > {% 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 always create a personal profile first. Business profiles cannot be created without a personal profile. See [Business Category](/guides/developer/api-guides/business-categories) for the list of valid category and sub-category values for business profiles. deprecated: true tags: - profile security: - UserToken: [] - PersonalToken: [] requestBody: content: application/json: schema: oneOf: - title: Personal type: object required: - type properties: type: type: string enum: - personal example: personal details: type: object description: Personal profile details. properties: firstName: type: string maxLength: 30 description: First name (including middle names). example: Oliver lastName: type: string maxLength: 30 description: Last name. example: Wilson preferredName: type: string maxLength: 30 description: >- Preferred first name, if different to the legal first name. example: Olivia dateOfBirth: type: string description: Date of birth. example: '1977-07-01' phoneNumber: type: string description: Phone number in international phone number format. example: '+3725064992' firstNameInKana: type: - string - 'null' description: >- First name in Katakana (required for from-JPY personal transfers). example: null lastNameInKana: type: - string - 'null' description: >- Last name in Katakana (required for from-JPY personal transfers). example: null - title: Business type: object required: - type properties: type: type: string enum: - business example: business details: type: object description: Business profile details. properties: name: type: string description: Business name. example: ABC Logistics Ltd registrationNumber: type: string description: Business registration number. example: '12144939' acn: type: - string - 'null' description: >- Australian Company Number (only for Australian businesses). example: null abn: type: - string - 'null' description: >- Australian Business Number (only for Australian businesses). example: null arbn: type: - string - 'null' description: >- Australian Registered Body Number (only for Australian businesses). example: null companyType: type: string description: Company legal form. enum: - LIMITED - PARTNERSHIP - SOLE_TRADER - LIMITED_BY_GUARANTEE - LIMITED_LIABILITY_COMPANY - FOR_PROFIT_CORPORATION - NON_PROFIT_CORPORATION - LIMITED_PARTNERSHIP - LIMITED_LIABILITY_PARTNERSHIP - GENERAL_PARTNERSHIP - SOLE_PROPRIETORSHIP - PRIVATE_LIMITED_COMPANY - PUBLIC_LIMITED_COMPANY - TRUST - OTHER companyRole: type: string description: Role of person. enum: - OWNER - DIRECTOR - OTHER descriptionOfBusiness: type: string deprecated: true description: Sector / field of activity. webpage: type: string description: Business webpage. Required if companyType is OTHER. example: https://abc-logistics.com businessCategory: type: string description: >- [Business category](/guides/developer/api-guides/business-categories). example: CONSULTING_IT_BUSINESS_SERVICES businessSubCategory: type: string description: >- [Business sub-category](/guides/developer/api-guides/business-categories). example: DESIGN responses: '200': description: Created profile. content: application/json: schema: oneOf: - title: Personal type: object properties: id: type: integer format: int64 description: Profile ID. example: 30000001 type: type: string enum: - personal example: personal details: type: object description: Personal profile details. properties: firstName: type: string example: Oliver lastName: type: string example: Wilson dateOfBirth: type: string example: '1977-07-01' phoneNumber: type: string example: '+3725064992' avatar: type: string example: '' occupation: type: string deprecated: true example: '' occupations: type: - array - 'null' items: type: object properties: code: type: string example: Software Engineer format: type: string example: FREE_FORM primaryAddress: type: - integer - 'null' format: int64 description: Address object ID. example: null firstNameInKana: type: - string - 'null' example: null lastNameInKana: type: - string - 'null' example: null - title: Business type: object properties: id: type: integer format: int64 description: Profile ID. example: 30000002 type: type: string enum: - business example: business details: type: object description: Business profile details. properties: name: type: string example: ABC Logistics Ltd registrationNumber: type: string example: '12144939' acn: type: - string - 'null' example: null abn: type: - string - 'null' example: null arbn: type: - string - 'null' example: null companyType: type: string example: LIMITED companyRole: type: string example: OWNER descriptionOfBusiness: type: string deprecated: true example: Information and communication webpage: type: string example: https://abc-logistics.com primaryAddress: type: integer format: int64 description: Address object ID. example: 4000001 businessCategory: type: string description: >- [Business category](/guides/developer/api-guides/business-categories). example: CONSULTING_IT_BUSINESS_SERVICES businessSubCategory: type: string description: >- [Business sub-category](/guides/developer/api-guides/business-categories). example: DESIGN headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' put: operationId: profileUpdateV1 summary: Update a profile (V1) description: > {% 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 %} deprecated: true tags: - profile security: - UserToken: [] - PersonalToken: [] requestBody: content: application/json: schema: oneOf: - title: Personal type: object required: - type - id properties: id: type: integer format: int64 description: Profile ID. example: 30000001 type: type: string enum: - personal example: personal details: type: object description: Personal profile details. properties: firstName: type: string maxLength: 30 description: First name (including middle names). example: Oliver lastName: type: string maxLength: 30 description: Last name. example: Wilson preferredName: type: string maxLength: 30 description: >- Preferred first name, if different to the legal first name. example: Olivia dateOfBirth: type: string description: Date of birth. example: '1977-07-01' phoneNumber: type: string description: Phone number in international phone number format. example: '+3725064992' firstNameInKana: type: - string - 'null' description: >- First name in Katakana (required for from-JPY personal transfers). example: null lastNameInKana: type: - string - 'null' description: >- Last name in Katakana (required for from-JPY personal transfers). example: null - title: Business type: object required: - type - id properties: id: type: integer format: int64 description: Profile ID. example: 14590075 type: type: string enum: - business example: business details: type: object description: Business profile details. properties: name: type: string description: Business name. example: ABC Logistics Ltd registrationNumber: type: string description: Business registration number. example: '12144939' acn: type: - string - 'null' description: >- Australian Company Number (only for Australian businesses). example: null abn: type: - string - 'null' description: >- Australian Business Number (only for Australian businesses). example: null arbn: type: - string - 'null' description: >- Australian Registered Body Number (only for Australian businesses). example: null companyType: type: string description: Company legal form. enum: - LIMITED - PARTNERSHIP - SOLE_TRADER - LIMITED_BY_GUARANTEE - LIMITED_LIABILITY_COMPANY - FOR_PROFIT_CORPORATION - NON_PROFIT_CORPORATION - LIMITED_PARTNERSHIP - LIMITED_LIABILITY_PARTNERSHIP - GENERAL_PARTNERSHIP - SOLE_PROPRIETORSHIP - PRIVATE_LIMITED_COMPANY - PUBLIC_LIMITED_COMPANY - TRUST - OTHER companyRole: type: string description: Role of person. enum: - OWNER - DIRECTOR - OTHER descriptionOfBusiness: type: string deprecated: true description: Sector / field of activity. webpage: type: string description: Business webpage. Required if companyType is OTHER. example: https://abc-logistics.com businessCategory: type: string description: >- [Business category](/guides/developer/api-guides/business-categories). example: CONSULTING_IT_BUSINESS_SERVICES businessSubCategory: type: string description: >- [Business sub-category](/guides/developer/api-guides/business-categories). example: DESIGN responses: '200': description: Updated profile. content: application/json: schema: oneOf: - title: Personal type: object properties: id: type: integer format: int64 description: Profile ID. example: 30000001 type: type: string enum: - personal example: personal details: type: object description: Personal profile details. properties: firstName: type: string example: Oliver lastName: type: string example: Wilson dateOfBirth: type: string example: '1977-07-01' phoneNumber: type: string example: '+3725064992' avatar: type: string example: '' occupation: type: string deprecated: true example: '' occupations: type: - array - 'null' items: type: object properties: code: type: string example: Software Engineer format: type: string example: FREE_FORM primaryAddress: type: - integer - 'null' format: int64 description: Address object ID. example: null firstNameInKana: type: - string - 'null' example: null lastNameInKana: type: - string - 'null' example: null - title: Business type: object properties: id: type: integer format: int64 description: Profile ID. example: 30000002 type: type: string enum: - business example: business details: type: object description: Business profile details. properties: name: type: string example: ABC Logistics Ltd registrationNumber: type: string example: '12144939' acn: type: - string - 'null' example: null abn: type: - string - 'null' example: null arbn: type: - string - 'null' example: null companyType: type: string example: LIMITED companyRole: type: string example: OWNER descriptionOfBusiness: type: string deprecated: true example: Information and communication webpage: type: string example: https://abc-logistics.com primaryAddress: type: integer format: int64 description: Address object ID. example: 4000001 businessCategory: type: string description: >- [Business category](/guides/developer/api-guides/business-categories). example: CONSULTING_IT_BUSINESS_SERVICES businessSubCategory: type: string description: >- [Business sub-category](/guides/developer/api-guides/business-categories). example: DESIGN headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v2/profiles: get: operationId: profileList summary: List profiles for a user account description: | List of all profiles belonging to user. tags: - profile security: - UserToken: [] - PersonalToken: [] responses: '200': description: >- Array of profile objects. Note that there might be more than one business profile returned in the response. content: application/json: schema: type: array items: $ref: '#/components/schemas/profile' example: - type: PERSONAL id: 14575282 publicId: a1b2c3d4-e5f6-7890-1234-567890abcdef userId: 9889627 address: id: 36086782 addressFirstLine: 24 Willow Creek Lane city: Bristol countryIso2Code: GB countryIso3Code: gbr postCode: BS1 6AE stateCode: null email: sarah.jenkins@example.com createdAt: '2023-01-15T10:30:00' updatedAt: '2025-06-18T14:20:00' avatar: https://example.com/avatars/sarah_jenkins.png currentState: VISIBLE contactDetails: email: sarah.contact@example.com phoneNumber: '+447700900123' firstName: Sarah lastName: Jenkins preferredName: Sal dateOfBirth: '1985-05-20' phoneNumber: '+447700900456' secondaryAddresses: [] fullName: Sarah Jenkins - type: BUSINESS id: 14599371 publicId: f0e9d8c7-b6a5-4321-fedc-ba9876543210 userId: 9889627 address: id: 36152772 addressFirstLine: 15 Tech Hub Studios city: Manchester countryIso2Code: GB countryIso3Code: gbr postCode: M1 7JA stateCode: null email: info@innovate-solutions.co.uk createdAt: '2024-03-10T09:00:00' updatedAt: '2025-06-18T14:22:00' contactDetails: email: contact@innovate-solutions.co.uk phoneNumber: '+441617891234' businessName: Innovate Solutions Ltd registrationNumber: SC1234567890ABCD descriptionOfBusiness: SOFTWARE_DEVELOPMENT webpage: https://www.innovate-solutions.co.uk companyType: LIMITED_COMPANY businessFreeFormDescription: We create cutting-edge software for businesses. firstLevelCategory: TECHNOLOGY secondLevelCategory: SOFTWARE_SERVICES operationalAddresses: - id: 36152773 addressFirstLine: Unit 5, Innovation Park city: Leeds countryIso2Code: GB countryIso3Code: gbr postCode: LS1 4YZ stateCode: null fullName: Innovate Solutions Ltd headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v2/profiles/personal-profile: post: operationId: profilePersonalCreate summary: Create a personal profile description: > 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. tags: - profile security: - UserToken: [] - PersonalToken: [] parameters: - name: X-idempotence-uuid in: header required: false description: Unique idempotency key for the request. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object required: - firstName - lastName - dateOfBirth - address - contactDetails properties: firstName: type: string maxLength: 30 description: First name (including middle names). example: Oliver lastName: type: string maxLength: 30 description: Last name. example: Wilson preferredName: type: string maxLength: 30 description: Preferred first name, if different to the legal first name. example: Olivia firstNameInKana: type: - string - 'null' description: >- First name in Katakana. Required for from-JPY personal transfers. example: null lastNameInKana: type: - string - 'null' description: >- Last name in Katakana. Required for from-JPY personal transfers. example: null address: type: object required: - addressFirstLine - city - countryIso3Code properties: addressFirstLine: type: string description: First line of address. example: 50 Sunflower Ave city: type: string description: City. example: Phoenix countryIso3Code: type: string description: 3 letter country code (lower case). example: usa postCode: type: string description: Postal code. example: '10025' stateCode: type: string maxLength: 5 description: State code. Required for US, CA, BR and AU addresses. example: AZ nationality: type: string description: 3 letter country code (lower case). example: usa dateOfBirth: type: string description: Date of birth. example: '1977-07-01' externalCustomerId: type: string description: >- An external reference identifier mapping the customer of this profile to your system. example: 12345-oliver-wilson contactDetails: type: object required: - email - phoneNumber properties: email: type: string description: >- Contact email address. Please speak with your integration account manager for details on how customer communication is handled for your integration. example: o.wilson@example.com phoneNumber: type: string description: >- Contact phone number in international phone number format, example "+1408XXXXXXX". example: '+3725064992' occupations: type: array items: type: object properties: code: type: string description: >- Occupation field code - this field accepts any job or occupation that the customer does, as the only occupation format currently accepted is `"FREE_FORM"`. example: Software Engineer format: type: string description: >- Occupation field format. As of now, it only accepts the value `"FREE_FORM"`. example: FREE_FORM responses: '200': description: Created personal profile. content: application/json: schema: type: object properties: id: type: integer format: int64 description: Unique profile ID. example: 30000001 type: type: string description: Profile type. enum: - PERSONAL example: PERSONAL details: type: object description: Profile details. properties: firstName: type: string description: First name (including middle names). example: Oliver lastName: type: string description: Last name. example: Wilson preferredName: type: string description: Preferred first name. example: Olivia firstNameInKana: type: - string - 'null' description: First name in Katakana. example: null lastNameInKana: type: - string - 'null' description: Last name in Katakana. example: null address: type: object properties: addressFirstLine: type: string example: 50 Sunflower Ave city: type: string example: Phoenix countryIso3Code: type: string example: usa postCode: type: string example: '10025' stateCode: type: string example: AZ nationality: type: string description: 3 letter country code (lower case). example: usa dateOfBirth: type: string description: Date of birth. example: '1977-07-01' externalCustomerId: type: string description: External reference identifier in your system. example: 12345-oliver-wilson contactDetails: type: object properties: email: type: string example: o.wilson@example.com phoneNumber: type: string example: '+3725064992' occupations: type: array items: type: object properties: code: type: string example: Software Engineer format: type: string example: FREE_FORM localizedInformation: type: array description: Localized information for the profile. items: type: object headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/business-profile: post: operationId: profileBusinessCreate summary: Create a business profile description: > 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. tags: - profile security: - UserToken: [] - PersonalToken: [] parameters: - name: X-idempotence-uuid in: header required: false description: Unique idempotency key for the request. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object properties: businessName: type: string description: Business name. example: ABC Logistics Ltd businessNameInKatakana: type: - string - 'null' description: Business name in Katakana (only for Japanese businesses). example: null businessFreeFormDescription: type: string description: > Business free form description. Required if `companyType` is `OTHER`. If this is not provided for an `OTHER` companyType, the profile should not be allowed to create a transfer. For the rest of the companyTypes, it is highly recommended to always provide the business' description, to avoid payment issues such as suspensions. Wise will send a request for information (RFI) if this detail is not provided. example: Biz free form desc registrationNumber: type: string description: Business registration number. example: '12144939' acn: type: - string - 'null' description: Australian Company Number (only for Australian businesses). example: null abn: type: - string - 'null' description: Australian Business Number (only for Australian businesses). example: null arbn: type: - string - 'null' description: >- Australian Registered Body Number (only for Australian businesses). example: null companyType: type: string description: Company legal form. enum: - LIMITED - PARTNERSHIP - SOLE_TRADER - LIMITED_BY_GUARANTEE - LIMITED_LIABILITY_COMPANY - FOR_PROFIT_CORPORATION - NON_PROFIT_CORPORATION - LIMITED_PARTNERSHIP - LIMITED_LIABILITY_PARTNERSHIP - GENERAL_PARTNERSHIP - SOLE_PROPRIETORSHIP - PRIVATE_LIMITED_COMPANY - PUBLIC_LIMITED_COMPANY - TRUST - OTHER example: LIMITED companyRole: type: string description: Role of person. enum: - OWNER - DIRECTOR - OTHER example: OWNER address: type: object properties: addressFirstLine: type: string description: First line of address. example: 1 A road city: type: string description: City. example: London countryIso2Code: type: string description: 2 letter country code. example: gb countryIso3Code: type: string description: 3 letter country code. Must be lowercase. example: gbr postCode: type: string description: Postal code. example: '11111' stateCode: type: string description: State code. externalCustomerId: type: string description: >- An external reference identifier mapping the customer of this profile to your system. example: 67890-biz-acct actorEmail: type: string description: Email of the actor. example: biz-acct@abcl.com firstLevelCategory: type: string description: >- [Category](/guides/developer/api-guides/business-categories) of the business. example: CONSULTING_IT_BUSINESS_SERVICES secondLevelCategory: type: string description: >- [Secondary category](/guides/developer/api-guides/business-categories) of the business. example: DESIGN operationalAddresses: type: array description: List of operational addresses. items: type: object properties: addressFirstLine: type: string example: 1 A road city: type: string example: London countryIso2Code: type: string example: gb countryIso3Code: type: string example: gbr postCode: type: string example: '11111' stateCode: type: string webpage: type: string description: > Business webpage. Required if `companyType` is `OTHER`. If this is not provided for an `OTHER` companyType, the profile should not be allowed to create a transfer. For the rest of the companyTypes, it is highly recommended to always provide the business' website, to avoid payment issues such as suspensions. Wise will send a request for information (RFI) if this detail is not provided. example: https://abc-logistics.com responses: '200': description: Created business profile. content: application/json: schema: $ref: '#/components/schemas/business-profile' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/business-profile: post: operationId: profileBusinessCreateV3 summary: Create a business profile (V3) description: > 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. tags: - profile security: - UserToken: [] parameters: - name: X-idempotence-uuid in: header required: false description: Unique idempotency key for the request. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object properties: businessName: type: string description: Business name. example: ABC Logistics Ltd businessNameInKatakana: type: - string - 'null' description: Business name in Katakana (only for Japanese businesses). example: null businessFreeFormDescription: type: string description: > Business free form description. Required if `companyType` is `OTHER`. If this is not provided for an `OTHER` companyType, the profile should not be allowed to create a transfer. For the rest of the companyTypes, it is highly recommended to always provide the business' description, to avoid payment issues such as suspensions. Wise will send a request for information (RFI) if this detail is not provided. example: Biz free form desc registrationNumber: type: string description: Business registration number. example: '12144939' acn: type: - string - 'null' description: Australian Company Number (only for Australian businesses). example: null abn: type: - string - 'null' description: Australian Business Number (only for Australian businesses). example: null arbn: type: - string - 'null' description: >- Australian Registered Body Number (only for Australian businesses). example: null companyType: type: string description: Company legal form. enum: - LIMITED - PARTNERSHIP - SOLE_TRADER - LIMITED_BY_GUARANTEE - LIMITED_LIABILITY_COMPANY - FOR_PROFIT_CORPORATION - NON_PROFIT_CORPORATION - LIMITED_PARTNERSHIP - LIMITED_LIABILITY_PARTNERSHIP - GENERAL_PARTNERSHIP - SOLE_PROPRIETORSHIP - PRIVATE_LIMITED_COMPANY - PUBLIC_LIMITED_COMPANY - TRUST - OTHER example: LIMITED companyRole: type: string description: Role of person. enum: - OWNER - DIRECTOR - OTHER example: OWNER address: type: object properties: addressFirstLine: type: string description: First line of address. example: 1 A road city: type: string description: City. example: London countryIso2Code: type: string description: 2 letter country code. example: gb countryIso3Code: type: string description: 3 letter country code. Must be lowercase. example: gbr postCode: type: string description: Postal code. example: '11111' stateCode: type: string description: State code. externalCustomerId: type: string description: >- An external reference identifier mapping the customer of this profile to your system. example: 67890-biz-acct actorEmail: type: string description: Email of the actor. example: biz-acct@abcl.com firstLevelCategory: type: string description: >- [Category](/guides/developer/api-guides/business-categories) of the business. example: CONSULTING_IT_BUSINESS_SERVICES secondLevelCategory: type: string description: >- [Secondary category](/guides/developer/api-guides/business-categories) of the business. example: DESIGN operationalAddresses: type: array description: List of operational addresses. items: type: object properties: addressFirstLine: type: string example: 1 A road city: type: string example: London countryIso2Code: type: string example: gb countryIso3Code: type: string example: gbr postCode: type: string example: '11111' stateCode: type: string webpage: type: string description: > Business webpage. Required if `companyType` is `OTHER`. If this is not provided for an `OTHER` companyType, the profile should not be allowed to create a transfer. For the rest of the companyTypes, it is highly recommended to always provide the business' website, to avoid payment issues such as suspensions. Wise will send a request for information (RFI) if this detail is not provided. example: https://abc-logistics.com businessRepresentative: type: object description: >- Business representative details. Provide either the full representative details or just the `businessRepresentativeId` to link an existing representative. properties: businessRepresentativeId: type: integer description: >- ID of a Business Representative. This can be obtained from a previous call to create a business profile, in which case the same Business Representative is linked to the current business effectively sharing it across multiple businesses. When the Business Representative ID is provided, it is the only field required and none of the other fields should be provided. firstName: type: string description: >- First name of the person representing the business (including middle names). Required unless Business Representative ID is provided. example: Oliver lastName: type: string description: >- Last name of the person representing the business. Required unless Business Representative ID is provided. example: Wilson preferredName: type: string description: >- Preferred first name, if different to the legal first name. example: Olivia address: type: object properties: addressFirstLine: type: string description: >- First line of address. Required unless Business Representative ID is provided. example: 50 Sunflower Ave city: type: string description: >- City. Required unless Business Representative ID is provided. example: Phoenix countryIso3Code: type: string description: >- 3 letter country code (lower case). Required unless Business Representative ID is provided. example: usa postCode: type: string description: Postal code. example: '10025' stateCode: type: string description: >- State code (max 5 chars). Required for US, CA, BR and AU addresses unless Business Representative ID is provided. example: AZ contactDetails: type: object properties: email: type: string description: >- Contact email address. Required unless Business Representative ID is provided. example: o.wilson@example.com phoneNumber: type: string description: >- Contact phone number in international phone number format. Required unless Business Representative ID is provided. example: '+3725064992' dateOfBirth: type: string description: >- Date of birth. Required unless Business Representative ID is provided. example: '1977-07-01' examples: withRepresentativeDetails: summary: With Business Representative details value: businessName: ABC Logistics Ltd businessNameInKatakana: null businessFreeFormDescription: Biz free form desc registrationNumber: '12144939' acn: null abn: null arbn: null companyType: LIMITED companyRole: OWNER address: addressFirstLine: 1 A road city: London countryIso2Code: gb countryIso3Code: gbr postCode: '11111' externalCustomerId: 67890-biz-acct actorEmail: biz-acct@abcl.com firstLevelCategory: CONSULTING_IT_BUSINESS_SERVICES secondLevelCategory: DESIGN operationalAddresses: - addressFirstLine: 1 A road city: London countryIso2Code: gb countryIso3Code: gbr postCode: '11111' webpage: https://abc-logistics.com businessRepresentative: firstName: Oliver lastName: Wilson preferredName: Olivia address: addressFirstLine: 50 Sunflower Ave city: Phoenix countryIso3Code: usa postCode: '10025' stateCode: AZ dateOfBirth: '1977-07-01' contactDetails: email: o.wilson@example.com phoneNumber: '+3725064992' withRepresentativeId: summary: With Business Representative ID value: businessName: ABC Logistics Ltd businessNameInKatakana: null businessFreeFormDescription: Biz free form desc registrationNumber: '12144939' acn: null abn: null arbn: null companyType: LIMITED companyRole: OWNER address: addressFirstLine: 1 A road city: London countryIso2Code: gb countryIso3Code: gbr postCode: '11111' externalCustomerId: 67890-biz-acct actorEmail: biz-acct@abcl.com firstLevelCategory: CONSULTING_IT_BUSINESS_SERVICES secondLevelCategory: DESIGN operationalAddresses: - addressFirstLine: 1 A road city: London countryIso2Code: gb countryIso3Code: gbr postCode: '11111' webpage: https://abc-logistics.com businessRepresentative: businessRepresentativeId: 123 responses: '200': description: Created business profile. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}: get: operationId: profileGet summary: Retrieve a profile by ID description: | Get profile info by ID. tags: - profile security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Profile object. content: application/json: schema: $ref: '#/components/schemas/profile' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/personal-profile: put: operationId: profilePersonalUpdate summary: Update a personal profile description: > 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 %} tags: - profile security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true description: Personal profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object properties: firstName: type: string maxLength: 30 description: First name (including middle names). example: Oliver lastName: type: string maxLength: 30 description: Last name. example: Wilson preferredName: type: string maxLength: 30 description: Preferred first name, if different to the legal first name. example: Olivia firstNameInKana: type: - string - 'null' description: >- First name in Katakana. Required for from-JPY personal transfers. example: null lastNameInKana: type: - string - 'null' description: >- Last name in Katakana. Required for from-JPY personal transfers. example: null address: type: object properties: addressFirstLine: type: string description: First line of address. example: 50 Sunflower Ave city: type: string description: City. example: Phoenix countryIso3Code: type: string description: 3 letter country code (ISO3, lower case). example: usa postCode: type: string description: Postal code or ZIP code. example: '10025' stateCode: type: string maxLength: 5 description: State code. Required for US, CA, BR and AU addresses. example: AZ nationality: type: string description: 3 letter country code (ISO3, lower case). example: usa dateOfBirth: type: string description: Date of birth. example: '1977-07-01' contactDetails: type: object properties: email: type: string description: >- Contact email address. Please speak with your integration account manager for details on how customer communication is handled for your integration. example: o.wilson@example.com phoneNumber: type: string description: >- Contact phone number in international phone number format, example "+1408XXXXXXX". example: '+3725064992' externalCustomerId: type: string description: >- An external reference identifier mapping the customer of this profile to your system. example: 12345-oliver-wilson occupations: type: array items: type: object properties: code: type: string description: >- Occupation field code - this field accepts any job or occupation that the customer does, as the only occupation format currently accepted is `"FREE_FORM"`. example: Software Engineer format: type: string description: >- Occupation field format. As of now, it only accepts the value `"FREE_FORM"`. example: FREE_FORM responses: '200': description: Updated personal profile. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/business-profile: put: operationId: profileBusinessUpdate summary: Update a business profile description: > 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. tags: - profile security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object properties: id: type: integer format: int64 description: >- Business profile ID. This must match the business profile ID supplied in the URL. example: 14599371 businessName: type: string description: Business name. example: ABC Logistics Ltd businessNameInKatakana: type: - string - 'null' description: Business name in Katakana (only for Japanese businesses). example: null businessFreeFormDescription: type: string description: Business free form description. example: Biz free form desc registrationNumber: type: string description: Business registration number. example: '12144939' acn: type: - string - 'null' description: Australian Company Number (only for Australian businesses). example: null abn: type: - string - 'null' description: Australian Business Number (only for Australian businesses). example: null arbn: type: - string - 'null' description: >- Australian Registered Body Number (only for Australian businesses). example: null companyType: type: string description: Company legal form. enum: - LIMITED - PARTNERSHIP - SOLE_TRADER - LIMITED_BY_GUARANTEE - LIMITED_LIABILITY_COMPANY - FOR_PROFIT_CORPORATION - NON_PROFIT_CORPORATION - LIMITED_PARTNERSHIP - LIMITED_LIABILITY_PARTNERSHIP - GENERAL_PARTNERSHIP - SOLE_PROPRIETORSHIP - PRIVATE_LIMITED_COMPANY - PUBLIC_LIMITED_COMPANY - TRUST - OTHER example: LIMITED address: type: object properties: addressFirstLine: type: string description: First line of address. example: 1 A road city: type: string description: City. example: London countryIso2Code: type: string description: 2 letter country code. example: gb countryIso3Code: type: string description: 3 letter country code. Must be lowercase. example: gbr postCode: type: string description: Postal code. example: '11111' stateCode: type: string maxLength: 5 description: State code. companyRole: type: string description: Role of person. enum: - OWNER - DIRECTOR - OTHER example: OWNER externalCustomerId: type: string description: >- An external reference identifier mapping the customer of this profile to your system. example: 67890-biz-acct firstLevelCategory: type: string description: >- [Category](/guides/developer/api-guides/business-categories) of the business. example: CONSULTING_IT_BUSINESS_SERVICES secondLevelCategory: type: string description: >- [Secondary category](/guides/developer/api-guides/business-categories) of the business. example: DESIGN operationalAddresses: type: array description: List of operational addresses. items: type: object properties: addressFirstLine: type: string example: 1 A road city: type: string example: London countryIso2Code: type: string example: gb countryIso3Code: type: string example: gbr postCode: type: string example: '11111' stateCode: type: string maxLength: 5 webpage: type: string description: > Business webpage. Required if `companyType` is `OTHER`. If this is not provided for an `OTHER` companyType, the profile should not be allowed to create a transfer. For the rest of the companyTypes, it is highly recommended to always provide the business' website, to avoid payment issues such as suspensions. Wise will send a request for information (RFI) if this detail is not provided. example: https://abc-logistics.com responses: '200': description: Updated business profile. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/business-profile/business-representative: get: operationId: profileBusinessRepresentativeGet summary: Retrieve business representative description: | Get Business Representative info by Business Profile ID. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Business representative object. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' put: operationId: profileBusinessRepresentativeUpdate summary: Update business representative description: > 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object properties: updateContext: type: string description: Context of the update. enum: - UPDATE_DETAILS - TRANSFER_OF_AUTHORISATION example: UPDATE_DETAILS firstName: type: string description: >- First name of the person representing the business (including middle names). example: Oliver lastName: type: string description: Last name of the person representing the business. example: Wilson preferredName: type: string description: Preferred first name, if different to the legal first name. example: Olivia address: type: object properties: addressFirstLine: type: string description: First line of address. example: 50 Sunflower Ave city: type: string description: City. example: Phoenix countryIso3Code: type: string description: 3 letter country code (lower case). example: usa postCode: type: string description: Postal code. example: '10025' stateCode: type: string description: >- State code (max 5 chars). Required for US, CA, BR and AU addresses. example: AZ contactDetails: type: object properties: email: type: string description: >- Contact email address of the person representing the business. Please speak with your integration account manager for details on how customer communication is handled for your integration. example: o.wilson@example.com phoneNumber: type: string description: >- Contact phone number in international phone number format, example "+1408XXXXXXX" of the person representing the business. Please speak with your integration account manager for details on how customer communication is handled for your integration. example: '+3725064992' dateOfBirth: type: string description: Date of birth. example: '1977-07-01' actorEmail: type: string description: Email of the actor. example: biz-acct@abcl.com examples: updateDetails: summary: Update Details value: updateContext: UPDATE_DETAILS contactDetails: email: o.wilson@example.com phoneNumber: '+3725064992' transferOfAuthorisation: summary: Transfer of Authorisation value: updateContext: TRANSFER_OF_AUTHORISATION firstName: Oliver lastName: Wilson preferredName: Olivia address: addressFirstLine: 50 Sunflower Ave city: Phoenix countryIso3Code: usa postCode: '10025' stateCode: AZ dateOfBirth: '1977-07-01' contactDetails: email: o.wilson@example.com phoneNumber: '+3725064992' responses: '200': description: Business representative updated successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/verification-documents: post: operationId: profileVerificationDocumentCreate summary: Create an identification document description: > 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object properties: firstName: type: string description: Person first name in document. example: Oliver lastName: type: string description: Person last name in document. example: Wilson type: type: string description: Document type. enum: - DRIVERS_LICENCE - IDENTITY_CARD - GREEN_CARD - MY_NUMBER - PASSPORT - SSN - EMIRATES_EMPLOYER - EMIRATES_PLACE_OF_BIRTH - CPF_CNPJ - FINANCIAL_CAPACITY_BR - OTHER example: IDENTITY_CARD uniqueIdentifier: type: string maxLength: 30 description: >- Document number or value. Must be digits only when SSN or FINANCIAL_CAPACITY_BR. example: AA299822313 issueDate: type: string description: Document issue date. example: '2017-12-31' issuerCountry: type: string description: Issued by country code. For example "US". example: EE issuerState: type: string description: Issued by state code. For example "NY". example: '' expiryDate: type: string description: Document expiry date. example: '2027-12-31' nationality: type: string description: 2 characters ISO country code. employerName: type: string description: The name of the employer. Type must be EMIRATES_EMPLOYER. employerCity: type: string description: The city of the employer. Type must be EMIRATES_EMPLOYER. employerCountry: type: string description: >- 2 characters ISO country code. Type must be EMIRATES_EMPLOYER. birthCity: type: string description: The city of birth of the customer. birthCountry: type: string description: 2 characters ISO country code. examples: identityCard: summary: Identity Card value: firstName: Oliver lastName: Wilson type: IDENTITY_CARD uniqueIdentifier: AA299822313 issueDate: '2017-12-31' issuerCountry: EE issuerState: '' expiryDate: '2027-12-31' cpfCnpj: summary: CPF or CNPJ value: type: CPF_CNPJ uniqueIdentifier: 938.936.652-69 financialCapacityBr: summary: Financial Capacity Brazil value: type: FINANCIAL_CAPACITY_BR uniqueIdentifier: '150000.00' responses: '200': description: Identification document created successfully. content: application/json: schema: type: object properties: errorMessage: type: - string - 'null' example: null success: type: boolean example: true headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' put: operationId: profileVerificationDocumentUpdate summary: Update an identification document description: > 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object required: - type - clientId properties: clientId: type: string description: The partner's client ID. example: mercury firstName: type: string description: Person first name in document. example: Oliver lastName: type: string description: Person last name in document. example: Wilson type: type: string description: Document type. enum: - DRIVERS_LICENCE - IDENTITY_CARD - GREEN_CARD - MY_NUMBER - PASSPORT - SSN - EMIRATES_EMPLOYER - EMIRATES_PLACE_OF_BIRTH - CPF_CNPJ - FINANCIAL_CAPACITY_BR - OTHER example: IDENTITY_CARD uniqueIdentifier: type: string maxLength: 30 description: >- Document number or value. Must be digits only when SSN or FINANCIAL_CAPACITY_BR. example: AA299822313 issueDate: type: string description: Document issue date. example: '2017-12-31' issuerCountry: type: string description: Issued by country code. For example "US". example: EE issuerState: type: string description: Issued by state code. For example "NY". example: '' expiryDate: type: string description: Document expiry date. example: '2027-12-31' nationality: type: string description: 2 characters ISO country code. sex: type: string description: Sex as stated in the document. enum: - MALE - FEMALE example: MALE placeOfBirth: type: string description: Place of birth as stated in the document. example: London examples: identityCard: summary: Update Identity Card value: clientId: mercury firstName: Oliver lastName: Wilson type: IDENTITY_CARD uniqueIdentifier: AA299822313 issueDate: '2017-12-31' issuerCountry: EE issuerState: '' expiryDate: '2027-12-31' nationality: GB sex: MALE driversLicence: summary: Update Drivers Licence value: clientId: mercury firstName: Oliver lastName: Wilson type: DRIVERS_LICENCE uniqueIdentifier: DL12345 issueDate: '2020-01-15' issuerCountry: US issuerState: NY expiryDate: '2028-01-15' responses: '200': description: Identification document updated successfully. content: application/json: schema: type: object properties: errorMessage: type: - string - 'null' example: null success: type: boolean example: true headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: > Validation error. Possible error codes: - `not.allowed.for.clientId` — Partner is not found or is not a KYC partner. - `not.allowed.for.uniqueIdentifier` — Document number exceeds maximum length (30 characters). - `NotNull` — A required field (`type` or `clientId`) is missing. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string example: not.allowed.for.clientId message: type: string field: type: string headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/directors: post: operationId: profileDirectorCreate summary: Create business directors description: | Adds new directors to the business profile. Returns the list of all directors associated with the business profile. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: array items: type: object properties: firstName: type: string description: Director first name. example: John lastName: type: string description: Director last name. example: Doe dateOfBirth: type: string description: Date of birth. example: '1982-05-20' countryOfResidenceIso3Code: type: string description: 3 character country code. example: usa example: - firstName: John lastName: Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa - firstName: Jane lastName: Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa responses: '200': description: List of all directors associated with the business profile. content: application/json: schema: type: array items: $ref: '#/components/schemas/director' example: - id: 10 firstName: John lastName: Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa - id: 11 firstName: Jane lastName: Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: profileDirectorList summary: List business directors description: > Returns the list of director objects associated with the business profile. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of director objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/director' example: - id: 10 firstName: John lastName: Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa - id: 11 firstName: Jane lastName: Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' put: operationId: profileDirectorUpdate summary: Update business directors description: | Overrides directors in the business profile. Returns the list of all directors associated with the business profile. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: array items: type: object properties: firstName: type: string description: Director first name. example: John lastName: type: string description: Director last name. example: Doe dateOfBirth: type: string description: Date of birth. example: '1982-05-20' countryOfResidenceIso3Code: type: string description: 3 character country code. example: usa example: - firstName: John lastName: Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa - firstName: Jane lastName: Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa responses: '200': description: List of all directors associated with the business profile. content: application/json: schema: type: array items: $ref: '#/components/schemas/director' example: - id: 14 firstName: John lastName: Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa - id: 15 firstName: Jane lastName: Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/ubos: post: operationId: profileUboCreate summary: Create business ultimate owners description: > 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: array items: type: object properties: name: type: string description: Owner full name. example: John Doe dateOfBirth: type: string description: Date of birth. example: '1982-05-20' countryOfResidenceIso3Code: type: string description: 3 character country code. example: usa addressFirstLine: type: string description: First line of address. example: 123 Fake St postCode: type: string description: Address post code. example: FK 12345 ownershipPercentage: type: - integer - 'null' format: int32 description: Percentage of ownership. example: 30 examples: twoOwners: summary: Two beneficial owners (30/70 split) value: - name: John Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa addressFirstLine: 123 Fake St postCode: FK 12345 ownershipPercentage: 30 - name: Jane Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa addressFirstLine: 125 Fake St postCode: FK 12545 ownershipPercentage: 70 responses: '200': description: >- List of all ultimate beneficial owners associated with the business profile. content: application/json: schema: type: array items: $ref: '#/components/schemas/ubo' example: - id: 013ab1c2688d0185b582ee7e0bcb28b2 name: John Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa addressFirstLine: 123 Fake St postCode: FK 12345 ownershipPercentage: 30 - id: 912ce3f31c8b3a10572137e78417caa3 name: Jane Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa addressFirstLine: 125 Fake St postCode: FK 12545 ownershipPercentage: 70 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: profileUboList summary: List business ultimate owners description: > Returns the list of all ultimate beneficial owners associated with the business profile. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of ultimate beneficial owner objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/ubo' example: - id: 013ab1c2688d0185b582ee7e0bcb28b2 name: John Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa addressFirstLine: 123 Fake St postCode: FK 12345 ownershipPercentage: 30 - id: 912ce3f31c8b3a10572137e78417caa3 name: Jane Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa addressFirstLine: 125 Fake St postCode: FK 12545 ownershipPercentage: 70 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' put: operationId: profileUboUpdate summary: Update business ultimate owners description: > Overrides ultimate beneficial owners in the business profile. Returns the list of all ultimate beneficial owners associated with the business profile. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Business profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: array items: type: object properties: name: type: string description: Owner full name. example: John Doe dateOfBirth: type: string description: Date of birth. example: '1982-05-20' countryOfResidenceIso3Code: type: string description: 3 character country code. example: usa addressFirstLine: type: string description: First line of address. example: 123 Fake St postCode: type: string description: Address post code. example: FK 12345 ownershipPercentage: type: - integer - 'null' format: int32 description: Percentage of ownership. example: 30 examples: twoOwners: summary: Two beneficial owners (30/70 split) value: - name: John Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa addressFirstLine: 123 Fake St postCode: FK 12345 ownershipPercentage: 30 - name: Jane Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa addressFirstLine: 125 Fake St postCode: FK 12545 ownershipPercentage: 70 responses: '200': description: >- List of all ultimate beneficial owners associated with the business profile. content: application/json: schema: type: array items: $ref: '#/components/schemas/ubo' example: - id: ff01cf3f206b40c090a14a1e51163e9e name: John Doe dateOfBirth: '1982-05-20' countryOfResidenceIso3Code: usa addressFirstLine: 123 Fake St postCode: FK 12345 ownershipPercentage: 30 - id: c36b687d28ad44ad8c3864411f5f2612 name: Jane Doe dateOfBirth: '1981-12-07' countryOfResidenceIso3Code: usa addressFirstLine: 125 Fake St postCode: FK 12545 ownershipPercentage: 70 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/update-window: post: operationId: profileUpdateWindowOpen summary: Open an update window description: > Opens the update window for updating the profile information: details, addresses, directors, owners, others. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Update window opened successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: operationId: profileUpdateWindowClose summary: Close an update window description: | Deletes the update window for updating the profile. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Update window closed successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/extension-requirements: get: operationId: profileExtensionRequirementsGet summary: Retrieve profile extension requirements deprecated: true description: > {% 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, respectively. **This format for dynamic forms is the same as the one used for recipient creation.** See [Recipient Requirements](/api-reference/recipient/recipientaccountrequirementsget). Using profile extension requirements {% .title-4 .m-t-3 %} 1. First create a profile. See [Create Personal Profile](/api-reference/profile/profilepersonalcreate) and [Create Business Profile](/api-reference/profile/profilebusinesscreate). 2. Call `GET /v1/profiles/{profileId}/extension-requirements` to get the list of fields you need to fill with values in the "details" section for adding information that will make a profile valid. 3. Some fields require multiple levels of fields in the details request. This should be handled by the client based on the `refreshRequirementsOnChange` field. A top level field can have this field set to true, indicating that there are additional fields required depending on the selected value. To manage this you should create a request with all of the initially requested data and call the POST `extension-requirements` endpoint. You will be returned a response similar the previously returned data from GET `extension-requirements` but with additional fields. 4. Once you have built your full profile extension details object you can add it to add information to the profile. Building a user interface {% .title-4 .m-t-3 %} When requesting the form data from the `extension-requirements` endpoint, the response defines different types of extensions that can be added. Each extension type then has multiple fields describing the form elements required to be shown to collect information from the user. Each field will have a type value, these tell you the field type that your front end needs to render to be able to collect the data. A number of field types are permitted, these are: | type | UI element | |--------|-----------------------------------| | text | A free text box | | select | A selection box/dialog | | radio | A radio button choice between options | | date | A text box with a date picker | Example data is also included in each field which should be shown to the user, along with a regex or min and max length constraints that should be applied as field level validations. You can optionally implement the dynamic validation using the `validationAsync` field, however these checks will also be done when a completed profile extension is submitted to `POST /v1/profiles/{profileId}/extensions`. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Extension requirements response. content: application/json: schema: type: array items: type: object properties: type: type: string description: '"profile-extensions-requirements"' example: profile-extensions-requirements usageInfo: type: - string - 'null' example: null fields: type: array items: type: object properties: name: type: string description: Field description. group: type: array items: type: object properties: key: type: string description: >- Key is name of the field you should include in the JSON. name: type: string description: Display name. type: type: string description: >- Display type of field (e.g. text, select, etc). refreshRequirementsOnChange: type: boolean description: >- Tells you whether you should call POST extension-requirements once the field value is set to discover required lower level fields. required: type: boolean description: Indicates if the field is mandatory or not. displayFormat: type: - string - 'null' description: Display format pattern. example: type: - string - 'null' description: Example value. minLength: type: - integer - 'null' format: int32 description: Min valid length of field value. maxLength: type: - integer - 'null' format: int32 description: Max valid length of field value. validationRegexp: type: - string - 'null' description: Regexp validation pattern. validationAsync: type: - string - 'null' description: >- Deprecated. This validation will instead be performed when submitting the request. valuesAllowed: type: - array - 'null' items: type: object properties: key: type: string description: Value key. name: type: string description: Value name. example: - type: profile-extensions-requirements usageInfo: null fields: - name: Tell us what you're using TransferWise for group: - key: accountPurpose name: Account Purpose type: select refreshRequirementsOnChange: false required: true displayFormat: null example: null minLength: null maxLength: null validationRegexp: null validationAsync: null valuesAllowed: - key: CONTRIBUTING_TO_PERSONAL_SAVINGS name: Contributing to personal savings - key: GENERAL_MONTHLY_LIVING_EXPENSES name: General monthly living expenses - key: PAYING_FOR_GOODS_OR_SERVICES_ABROAD name: Paying for goods or services abroad - key: SENDING_MONEY_REGULARLY_TO_FAMILY name: Sending money regularly to family headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' post: operationId: profileExtensionRequirementsPost summary: Update profile extensions dynamically deprecated: true description: > {% 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object responses: '200': description: Updated extension requirements based on submitted values. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/extensions: post: operationId: profileExtensionsCreate summary: Submit profile extensions deprecated: true description: > {% 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: content: application/json: schema: type: object properties: details: type: object description: Extension details object with key-value pairs. example: details: accountPurpose: SENDING_MONEY_REGULARLY_TO_FAMILY responses: '200': description: Profile extensions submitted successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: profileExtensionsGet summary: Retrieve profile extensions deprecated: true description: > {% 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Profile extensions object. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/verification-status/bank-transfer: post: operationId: profileVerificationStatusCheck summary: Check profile verification status description: > 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. tags: - profile security: - UserToken: [] parameters: - name: profileId in: path required: true description: Profile ID. schema: type: integer format: int64 - name: source_currencies in: query required: true description: Comma-separated list of ISO 4217 currency codes. schema: type: string example: GBP,USD,EUR - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Verification status response. content: application/json: schema: type: object properties: routes: type: array items: type: object properties: source_currency: type: string description: ISO 4217 currency code. example: GBP maximum_entitled_amount: type: number description: >- Maximum entitled amount that can be transferred with the user's given verification state. example: 100000 current_status: type: string description: > Current verification status. - `verified` — Profile is verified. `maximum_entitled_amount` can be ignored (note that some regional limits may still apply). - `not_verified` with `maximum_entitled_amount: 0` — Profile is not verified. Any payments from the user will be delayed by verification. - `not_verified` with `maximum_entitled_amount > 0` — Profile is not yet verified but the user can make payments up to a cumulative limit. Once reached, further payments may be delayed by additional verification requirements. enum: - verified - not_verified example: verified request_id: type: string description: Request identifier. example: e66da5f6-2456-403c-bfcb-908885ee1a61 example: routes: - source_currency: GBP maximum_entitled_amount: 100000 current_status: verified - source_currency: USD maximum_entitled_amount: 0 current_status: not_verified - source_currency: EUR maximum_entitled_amount: 10000 current_status: not_verified request_id: e66da5f6-2456-403c-bfcb-908885ee1a61 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}/payment-tokens: post: operationId: pushProvisioningPaymentTokensList summary: List payment tokens for a card description: > 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. tags: - digital-wallet security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 example: 12345 - name: cardToken in: path required: true description: The card token. schema: type: string format: uuid example: a3f90c98-1cd1-4488-9050-2e32c696f8fa - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: walletNames: type: array description: List of supported wallet types. items: type: string enum: - APPLE_PAY - GOOGLE_PAY example: - APPLE_PAY - GOOGLE_PAY responses: '200': description: Returns all the payment tokens except deactivated. content: application/json: schema: type: object properties: paymentTokens: type: array items: type: object title: Payment Token properties: cardToken: type: string description: Card token. example: a3f90c98-1cd1-4488-9050-2e32c696f8fa walletName: type: string description: Wallet name. enum: - GOOGLE_PAY - APPLE_PAY example: GOOGLE_PAY paymentTokenUniqueReference: type: string description: Unique reference of the payment token. example: DSHRMC0000255389d1106783179b420aa5b5ca09ba2f12b8 panUniqueReference: type: string description: Unique reference of the PAN. example: FSHRMC000025538959679bc73c9d4fdc8031b20fa91d0e3b provisioningStatus: type: string description: > Payment token status. - `ACTIVE` — The token is active and available for payments - `SUSPENDED` — The token has been temporarily suspended - `INACTIVE` — The token is in the active wallet, but requires additional user authentication for use - `DEACTIVATED` — The status will not be visible, you can safely ignore it enum: - ACTIVE - SUSPENDED - INACTIVE - DEACTIVATED example: ACTIVE creationTime: type: string format: date-time description: Time when the payment token was created. example: '2025-10-02T21:26:00.377756354Z' modificationTime: type: string format: date-time description: Time when the payment token was last modified. example: '2025-10-02T21:26:00.378182498Z' example: paymentTokens: - cardToken: a3f90c98-1cd1-4488-9050-2e32c696f8fa walletName: GOOGLE_PAY paymentTokenUniqueReference: DSHRMC0000255389d1106783179b420aa5b5ca09ba2f12b8 panUniqueReference: FSHRMC000025538959679bc73c9d4fdc8031b20fa91d0e3b provisioningStatus: ACTIVE creationTime: '2025-02-06T15:34:23.877041000Z' modificationTime: '2025-02-06T15:34:23.877343000Z' - cardToken: a3f90c98-1cd1-4488-9050-2e32c696f8fa walletName: GOOGLE_PAY paymentTokenUniqueReference: DSHRMC0000255389e2f7133754ab4e2f87fc323730fdfd8e panUniqueReference: '' provisioningStatus: INACTIVE creationTime: '2025-06-25T22:05:47.116016000Z' modificationTime: '2025-06-25T22:05:47.116077000Z' - cardToken: a3f90c98-1cd1-4488-9050-2e32c696f8fa walletName: APPLE_PAY paymentTokenUniqueReference: DAPLMC000025538967ea1d7972414a93a6544a07dae27a8c panUniqueReference: FAPLMC0000255389d7df244df7244803aa2c4ce2a29c242a provisioningStatus: ACTIVE creationTime: '2025-08-19T21:28:28.434472000Z' modificationTime: '2025-08-19T21:28:28.434738000Z' - cardToken: a3f90c98-1cd1-4488-9050-2e32c696f8fa walletName: APPLE_PAY paymentTokenUniqueReference: DAPLMC0000255389c25cd65bf8084c168dbc4aa59708841a panUniqueReference: FAPLMC0000255389d7df244df7244803aa2c4ce2a29c242a provisioningStatus: SUSPENDED creationTime: '2025-08-04T01:37:30.658315000Z' modificationTime: '2025-08-04T01:37:30.658552000Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/cards/{cardToken}/payment-tokens/{paymentTokenUniqueReference}/activation: post: operationId: digitalWalletActivatePaymentToken summary: Manual provisioning payment token activation description: > 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 %} tags: - digital-wallet security: - UserToken: [] - ClientCredentialsToken: [] parameters: - name: profileId in: path required: true description: The profile ID schema: type: integer format: int64 example: 12345 - name: cardToken in: path required: true description: The card token schema: type: string format: uuid example: a3f90c98-1cd1-4488-9050-2e32c696f8fa - name: paymentTokenUniqueReference in: path required: true description: >- The payment token unique reference issued by the scheme token service schema: type: string example: DNITHE382607223583426199 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - activation properties: activation: type: string description: Approve or decline a payment token activation enum: - APPROVE - DECLINE example: APPROVE example: activation: APPROVE responses: '204': description: >- No Content - Payment token have been successfully activated or declined headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid request content: application/json: schema: type: object properties: type: type: string format: uri-reference description: Validation type error examples: - /errors/types/validation title: type: string description: A validation type exception examples: - Validation Error status: type: string description: The HTTP status error code examples: - 400 instance: type: string description: The uri the triggered a validation error examples: - >- /public/v3/spend/profiles/2/cards/f47da127-7b8c-4312-8f10-dd2d70e6912b/payment-tokens/DNI234089950342/activation errors: type: array description: A list of specific validation failures. items: type: object properties: detail: type: string description: A detailed description of the validation failure. examples: - activation value must be APPROVE or DECLINE code: type: string description: A specific code for the validation failure type. examples: - invalid_value ref: type: string description: A reference to the field that failed validation. examples: - activation headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Forbidden request content: application/problem+json: schema: type: object properties: type: type: string description: An access type exception examples: - /errors/types/access title: type: string description: The title of the exception examples: - Forbidden status: type: string description: The HTTP status error code examples: - 403 detail: type: string description: A detailed description of the validation failure examples: - Operation is unauthorized instance: type: string description: The uri the triggered a validation error examples: - >- /public/v3/spend/profiles/2/cards/f47da127-7b8c-4312-8f10-dd2d70e6912b/payment-tokens/DNI234089950342/activation code: type: string description: A specific application-level code examples: - unauthorized headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Not found content: application/problem+json: schema: type: object properties: type: type: string description: An domain type exception examples: - /errors/types/domain title: type: string description: The title of the exception examples: - Not found status: type: string description: The HTTP status error code examples: - 404 detail: type: string description: A detailed description of the validation failure examples: - Payment Token Unique Reference does not exist instance: type: string description: The uri the triggered a validation error examples: - >- /public/v3/spend/profiles/2/cards/f47da127-7b8c-4312-8f10-dd2d70e6912b/payment-tokens/DNI234089950342/activation code: type: string description: A specific application-level code examples: - resource_not_found headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' '500': description: Server side error content: application/problem+json: schema: type: object properties: type: type: string description: An server type exception examples: - /errors/types/server title: type: string description: The title of the exception examples: - Internal Server Error status: type: string description: The HTTP status error code examples: - 500 detail: type: string description: A detailed description of the validation failure examples: - An unexpected error occurred during card tokenisation instance: type: string description: The uri the triggered a validation error examples: - >- /public/v3/spend/profiles/2/cards/f47da127-7b8c-4312-8f10-dd2d70e6912b/payment-tokens/DNI234089950342/activation headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' /twcard-data/v1/push-provisioning/encrypted-payload/google-pay: post: operationId: pushProvisioningGooglePayGet summary: Push provisioning for Google Pay description: > 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 %} tags: - digital-wallet servers: - url: https://twcard.wise.com description: Production Environment - url: https://twcard.wise-sandbox.com description: Sandbox Environment security: - UserToken: [] parameters: - name: x-tw-twcard-card-token in: header required: true description: >- The card token identifying which card to retrieve push provisioning data for. schema: type: string format: uuid example: a3f90c98-1cd1-4488-9050-2e32c696f8fa - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - clientDeviceId - clientWalletAccountId properties: clientDeviceId: type: string description: >- Stable device identification set by Wallet Provider. Could be computer identifier or ID tied to hardware such as TEE_ID or SE_ID. This field must match the `clientDeviceId` wallet provider will send in token provision request. example: ed6abb56323ba656521ac476 clientWalletAccountId: type: string description: >- Client-provided consumer ID that identifies the Wallet Account Holder entity. example: walletid responses: '200': description: Encrypted cardholder information for Google Pay. content: application/json: schema: type: object properties: opaquePaymentCard: type: string description: >- Encrypted authentication and activation data following card scheme and wallet provider specifications. The response is encoded in Base64. example: eyJraWQiOiIwQk... cardNetwork: type: string description: Card network. enum: - CARD_NETWORK_VISA - CARD_NETWORK_MASTERCARD example: CARD_NETWORK_VISA tokenServiceProvider: type: string description: Token service provider. enum: - TOKEN_PROVIDER_VISA - TOKEN_PROVIDER_MASTERCARD example: TOKEN_PROVIDER_VISA cardDisplayName: type: string description: Default card name that will be displayed in wallet. example: Wise Card cardLastDigits: type: string description: Last 4 digits of the card PAN. example: '1234' userAddress: type: object description: Entire address and phone number associated with the card. properties: addressLine1: type: string description: First line of the address. example: 56 Shoreditch High St addressLine2: type: string description: Second line of the address. example: The Tea Bldg countryCode: type: string description: Country code. example: GB locality: type: string description: City or locality. example: London administrativeArea: type: string description: State or administrative area. example: '' name: type: string description: Cardholder name. example: John Smith phoneNumber: type: string description: Phone number associated with the card. example: '+441234567890' postalCode: type: string description: Postal code. example: E1 6JJ headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /twcard-data/v1/push-provisioning/encrypted-payload/apple-pay: post: operationId: pushProvisioningApplePayGet summary: Push Provisioning for Apple Pay description: > 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 %} tags: - digital-wallet servers: - url: https://twcard.wise.com description: Production Environment - url: https://twcard.wise-sandbox.com description: Sandbox Environment security: - UserToken: [] parameters: - name: x-tw-twcard-card-token in: header required: true description: >- The card token identifying which card to retrieve push provisioning data for. schema: type: string format: uuid example: a3f90c98-1cd1-4488-9050-2e32c696f8fa - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - certificates - nonce - nonceSignature properties: certificates: type: array description: >- DER encoded X.509 ECC leaf and sub CA certificates, each encoded in Base64. items: type: string example: - MIICpTCCAkqgAwIBAgIIB... - MIICpTCCAYmgAwIBAgIIX... nonce: type: string description: >- One time use nonce generated by Apple Servers and HEX encoded on iOS app. example: a1b2c3d4e5f6 nonceSignature: type: string description: >- The device and account specific signature of the nonce generated by Apple and HEX encoded on iOS app. example: f6e5d4c3b2a1 responses: '200': description: Encrypted cardholder information for Apple Pay. content: application/json: schema: type: object properties: encryptedPassData: type: string description: >- Encrypted authentication data following card scheme and wallet provider specifications. The response is encoded in Base64. example: >- 443232323637393045DDE321469537FE461E824AA55BA67BF645454330A32433610DE1D1461475BEB6D815F31764DDC20298BD779FBE37EE5AB3CBDA9F9825E1 activationData: type: string description: >- Encrypted activation data following card scheme and wallet provider specifications. The response is encoded in Base64. example: KDlTthhZTGufMY…….xPSUrfmqCHXaI9wOGY= ephemeralKey: type: string description: >- Ephemeral key used to encrypt authentication data. The response is encoded in Base64. example: A1B2C3D4E5F6112233445566 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/quotes: post: operationId: quoteCreateUnauthenticated summary: Create a quote (unauthenticated) description: > 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 %} tags: - quote security: - ClientCredentialsToken: [] - {} requestBody: required: true content: application/json: schema: type: object required: - sourceCurrency - targetCurrency properties: sourceCurrency: type: string description: Source (sending) currency code. example: GBP targetCurrency: type: string description: Target (receiving) currency code. example: USD sourceAmount: type: - number - 'null' description: >- Amount in source currency. Either sourceAmount or targetAmount is required, never both. example: null targetAmount: type: - number - 'null' description: Amount in target currency. example: 110 pricingConfiguration: type: object description: >- Required when configured for your client ID. Includes a pricingConfiguration to be used for pricing calculations with the quote. properties: fee: type: object properties: type: type: string description: >- Identifies the type of fee that will be configured. Options include only `OVERRIDE`. example: OVERRIDE variable: type: number description: >- The selected variable percentage (in decimal format) that should be used in the pricingConfiguration. example: 0.011 fixed: type: number description: >- The selected fixed fee that should be used in the pricingConfiguration. Always considered in source currency. example: 15.42 responses: '200': description: Returns a quote object. content: application/json: schema: $ref: '#/components/schemas/quote' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v3/profiles/{profileId}/quotes: post: operationId: quoteCreate summary: Create a quote (authenticated) description: > {% 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` array in order to know which fees to display to your customer. Find the paymentOption that matches the `payOut` field shown at the top level of the quote resource and `payIn` based on the settlement model the bank is using. By default, this is `BANK_TRANSFER`, unless you are using a prefunded or bulk settlement model. The `payOut` field will change based on the type of recipient you add to the quote in the `PATCH /quote` call, for example to-USD `swift_code` or to-CAD `interac` have different fees. For example sending USD to a country other than the United States is supported but with different fees to domestic USD transfers. Please see the later section on [Global Currencies](/guides/product/send-money/swift-network-transfers) to learn more about how to offer this useful feature. For each paymentOption there is a price field. It gives a full breakdown of all the taxes, fees and discounts. It is preferable to refer to this structure to show breakdowns and totals, rather than the fee structure, found as well in each paymentOption element, that only gives a summary and is not able to surface important specifics such as taxes. When showing the price of a transfer always show the 'price.total.value.amount' of a payment option. #### Disabled Payment Options Each payment option is either enabled or disabled based on the `disabled` value. Disabled payment options should be shown to the user in a disabled state in most cases. This ensures users are given the options that they are familiar with regardless of their availability, as well as with options that can be beneficial to their accounts. The `option.disabledReason` contains both the `code` and `message`, with the message being the user-friendly text to surface to the user if necessary. #### Transfer Nature for BRL When creating or updating a quote, the transfer nature can be set. This is a requirement for transfers to or from BRL and impacts the fees we charge on the quote, specifically the IOF. Note that IOF is determined based on the transfer nature, sender information, and recipient information. The default IOF will be included in a quote until all relevant information has been included. {% admonition type="info" %} Omitting transfer nature will not prevent the transfer from being created or even funded. However, when attempting to process the transfer, it will be blocked and the money will be refunded to the sender. {% /admonition %} #### Pricing Configuration When creating or updating a quote, partners that have flexible partner pricing enabled are able to override the pricing configuration dynamically. To learn more on how to use this feature, please see the [Flexible Partner Pricing Guide](/guides/product/send-money/quotes/pricing) tags: - quote security: - UserToken: [] parameters: - name: profileId in: path required: true description: Personal or business profile ID of the sender. schema: type: integer format: int64 example: 101 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - sourceCurrency - targetCurrency properties: sourceCurrency: type: string description: Source (sending) currency code. example: GBP targetCurrency: type: string description: Target (receiving) currency code. example: USD sourceAmount: type: - number - 'null' description: >- Amount in source currency. Either sourceAmount or targetAmount is required, never both. example: 100 targetAmount: type: - number - 'null' description: Amount in target currency. example: null targetAccount: type: integer format: int64 description: >- Optional. This is the ID of transfer recipient, found in response from POST v1/accounts (recipient creation). If provided can be used as an alternative to [updating the quote](/api-reference/quote/quoteupdate). example: 12345 payOut: type: - string - 'null' description: >- Optional. Preferred payout method. Default value is `BANK_TRANSFER`. Examples of other accepted values include `BALANCE`, `SWIFT`, `SWIFT_OUR`, `ALIPAY`, and `INTERAC`. example: null preferredPayIn: type: - string - 'null' description: >- Optional. Preferred payin method. Use `BANK_TRANSFER` to return this method at the top of the response's results. example: null paymentMetadata: type: object description: >- Optional. Used to pass additional metadata about the intended transfer. properties: transferNature: type: string description: >- Optional. Used to pass transfer nature for calculating proper tax amounts (IOF) for transfers to and from BRL. Accepted values are shown dynamically in transfer requirements. example: MOVING_MONEY_BETWEEN_OWN_ACCOUNTS pricingConfiguration: type: object description: >- Required when configured for your client ID. Includes a `pricingConfiguration` to be used for pricing calculations with the quote. properties: fee: type: object properties: type: type: string description: >- Identifies the type of fee that will be configured. Options include only `OVERRIDE`. example: OVERRIDE variable: type: number description: >- The selected variable percentage (in decimal format) that should be used in the pricingConfiguration. example: 0.011 fixed: type: number description: >- The selected fixed fee that should be used in the pricingConfiguration. Always considered in source currency. example: 15.42 responses: '200': description: Returns a quote object. content: application/json: schema: $ref: '#/components/schemas/quote' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/quotes/{quoteId}: get: operationId: quoteGet summary: Retrieve a quote by ID description: > 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. tags: - quote security: - UserToken: [] parameters: - name: profileId in: path required: true description: Personal or business profile ID. schema: type: integer format: int64 example: 101 - name: quoteId in: path required: true description: The quote ID (GUID format). schema: type: string format: uuid example: 11144c35-9fe8-4c32-b7fd-d05c2a7734bf - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Returns a quote object. content: application/json: schema: $ref: '#/components/schemas/quote' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' patch: operationId: quoteUpdate summary: Update a quote description: > 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 correct `paymentOption` and hence show the correct pricing to users. If you want to provide more transparency in terms of fees charged when your customers create quote with swift recipient for global currencies, you might consider to set payOut field with SWIFT_OUR value. This will ensure that the recipient receives complete target amount. In this case, where pricing changes after a user selects recipient, you should show a message to your customer before confirming the transfer. Please see the section on [Global Currencies](/guides/product/send-money/swift-network-transfers) to learn more how and why this works and the messaging you need to display. #### Transfer Nature for BRL When creating or updating a quote, the transfer nature can be set. This is a requirement for transfers to or from BRL and impacts the fees we charge on the quote, specifically the IOF. Note that IOF is determined based on the transfer nature, sender information, and recipient information. The default IOF will be included in a quote until all relevant information has been included. {% admonition type="info" %} Omitting transfer nature will not prevent the transfer from being created or even funded. However, when attempting to process the transfer, it will be blocked and the money will be refunded to the sender. {% /admonition %} tags: - quote security: - UserToken: [] parameters: - name: profileId in: path required: true description: Personal or business profile ID. schema: type: integer format: int64 example: 101 - name: quoteId in: path required: true description: The quote ID (GUID format). schema: type: string format: uuid example: 11144c35-9fe8-4c32-b7fd-d05c2a7734bf - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/merge-patch+json: schema: type: object properties: targetAccount: type: integer format: int64 description: >- ID of transfer recipient, found in response from POST v1/accounts (recipient creation). example: 12345 payOut: type: string description: >- Optional. Preferred payout method. Default value is `BANK_TRANSFER`. Examples of other accepted values include `BALANCE`, `SWIFT`, `SWIFT_OUR`, `ALIPAY`, and `INTERAC`. example: SWIFT_OUR paymentMetadata: type: object description: >- Optional. Used to pass additional metadata about the intended transfer. properties: transferNature: type: string description: >- Optional. Used to pass transfer nature for calculating proper tax amounts (IOF) for transfers to and from BRL. Accepted values are shown dynamically in transfer requirements. example: MOVING_MONEY_BETWEEN_OWN_ACCOUNTS pricingConfiguration: type: object description: >- Required when configured for your client ID. Includes a pricingConfiguration to be used for pricing calculations with the quote. If previously passed, the existing pricingConfiguration will remain and not be updated. properties: fee: type: object properties: type: type: string description: >- Identifies the type of fee that will be configured. Options include only `OVERRIDE`. example: OVERRIDE variable: type: number description: >- The selected variable percentage (in decimal format) that should be used in the pricingConfiguration. example: 0.011 fixed: type: number description: >- The selected fixed fee (in source currency) that should be used in the pricingConfiguration. example: 15.42 responses: '200': description: Returns a quote object. content: application/json: schema: $ref: '#/components/schemas/quote' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/rates: get: operationId: rateGet summary: Retrieve current rates description: > {% admonition type="warning" %} The `from`, `to`, and `group` parameters are not testable in our Sandbox environment at this time. {% /admonition %} `GET /v1/rates`
Fetch latest exchange rates of all currencies. `GET /v1/rates?source=EUR&target=USD`
Fetch latest exchange rate of one currency pair. `GET /v1/rates?source=EUR&target=USD&time=2019-02-13T14:53:01`
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`
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`
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`
Fetch exchange rate history over period of time with 1 minute interval. {% admonition type="warning" %} This endpoint only supports Bearer authentication for non-Affiliate partners. {% /admonition %} tags: - rate security: - UserToken: [] - PersonalToken: [] parameters: - name: source in: query required: false description: Source (send) currency code. schema: type: string example: EUR - name: target in: query required: false description: Target (receive) currency code. schema: type: string example: USD - name: time in: query required: false description: > Timestamp to get historic exchange rate.
Supports only Timestamp (combined date and time). Timezone offset is supported but optional.
Supported examples: `2019-03-13T14:53:01` or `2019-03-13T14:53:01+0100`. schema: type: string example: '2019-02-13T14:53:01' - name: from in: query required: false description: > Period start date/time to get exchange rate history.
Supports Timestamp (combined date and time) or Date (date only).
Supported examples: `2019-03-13T14:53:01` or `2019-03-13`. schema: type: string example: '2019-02-13T14:53:01' - name: to in: query required: false description: > Period end date/time to get exchange rate history.
Supports Timestamp (combined date and time) or Date (date only).
Timezone offset is supported but optional.
Supported examples: `2019-03-13T14:53:01+0100` or `2019-03-13+0100`. schema: type: string example: '2019-03-13T14:53:01' - name: group in: query required: false description: Interval for history grouping. schema: type: string enum: - day - hour - minute example: day - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of exchange rate values which meet your query criteria. content: application/json: schema: type: array items: type: object description: The resulting Rate object. required: - rate - source - target - time properties: rate: type: number format: double description: Exchange rate value. example: 1.166 source: type: string description: Source (send) currency code. example: EUR target: type: string description: Target (receive) currency code. example: USD time: type: string description: Timestamp for exchange rate. example: 2018-08-31T10:43:31+0000 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Invalid request. content: application/json: examples: badRequest: value: error: Bad Request message: Invalid parameters path: null status: 400 timestamp: '2026-01-01T06:56:29.923935466Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/accounts: get: operationId: recipientListV1 summary: List recipient accounts (v1) deprecated: true description: > {% 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. tags: - recipient security: - UserToken: [] parameters: - name: profileId in: query required: false description: >- Filter by personal or business profile, returns only those owned by this profile. schema: type: integer format: int64 - name: currency in: query required: false description: Filter responses by currency. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Array of v1 recipient account objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/recipient-v1' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' post: operationId: recipientCreate summary: Create a recipient account description: > 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, SEK** — IBAN - **USD** — routing number, account number, account type - **INR** — IFSC code, account number - etc. #### Address data Recipient address data is required only if target currency is **USD, PHP, THB or TRY**, or if the source currency is **USD or AUD**. Address fields can include: - Country - State (US, Canada, Brazil) - City - Address line - Zip code #### accountHolderName rules - **Personal recipients:** Full names must include more than one name, and both first and last name must have more than one character. Numbers are not allowed. - **Business recipients:** Business names must be in full and can be a single name. The full name cannot be just a single character, but can be made up of a set of single characters (e.g. `"A"` is not permitted but `"A 1"` or `"A1"` is permitted). - Special characters `_()'*,.` are allowed for personal and business names. - In general the following regex describes permitted characters: `[0-9A-Za-zÀ-ÖØ-öø-ÿ-_()'*,.\s]`. Recipient requirements vary depending on recipient type/currency route. A GBP example is provided here.
Many fields may be `null` in examples. To determine which fields are required for which currency, use the **[Recipient Requirements](/api-reference/recipient/recipientAccountRequirementsGet)** endpoint. #### Create a refund recipient account `POST /v1/accounts?refund=true` Sometimes we may need to refund the transfer back to the sender - see the [transfer status here](/guides/product/send-money/tracking-transfers) for cases when this may happen. A refund recipient is a person or institution where we will refund transfer the money back to if necessary. This is not always a mandatory resource to create. If the funds are sent over a fast local payment network we can usually infer the refund recipient from the bank transaction that funded the transfer. Please discuss this with your Wise implementation team if you are unsure if the refund recipient is needed. If funds are sent using a slow domestic payment network, or you are using a bulk settlement model, we may require you to share the bank details of the source bank account. The format of the request payload for refund recipient creation will be different depending on the currency you will send transfers from. You may use the [account requirements](/api-reference/recipient/recipientaccountrequirementsget) endpoint to understand the payload requirements when creating the refund recipient for a specific currency. The refund recipient account ID returned in the response is used as `sourceAccount` when [creating transfers](/guides/product/send-money/transfers). #### Create an email recipient account `POST /v1/accounts` {% admonition type="warning" %} Please contact us before attempting to use email recipients. We do not recommend using this feature except for certain use cases. {% /admonition %} If you don't know recipient bank account details you can set up an email recipient; Wise will collect bank details directly from the recipient. Wise will email your recipient with a link to collect their bank account details securely. After the bank account details have been provided Wise will complete your transfer. It's best to confirm that this recipient type is available to your transaction by checking if the `"type": "email"` class is present in the response from `GET /v1/quotes/{quoteId}/account-requirements` — see **[account requirements](/api-reference/recipient/recipientAccountRequirementsGet)** for more information on how to use this endpoint. If planning to send multiple currencies to a single recipient, you will need to create a separate email recipient resource for this beneficiary, for every currency you intend to send to them. We highly encourage you to provide the `{profileId}` if your recipient is receiving a payment from your Business account, especially if you have multiple businesses, or have multiple users administrating your business account. Please be aware of the following caveats: - Testing of transfers to email recipients in sandbox is not currently possible. - Recipients will be required to enter bank details **every time a payment is made**. - We highly encourage you to provide the `profileId` if your recipient is receiving a payment from your Business account, especially if you have multiple businesses, or have multiple users administrating your business account. - Please refer to our **[help page](https://wise.com/help/articles/2932105/can-i-send-money-to-someone-with-only-their-email-address)** on how this works and any additional constraints not mentioned in this section. tags: - recipient security: - UserToken: [] parameters: - name: refund in: query required: false description: When true, creates a refund recipient account. schema: type: boolean default: false - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/recipient-create-request' examples: GBP recipient: summary: GBP recipient value: currency: GBP type: sort_code profile: 30000000 ownedByCustomer: true accountHolderName: John Doe details: legalType: PRIVATE sortCode: '040075' accountNumber: '37778842' dateOfBirth: '1961-01-01' Email recipient: summary: Email recipient value: profile: 30000000 accountHolderName: John Doe currency: EUR type: email details: email: john.doe@transfer-world.com responses: '200': description: Recipient account created successfully. content: application/json: schema: $ref: '#/components/schemas/recipient' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad Request — validation error. content: application/json: schema: type: object description: Recipient creation validation error response. properties: timestamp: type: string description: Timestamp of occurrence (ISO-8601 timestamp). example: '2024-12-06T06:43:52.472471344Z' errors: type: array description: List of validation errors. items: type: object properties: code: type: string description: Error code (e.g. NOT_VALID). example: NOT_VALID message: type: string description: Human-readable error message. example: >- Unknown bank code. Please check the sort code is correct, or contact customer support for more information. path: type: string description: Field associated with the error. example: sortCode arguments: type: array description: Field with error as well as input value. items: type: string example: - sortCode - '231479' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: Unauthorized. content: application/json: examples: UnauthorizedResponse: value: error_description: Invalid token error: invalid_token headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/accounts: get: operationId: recipientList summary: List recipient accounts description: > 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: `?sort=id,asc` sort by `id` ascending.
`?sort=id,desc` sort by `id` descending.
`?sort=currency,asc` sort by currency ascending. All query parameters are optional. tags: - recipient security: - UserToken: [] parameters: - name: creatorId in: query required: false description: Creator of the account. schema: type: integer format: int64 - name: profileId in: query required: false description: >- Filter by personal or business profile. Defaults to the personal profile. schema: type: integer format: int64 - name: profile in: query required: false description: Alias for `profileId`. schema: type: integer format: int64 - name: currency in: query required: false description: >- Filter responses by currency. Comma separated values supported (e.g. `USD,GBP`). schema: type: string - name: active in: query required: false description: Filter by whether this profile is active. Defaults to `true`. schema: type: boolean default: true - name: type in: query required: false description: >- Filter responses by account type. Comma separated values supported (e.g. `iban,swift_code`). schema: type: string - name: ownedByCustomer in: query required: false description: >- Filter to get accounts owned by the customer or not. Leave out to get all accounts. schema: type: boolean - name: size in: query required: false description: Page size of the response. Defaults to a maximum of 20. schema: type: integer format: int32 maximum: 20 - name: seekPosition in: query required: false description: >- Account ID to start the page of responses from. `null` if no more pages. schema: type: - integer - 'null' format: int64 - name: sort in: query required: false description: >- Sorting strategy for the response. Comma separated options - firstly either `id` or `currency`, followed by `asc` or `desc` for direction. schema: type: string example: id,asc - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Paginated list of recipient accounts. content: application/json: schema: type: object properties: content: type: array description: List of recipient accounts returned for this page. items: $ref: '#/components/schemas/recipient' seekPositionForNext: type: integer format: int64 description: >- Seek position for the next page (use as `seekPosition` to fetch the next page). seekPositionForCurrent: type: integer format: int64 description: Seek position for the current page. sort: type: object description: Sort metadata. properties: empty: type: boolean sorted: type: boolean unsorted: type: boolean size: type: integer format: int32 description: Page size returned. example: 20 example: content: - id: 40000000 creatorId: 41000000 profileId: 30000000 name: fullName: John Doe givenName: null familyName: null middleName: null patronymicName: null cannotHavePatronymicName: null currency: GBP country: GB type: SortCode legalEntityType: PERSON active: true details: reference: null sortCode: '040075' accountNumber: '37778842' hashedByLooseHashAlgorithm: >- ad245621b974efa3ef870895c3wer419a3f01af18a8a5790b47645dba6304194 commonFieldMap: accountNumberField: accountNumber bankCodeField: sortCode hash: >- 666ef880f8aa6113fa112ba6531d3ed2c26dd9fgbd7de5136bfb827a6e800479 accountSummary: (04-00-75) 37778842 longAccountSummary: GBP account ending in 8842 displayFields: - key: details/sortCode label: UK sort code value: 04-00-75 - key: details/accountNumber label: Account number value: '37778842' isInternal: false ownedByCustomer: false seekPositionForNext: 40000001 seekPositionForCurrent: 40000000 sort: empty: true sorted: false unsorted: true size: 20 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: Unauthorized. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Forbidden. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/accounts/{accountId}: get: operationId: recipientGetV1 summary: Get account by ID (v1) deprecated: true description: > {% 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. tags: - recipient security: - UserToken: [] parameters: - name: accountId in: path required: true description: Recipient account ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: V1 recipient account details. content: application/json: schema: $ref: '#/components/schemas/recipient-v1' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/accounts/{accountId}: get: operationId: recipientGet summary: Get account by ID description: > Get recipient account info by ID. {% admonition type="info" %} V1 and v2 versions are cross compatible, but the v2 endpoint provides additional features. {% /admonition %} tags: - recipient security: - UserToken: [] parameters: - name: accountId in: path required: true description: Recipient account ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Recipient account details. content: application/json: schema: $ref: '#/components/schemas/recipient' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: operationId: recipientDeactivate summary: Deactivate a recipient account description: > 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 %} tags: - recipient security: - UserToken: [] parameters: - name: accountId in: path required: true description: Recipient account ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Recipient returned with `active=false`. content: application/json: schema: $ref: '#/components/schemas/recipient' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/quotes/{quoteId}/account-requirements: get: operationId: recipientAccountRequirementsGet summary: Retrieve recipient account requirements dynamically description: > {% 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`
`POST /v1/quotes/{quoteId}/account-requirements`
`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 example of this would be `address.country`. Some countries, like the United States, have a lower level organization, `"state"` or `"territory"`. After POSTing the recipient payload with address.country = "US", the list of possible states will appear in the response. The third endpoint above is used to get account requirements for a specific currency route and amount without referring to a quote but with the amount, source and target currencies passed as URL parameters. Generally this approach is not recommended, you should have your user create a quote resource first and use this to generate the recipient account requirements. This is because some payout methods will only surface when the profile-context is known, for example (at the time of this writing), Business Payments to Chinese Yuan use a different payout method than what is revealed by `GET /v1/account-requirements?source=USD&target=CNY&sourceAmount=1000`. All new integrations should use the v1.1 of `GET` and `POST` account requirements, enabled using the `Accept-Minor-Version` header. It enables you to fetch the requirements including both the recipient name and email fields in the dynamic form, simplifying implementation of the form. Name and email address dynamic fields are required to support currencies such as KRW, JPY and RUB, and also remove the need for manual name validation. These endpoints allow use of both v1 and v2 quotes using long or UUID based IDs, supporting legacy implementations using v1 quotes. These endpoints accept an optional query parameter **originatorLegalEntityType**. When the transfer is initiated by a [Third Party Partner](/guides/product/kyc/partner-accounts) we are not aware whether the actual sender is a business or person. In such cases, this parameter should be passed to receive correct requirements. The legal entity type should be one of the following values: `BUSINESS`, `PRIVATE`. This parameter is optional and the default value is the type of the partner profile. #### Collecting Recipient Address Normally our account requirements will instruct when a recipient address is required. However, in some situations it's desirable to force the requirement so that an address can be provided to Wise. To do this, add the query parameter `?addressRequired=true` to your request and address will always be returned as a required field. {% admonition type="warning" %} Address requirement fields are subject to change. Your integration should be built in a way to handle unrecognized or changed fields. {% /admonition %} tags: - recipient security: - UserToken: [] parameters: - name: quoteId in: path required: true description: Quote ID (supports long or UUID based IDs). schema: type: string - name: originatorLegalEntityType in: query required: false description: Legal entity type override for the actual sender. schema: type: string enum: - BUSINESS - PRIVATE - name: addressRequired in: query required: false description: Set to true so address is always required. schema: type: boolean default: false - name: Accept-Minor-Version in: header required: false description: Set to `1` to enable v1.1. schema: type: integer enum: - 1 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Dynamic account requirements for building a recipient form. content: application/json: schema: $ref: '#/components/schemas/account-requirements-response' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '401': description: Unauthorized. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '403': description: Forbidden. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Not Found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' post: operationId: recipientAccountRequirementsPost summary: Retrieve recipient account requirements dynamically (step-by-step) description: > 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. tags: - recipient security: - UserToken: [] parameters: - name: quoteId in: path required: true description: Quote ID (supports long or UUID based IDs). schema: type: string - name: originatorLegalEntityType in: query required: false description: Legal entity type override for the actual sender. schema: type: string enum: - BUSINESS - PRIVATE - name: Accept-Minor-Version in: header required: false description: Set to `1` to enable v1.1. schema: type: integer enum: - 1 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/recipient-create-request' responses: '200': description: Updated account requirements based on provided data. content: application/json: schema: $ref: '#/components/schemas/account-requirements-response' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/accounts/{accountId}/quotes/{quoteId}/compatibility: post: operationId: recipientCompatibilityCheckV1 summary: Check account and quote compatibility (v1) deprecated: true description: > {% 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 verification enabled. If absent, only standard validations apply. {% /admonition %} tags: - recipient security: - UserToken: [] parameters: - name: accountId in: path required: true description: Recipient account ID. schema: type: integer format: int64 - name: quoteId in: path required: true description: Quote ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: >- Compatibility result including any verification outcomes. See [Verifying Recipient Details](/guides/developer/api-guides/recipient-verification) for details on handling the `confirmations` object. content: application/json: schema: type: object properties: accountId: type: integer format: int64 description: Recipient account ID. example: 40000000 quoteId: type: string description: Quote ID. example: 00000000-0000-0000-0000-000000000000 confirmations: $ref: '#/components/schemas/confirmations' example: accountId: 40000000 quoteId: 00000000-0000-0000-0000-000000000000 confirmations: acceptedOutcomes: false acceptedAt: null quoteId: 00000000-0000-0000-0000-000000000000 outcomes: - type: NAME_MATCHING outcome: PARTIAL_FAILURE requiresCustomerAcceptance: true fieldsChecked: - accountHolderName - details/accountNumber message: >- The name entered is slightly different to the name on the account. providedName: John Doe resolvedName: Joe Doe recommendedUpdates: - path: accountHolderName value: Joe Doe headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/accounts/{accountId}/quotes/{quoteId}/compatibility: post: operationId: recipientCompatibilityCheck summary: Check account and quote compatibility description: > 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 %} tags: - recipient security: - UserToken: [] parameters: - name: accountId in: path required: true description: Recipient account ID. schema: type: integer format: int64 - name: quoteId in: path required: true description: Quote ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: >- Compatibility result including any verification outcomes. See [Verifying Recipient Details](/guides/developer/api-guides/recipient-verification) for details on handling the `confirmations` object. content: application/json: schema: type: object properties: accountId: type: integer format: int64 description: Recipient account ID. example: 40000000 quoteId: type: string description: Quote ID. example: 00000000-0000-0000-0000-000000000000 confirmations: $ref: '#/components/schemas/confirmations' example: accountId: 40000000 quoteId: 00000000-0000-0000-0000-000000000000 confirmations: acceptedOutcomes: false acceptedAt: null quoteId: 00000000-0000-0000-0000-000000000000 outcomes: - type: NAME_MATCHING outcome: PARTIAL_FAILURE requiresCustomerAcceptance: true fieldsChecked: - name/fullName - details/accountNumber message: >- The name entered is slightly different to the name on the account. providedName: John Doe resolvedName: Joe Doe recommendedUpdates: - path: name/fullName value: Joe Doe headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/accounts/{accountId}/confirmations: patch: operationId: recipientConfirmationsAccept summary: Accept confirmation outcomes description: > 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 %} tags: - recipient security: - UserToken: [] parameters: - name: accountId in: path required: true description: Recipient account ID. schema: type: integer format: int64 - name: quoteId in: query required: false description: Required if the confirmation result contained a `quoteId`. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - acceptedOutcomes properties: acceptedOutcomes: type: boolean description: Set to `true` to accept the confirmation outcomes. example: true responses: '200': description: Recipient with updated confirmation status. content: application/json: schema: $ref: '#/components/schemas/recipient' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/transfers/{transferId}/{status}: get: operationId: simulationTransferStateChange summary: Simulate transfer state change description: > Changes the transfer status to the specified state. The available state transitions are: - `processing` — from `incoming_payment_waiting` - `funds_converted` — from `processing`. Refer to regional guides for special regional requirements. - `outgoing_payment_sent` — from `funds_converted` - `bounced_back` — from `outgoing_payment_sent` - `funds_refunded` — from `bounced_back`. Will not trigger a refund webhook. {% admonition type="warning" %} Simulation does not work with email transfers. {% /admonition %} {% admonition type="warning" %} You need to fund the transfer before calling simulation endpoints. Calling the `processing` endpoint is required even after the funding call has changed the transfer state to processing automatically. {% /admonition %} {% admonition type="info" %} While transfer state simulation calls will respond with 200 in real time, the process internally is asynchronous. Please ensure you give at least 5 seconds in between simulation calls. {% /admonition %} tags: - simulation security: - UserToken: [] parameters: - name: transferId in: path required: true description: The ID of the transfer to simulate. schema: type: integer format: int64 - name: status in: path required: true description: The target transfer status. schema: type: string enum: - processing - funds_converted - outgoing_payment_sent - bounced_back - funds_refunded - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Transfer with updated status. content: application/json: example: id: 15574445 user: 294205 targetAccount: 7993919 sourceAccount: null quote: 113379 status: processing reference: good times rate: 1.2151 created: '2017-03-14 15:25:51' business: null transferRequest: null details: reference: good times hasActiveIssues: false sourceValue: 1000 sourceCurrency: EUR targetValue: 895.32 targetCurrency: GBP headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/profiles/{profileId}/verifications: post: operationId: simulationVerification summary: Simulate verification for a profile description: > Changes a specific profile's verification state to `PASSED`. This is useful for testing the `profiles#verification-state-change` webhook and is a prerequisite for setting up a Multi-Currency Account (MCA). Accepts both user and application API tokens. tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The ID of the profile to verify. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Verification state changed successfully. No content returned. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/verify-profile: post: operationId: simulationVerifyProfile summary: Simulate verification for all profiles description: > Verifies all profiles associated with the authenticated user, changing their verification state to `PASSED`. This is useful for testing the `profiles#verification-state-change` webhook and is a prerequisite for setting up a Multi-Currency Account (MCA). Accepts user API tokens only. The profiles are identified via the token. tags: - simulation security: - UserToken: [] responses: '200': description: Verification state changed successfully. No content returned. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/simulation/balance/topup: post: operationId: simulationBalanceTopup summary: Simulate a balance top-up description: > Simulates a top-up so that a balance can be used to fund transfers and/or card spend. tags: - simulation security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object required: - profileId - balanceId - currency - amount properties: profileId: type: integer format: int64 description: The profile ID linked to the balance account. balanceId: type: integer format: int64 description: >- The ID of the balance account that is going to receive the funds. currency: type: string description: >- The currency to top up the balance account in. Must be the same currency as the balance account. amount: type: number description: The amount to top up the balance account with. channel: type: string enum: - TRANSFER - CARD description: >- Type of top-up. Not providing a channel will default to `CARD`. example: profileId: 2 balanceId: 5 currency: EUR amount: 100 channel: TRANSFER responses: '200': description: Simulated balance top-up result. content: application/json: schema: type: object properties: transactionId: type: integer format: int64 description: The ID of the top-up transaction. state: type: string description: >- The state of the transaction. `COMPLETED` is always returned when using this endpoint. balancesAfter: type: array items: type: object properties: id: type: integer format: int64 description: The ID of the balance account. value: type: number description: The new amount available in the balance account. currency: type: string description: The currency of the balance account. example: transactionId: 5 state: COMPLETED balancesAfter: - id: 5 value: 100 currency: EUR headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v2/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/authorisation: post: operationId: simulationCardTransactionAuthorisation summary: Simulate a card transaction authorisation description: > Simulates a card transaction authorisation request in the sandbox environment. It can simulate ATM withdrawals, POS purchases, e-commerce transactions, and refunds. This is an authorisation hold, where funds are held, but not yet captured by the acquirer. The `cardNumber` represents the 16-digit Primary Account Number (PAN) of the card, and must be a valid PAN retrieved from sensitive card details. Please follow the [detailed guide](/guides/product/issue-cards/sensitive-card-details) on retrieving sensitive card details. #### Refund A refund is a 2-step process: first authorise with `transactionType` set to `REFUND`, then clear using the [clearing endpoint](/api-reference/simulation/simulationcardtransactionclearing) with the same transaction type. {% admonition type="warning" %} Refund simulation doesn't work with Mastercard. {% /admonition %} tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: pos: type: string description: > The point-of-sale used for the transaction. - For POS transactions: `CHIP_AND_PIN` - For e-commerce transactions: `E_COMMERCE_NO_3DS` - For ATM transactions: `CHIP_AND_PIN` - For refund transactions: `CHIP_AND_PIN` or `E_COMMERCE_NO_3DS` transactionType: type: string description: | The type of the transaction. - For POS and e-commerce transactions: `GOODS_AND_SERVICES` - For ATM transactions: `CASH_WITHDRAWAL` - For refund transactions: `REFUND` amount: type: object properties: value: type: number description: Transaction amount. currency: type: string description: Currency code. mcc: type: integer format: int32 description: Merchant category code. cardNumber: type: string description: Primary Account Number of the card. examples: POS purchase: summary: POS purchase value: pos: CHIP_AND_PIN transactionType: GOODS_AND_SERVICES amount: value: 10 currency: SGD mcc: 5499 cardNumber: '4242424242424242' E-commerce purchase: summary: E-commerce purchase value: pos: E_COMMERCE_NO_3DS transactionType: GOODS_AND_SERVICES amount: value: 10 currency: SGD mcc: 5499 cardNumber: '4242424242424242' ATM withdrawal: summary: ATM withdrawal value: pos: CHIP_AND_PIN transactionType: CASH_WITHDRAWAL amount: value: 10 currency: SGD mcc: 6011 cardNumber: '4242424242424242' Refund: summary: Refund value: pos: CHIP_AND_PIN transactionType: REFUND amount: value: 10 currency: SGD mcc: 5499 cardNumber: '4242424242424242' responses: '200': description: Simulated card authorisation. content: application/json: schema: type: object properties: reference: type: object description: >- The transaction reference. This can be used in a following request for reversal and clearing. error: type: - string - 'null' description: An error returned by the transaction, if it exists. example: reference: transaction: acquirer: institutionId: '430010' name: ACQUIRER NAME city: CITY NAME merchantCategoryCode: 5499 country: GB acceptorTerminalId: TERMID01 acceptorIdCode: CARD ACCEPTOR forwardingInstitutionId: '400050' card: token: 59123122-223d-45f9-b840-0ad4a4f80937 schemeName: VISA pan: '4242424242424242' pin: '1234' cvv1: '123' icvv: '456' cvv2: '789' expiration: - 2029 - 7 sequenceNumber: 1 profileId: 2 userId: 5 cardStatus: ACTIVE country: SG currencies: - SGD pos: type: CHIP_AND_PIN acceptsOnlinePins: true maxPinLength: 12 supports3ds: false hasChip: true transactionStartTime: 1667541087.0476434 stan: '363054' schemeTransactionId: '932290252416153' retrievalReferenceNum: '230805363054' requestMti: '0200' authorizationIdResponse: '123646' error: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/clearing: post: operationId: simulationCardTransactionClearing summary: Simulate a card transaction clearing description: > Simulates a transaction clearing request in the sandbox environment. This is done after the authorisation. The `ref` field can be copied from the `reference` object in the authorisation response. To clear a previous authorisation, the `ref` details must match the previous authorisation request. The `amount` does not have to match the previous authorisation request, it can be more or less than the authorisation request amount. {% admonition type="warning" %} Clearing simulation doesn't work with Mastercard. {% /admonition %} #### Refund A refund is a 2-step process: first [authorise](/api-reference/simulation/simulationcardtransactionauthorisation) with `transactionType` set to `REFUND`, then clear using this endpoint with the same transaction type. tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: amount: type: object properties: value: type: number description: Transaction amount. currency: type: string description: Currency code. transactionType: type: string description: >- The type of the transaction. Use the same transaction type from the previous authorisation request. ref: type: object description: >- The transaction reference. This can be obtained from a previous authorisation request. example: amount: value: 10 currency: SGD transactionType: GOODS_AND_SERVICES ref: transaction: acquirer: institutionId: '430010' name: ACQUIRER NAME city: CITY NAME merchantCategoryCode: 5499 country: GB acceptorTerminalId: TERMID01 acceptorIdCode: CARD ACCEPTOR forwardingInstitutionId: '400050' card: token: 59123122-223d-45f9-b840-0ad4a4f80937 schemeName: VISA pan: '4242424242424242' pin: '1234' cvv1: '123' icvv: '456' cvv2: '789' expiration: - 2029 - 7 sequenceNumber: 1 profileId: 2 userId: 5 cardStatus: ACTIVE country: SG currencies: - SGD pos: type: CHIP_AND_PIN acceptsOnlinePins: true maxPinLength: 12 supports3ds: false hasChip: true transactionStartTime: 1667541087.0476434 stan: '363054' schemeTransactionId: '932290252416153' retrievalReferenceNum: '230805363054' requestMti: '0200' authorizationIdResponse: '123646' responses: '200': description: Simulated transaction clearing result. content: application/json: schema: type: object properties: reference: type: object description: The transaction reference. error: type: - string - 'null' description: An error returned by the transaction, if it exists. example: reference: transaction: acquirer: institutionId: '430010' name: ACQUIRER NAME city: CITY NAME merchantCategoryCode: 5499 country: GB acceptorTerminalId: TERMID01 acceptorIdCode: CARD ACCEPTOR forwardingInstitutionId: '400050' card: token: 59123122-223d-45f9-b840-0ad4a4f80937 schemeName: VISA pan: '4242424242424242' pin: '1234' cvv1: '123' icvv: '456' cvv2: '789' expiration: - 2029 - 7 sequenceNumber: 1 profileId: 2 userId: 5 cardStatus: ACTIVE country: SG currencies: - SGD pos: type: CHIP_AND_PIN acceptsOnlinePins: true maxPinLength: 12 supports3ds: false hasChip: true transactionStartTime: 1667541087.0476434 stan: '363054' schemeTransactionId: '932290252416153' retrievalReferenceNum: '230805363054' requestMti: '0200' authorizationIdResponse: '123646' error: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions/reversal: post: operationId: simulationCardTransactionReversal summary: Simulate a card transaction reversal description: > Simulates a transaction reversal request in the sandbox environment. The `amount.value` field can be set to 0 for a full reversal, or a positive value that represents the intended final value of the transaction after a partial reversal. For example, if a transaction value was originally 10 SGD, and the intended final value is 3 SGD, `amount.value` should be set to 3. This means there is a partial refund of 7 SGD. tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: amount: type: object properties: value: type: number description: >- Transaction amount. Set to 0 for full reversal, or the intended final value for partial reversal. currency: type: string description: Currency code. transactionType: type: string description: >- The type of the transaction. Use the same transaction type from the previous authorisation request. ref: type: object description: >- The transaction reference. This can be obtained from a previous authorisation request. example: amount: value: 3 currency: SGD transactionType: GOODS_AND_SERVICES ref: transaction: acquirer: institutionId: '430010' name: ACQUIRER NAME city: CITY NAME merchantCategoryCode: 5499 country: GB acceptorTerminalId: TERMID01 acceptorIdCode: CARD ACCEPTOR forwardingInstitutionId: '400050' card: token: 59123122-223d-45f9-b840-0ad4a4f80937 schemeName: VISA pan: '4242424242424242' pin: '1234' cvv1: '123' icvv: '456' cvv2: '789' expiration: - 2029 - 7 sequenceNumber: 1 profileId: 2 userId: 5 cardStatus: ACTIVE country: SG currencies: - SGD pos: type: CHIP_AND_PIN acceptsOnlinePins: true maxPinLength: 12 supports3ds: false hasChip: true transactionStartTime: 1667541087.0476434 stan: '363054' schemeTransactionId: '932290252416153' retrievalReferenceNum: '230805363054' requestMti: '0200' authorizationIdResponse: '123646' responses: '200': description: Simulated transaction reversal result. content: application/json: schema: type: object properties: reference: type: object description: The transaction reference. error: type: - string - 'null' description: An error returned by the transaction, if it exists. example: reference: transaction: acquirer: institutionId: '430010' name: ACQUIRER NAME city: CITY NAME merchantCategoryCode: 5499 country: GB acceptorTerminalId: TERMID01 acceptorIdCode: CARD ACCEPTOR forwardingInstitutionId: '400050' card: token: 59123122-223d-45f9-b840-0ad4a4f80937 schemeName: VISA pan: '4242424242424242' pin: '1234' cvv1: '123' icvv: '456' cvv2: '789' expiration: - 2029 - 7 sequenceNumber: 1 profileId: 2 userId: 5 cardStatus: ACTIVE country: SG currencies: - SGD pos: type: CHIP_AND_PIN acceptsOnlinePins: true maxPinLength: 12 supports3ds: false hasChip: true transactionStartTime: 1667541087.0476434 stan: '363054' schemeTransactionId: '932290252416153' retrievalReferenceNum: '230805363054' requestMti: '0200' authorizationIdResponse: '123646' error: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/simulation/spend/profiles/{profileId}/cards/{cardToken}/transactions: get: operationId: simulationCardTransactions summary: List simulated card transactions description: > Returns a list of simulated card transactions, in descending order of creation time. To retrieve more details of a transaction, use the [get card transaction by ID](/api-reference/card-transaction/cardtransactionget) endpoint. tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string format: uuid - name: limit in: query required: false description: >- The maximum number of transactions to return. The default value is 10. schema: type: integer format: int32 default: 10 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of simulated card transactions. content: application/json: schema: type: array items: type: object properties: transactionId: type: integer format: int64 description: ID of the transaction. creationTime: type: number description: Time when the card transaction was created. example: - transactionId: 5028 creationTime: 1723600773.748887 - transactionId: 5027 creationTime: 1723600659.095692 - transactionId: 5026 creationTime: 1723600648.133955 - transactionId: 5025 creationTime: 1723545470.449374 - transactionId: 5024 creationTime: 1723545430.790566 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/spend/profiles/{profileId}/cards/{cardToken}/production: post: operationId: simulationCardProduction summary: Simulate card production state change description: > Simulates a card production status change in the sandbox environment. {% admonition type="warning" %} Please ensure that you have created a physical card order with KIOSK_COLLECTION delivery method and that you produce the card before calling this endpoint to simulate various card production statuses. {% /admonition %} tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: status: type: string enum: - PRODUCED - PRODUCTION_ERROR description: The intended production status of the card. errorCode: type: string description: >- The [error code](/api-reference/card-kiosk-collection/cardkioskcollectionproduce) to simulate. This field should be set only if the status is `PRODUCTION_ERROR`. example: status: PRODUCTION_ERROR errorCode: PRT_NOT_REACHABLE responses: '200': description: Card production state changed successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements: get: operationId: simulationKycReviewRequirementsList summary: List KYC review requirements description: > Lists all blocking requirements for a KYC (Know Your Customer) review. These outstanding KYC requirements typically act as "blocking requirements", preventing actions like creating transfers. tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: kycReviewId in: path required: true description: The ID of the existing KYC review. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: List of KYC review requirements. content: application/json: schema: type: object properties: requirements: type: array items: type: object properties: key: type: string description: KYC review item key. state: type: string enum: - NOT_PROVIDED - IN_REVIEW - VERIFIED - REJECTED description: State of the KYC review item. description: type: - string - 'null' description: Description of the KYC review item. example: requirements: - key: ID_DOCUMENT_WITH_LIVENESS state: IN_REVIEW description: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: KYC review not found. content: application/json: example: code: kyc_review.not_found category: CLIENT description: KycReview not found details: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements/add: post: operationId: simulationKycReviewRequirementsAdd summary: Simulate adding new requirement description: > Creates a new requirement for a KYC (Know Your Customer) review for a business profile. {% admonition type="warning" %} This can only be used for business profiles. It creates a static `BUSINESS_USE_CASE` requirement only. {% /admonition %} tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID requiring the new requirement to be added. schema: type: integer format: int64 - name: kycReviewId in: path required: true description: The ID of the existing KYC review. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: requestedAction: type: string enum: - APPROVE - REJECT description: The action to be carried out. requirement: type: string description: Requirement to simulate hosted journey for. responses: '202': description: Requirement added successfully. No content returned. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad request. content: application/json: example: code: invalid-request category: CLIENT description: >- Profile 123L is a personal type, not permitted to simulate evidence request details: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/requirements/submit: post: operationId: simulationKycReviewRequirementsSubmit summary: Simulate requirement submission description: > Simulates providing everything needed for a particular KYC requirement. This can be used in place of going through a hosted journey on the browser. {% admonition type="info" %} This functionality only works for the following requirements: `TRANSFER_PURPOSE`, `ID_DOCUMENT_WITH_LIVENESS`, `SOURCE_OF_FUNDS`, and any other that has the `___` delimiter in them. {% /admonition %} tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: kycReviewId in: path required: true description: The ID of the existing KYC review. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: requirement: type: string description: Requirement to simulate hosted journey for. example: requirement: ACCOUNT_PURPOSE responses: '202': description: Requirement submitted successfully. No content returned. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad request. content: application/json: example: code: invalid-request category: CLIENT description: >- Invalid request. KycRequirement {ACCOUNT_PURPOSE} was not found for KycReview details: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/simulation/profiles/{profileId}/kyc-reviews/{kycReviewId}/verify: post: operationId: simulationKycReviewVerify summary: Simulate verifying a KYC review description: > Verifies requirement(s) on an existing KYC (Know Your Customer) review. Can be used after a user has provided input for a requirement through the hosted journey or simulated the requirement submission. tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: kycReviewId in: path required: true description: The ID of the existing KYC review. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: requestedAction: type: string enum: - APPROVE - REJECT description: The action to be carried out. requirements: type: array items: type: string description: >- Zero or more requirements to be verified. If not provided, all blocking requirements are verified. example: requestedAction: APPROVE requirements: - ACCOUNT_PURPOSE_V2 responses: '202': description: KYC review verified successfully. No content returned. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad request. content: application/json: example: code: kyc_review.state_update_not_allowed category: CLIENT description: 'Invalid action passed in request, action: APPROVED' details: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/profiles/{profileId}/bank-transactions/import: post: operationId: simulationBankTransactionImport summary: Simulate incoming bank transfer description: > Simulates a bank transfer into a profile's account details. This will create a payment into the user's account details and balance for the specified amount and currency. Please refer to the [Bank Account Details API reference](/api-reference/bank-account-details) for more information on setting up bank details to receive money. {% admonition type="info" %} This functionality only works for the following currencies: `USD`, `EUR`, `GBP`. Returns a 400 error when account details for the specified currency do not exist. {% /admonition %} tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: currency: type: string description: >- The currency of the bank account details that you want to make payment to. amount: type: number description: The payment amount. example: currency: USD amount: 2000 responses: '201': description: Bank transaction imported successfully. No content returned. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad request. content: application/json: example: code: not.valid message: No account details found for profile currency pair headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/simulation/profiles/{profileId}/swift-in: post: operationId: simulationSwiftIn summary: Simulate incoming Swift payment description: > Simulates an incoming Swift transfer into a profile's account details. This will create a payment into the user's account details and balance for the specified amount and currency. Using sandbox, you can test the initial tech build for webhook subscriptions, balance statements, and sweeping funds. If the request is successful the transfer is logged in our back office, which triggers a [swift-in#credit](/guides/developer/webhooks/event-types#swift-in-credit) event and results in a balance update. {% admonition type="info" %} While most fields are optional, default values will be provided as needed. {% /admonition %} tags: - simulation security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - currencyCode - amount properties: currencyCode: type: string minLength: 3 maxLength: 3 description: Currency received by Wise. 3-letter ISO currency code. amount: type: number description: Amount received by Wise. beneficiaryName: type: string description: Name of the ultimate beneficiary. beneficiaryAccount: type: string description: >- Account number of the ultimate beneficiary. It can be either an IBAN or local account number. beneficiaryAddress: type: object description: Address of the ultimate beneficiary. properties: addressLine: type: string description: 'Address line: street, house, apartment.' city: type: string description: City name. postalCode: type: string description: Postal code. country: type: string description: Country code (ISO 3166-1 alpha-2). senderName: type: string description: Name of the sender. senderBic: type: string description: BIC of the sender's bank. senderAccount: type: string description: >- Account number of the sender. It can be either an IBAN or local account number. senderAddress: type: object description: Address of the sender. properties: addressLine: type: string description: 'Address line: street, house, apartment.' city: type: string description: City name. postalCode: type: string description: Postal code. country: type: string description: Country code (ISO 3166-1 alpha-2). paymentReference: type: string description: Custom payment reference. charges: type: array description: >- List of fees declared by correspondents (e.g., handling fee). items: type: object required: - amount - currency - agent properties: amount: type: number description: Fee amount. currency: type: string minLength: 3 maxLength: 3 description: Fee currency. 3-letter ISO currency code. agent: type: string description: BIC of the agent incurring the fee. previousInstructingAgents: type: array maxItems: 3 description: List of previous instructing agents. Maximum 3 items. items: type: string description: BIC of a previous instructing agent. example: currencyCode: EUR amount: 100 beneficiaryName: John Doe beneficiaryAccount: '8599680548' beneficiaryAddress: addressLine: 1234 Elm St, IL city: Springfield postalCode: '62704' country: US senderName: Jane Doe senderBic: DEUTDEDBFRA senderAccount: DE89370400440532013000 senderAddress: addressLine: 5678 Oak St city: Springfield postalCode: '62704' country: US charges: - currency: EUR amount: 1 agent: DEUTDEDBFRA previousInstructingAgents: - COBADEFFXXX paymentReference: Test123 responses: '200': description: Swift payment simulated successfully. content: application/json: example: id: 123 messageReference: null mur: null uetr: f87c3c37-d97b-4da6-a788-94004414e648 messageType: pacs.008.001.08 sender: null receiver: null state: RECEIVED direction: INCOMING jsonMessage: null finMessage: null processTime: '2026-02-27T09:24:38.484276Z' amount: 100 currency: EUR valueDate: null payoutInstructionId: null transferId: null actor: SYSTEM actorId: null actorOktaId: null source: SWIFT_CLOUD attributes: null ackMessage: false headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Bad request. content: application/json: example: errors: - arguments: [] code: not.valid message: must be greater than or equal to 0 path: amount headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/applications/{clientId}/spend-controls/rules: post: operationId: spendControlsRuleCreate summary: Add a new authorisation rule description: > 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 %} tags: - spend-controls security: - ClientCredentialsToken: [] parameters: - name: clientId in: path required: true description: The application client ID. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: type: type: string enum: - MCC - CURRENCY description: The type of authorisation rule. operation: type: string enum: - ALLOW - BLOCK description: >- Determines whether the transactions should be allowed or blocked. description: type: string description: The description of the authorisation rule. values: type: array items: type: string description: >- A list of values based on the `type` of rule. For example, setting `MCC` as `type` requires `values` to be set as `["1234", "5678"]`. example: description: Blocking all transactions from MCC 1234 and 5678 type: MCC operation: BLOCK values: - '1234' - '5678' responses: '200': description: The created rule. content: application/json: schema: $ref: '#/components/schemas/rule' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: spendControlsRulesList summary: List all authorisation rules description: > Retrieves all the existing authorisation rules, regardless of whether or not they are applied. tags: - spend-controls security: - ClientCredentialsToken: [] parameters: - name: clientId in: path required: true description: The application client ID. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: A list of authorisation rules. content: application/json: schema: type: array items: $ref: '#/components/schemas/rule' example: - id: 1 description: Blacklist gambling MCCs type: MCC operation: BLOCK values: - '7801' - '7802' - '7995' - '9754' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/applications/{clientId}/spend-controls/rules/apply: post: operationId: spendControlsRuleApply summary: Apply an authorisation rule description: > Apply an authorisation rule. This will result in the rule being evaluated against every incoming card authorisation request. tags: - spend-controls security: - ClientCredentialsToken: [] parameters: - name: clientId in: path required: true description: The application client ID. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: ruleId: type: string description: The ID of the authorisation rule. example: ruleId: '123' responses: '200': description: Rule applied successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/applications/{clientId}/spend-controls/rules/unapply: post: operationId: spendControlsRuleUnapply summary: Unapply an authorisation rule description: > 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. tags: - spend-controls security: - ClientCredentialsToken: [] parameters: - name: clientId in: path required: true description: The application client ID. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: ruleId: type: string description: The ID of the authorisation rule. example: ruleId: '123' responses: '200': description: Rule unapplied successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/applications/{clientId}/spend-controls/rules/applied: get: operationId: spendControlsAppliedRulesList summary: List applied authorisation rules description: > Returns the list of all the active authorisation rules that have been applied. tags: - spend-controls security: - ClientCredentialsToken: [] parameters: - name: clientId in: path required: true description: The application client ID. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: A list of applied rule IDs. content: application/json: schema: type: array items: type: object properties: ruleId: type: integer format: int64 description: The ID of the applied authorisation rule. example: - ruleId: 123 - ruleId: 456 headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/applications/{clientId}/spend-controls/rules/{ruleId}: delete: operationId: spendControlsRuleDelete summary: Delete an authorisation rule description: > 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. tags: - spend-controls security: - ClientCredentialsToken: [] parameters: - name: clientId in: path required: true description: The application client ID. schema: type: string - name: ruleId in: path required: true description: The ID of the authorisation rule to delete. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Rule deleted successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/spend/profiles/{profileId}/spend-limits: get: operationId: spendLimitsProfileGet summary: Retrieve profile limits description: | Retrieves the spend limits that are configured for a profile. tags: - spend-limits security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Profile spend limits. content: application/json: schema: type: object properties: spendLimits: type: array items: $ref: '#/components/schemas/profile-limits' example: spendLimits: - type: PURCHASE aggregateWindow: daily: value: amount: 20000 currency: GBP usage: amount: 0 currency: GBP max: amount: 30000 currency: GBP resetAt: '2023-07-31T22:59:59.999999999Z' monthly: value: amount: 20000 currency: GBP usage: amount: 0 currency: GBP max: amount: 30000 currency: GBP resetAt: '2023-07-31T22:59:59.999999999Z' - type: ATM_WITHDRAWAL aggregateWindow: daily: value: amount: 1000 currency: GBP usage: amount: 0 currency: GBP max: amount: 4000 currency: GBP resetAt: '2023-07-31T22:59:59.999999999Z' monthly: value: amount: 1000 currency: GBP usage: amount: 0 currency: GBP max: amount: 4000 currency: GBP resetAt: '2023-07-31T22:59:59.999999999Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' patch: operationId: spendLimitsProfileUpdate summary: Update profile limits description: > Update profile daily and monthly spend limits for `PURCHASE` or `ATM_WITHDRAWAL`. Both daily and monthly must be set. tags: - spend-limits security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: type: type: string enum: - PURCHASE - ATM_WITHDRAWAL description: The type of transaction. aggregateWindow: type: object properties: daily: type: object properties: value: type: object description: The amount allowed to be spent daily. properties: amount: type: number currency: type: string monthly: type: object properties: value: type: object description: The amount allowed to be spent monthly. properties: amount: type: number currency: type: string example: type: PURCHASE aggregateWindow: daily: value: amount: 20000 currency: GBP monthly: value: amount: 20000 currency: GBP responses: '200': description: >- Updated profile spend limits. See [Retrieve profile limits](/api-reference/spend-limits/spendlimitsprofileget). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/spend/profiles/{profileId}/cards/{cardToken}/spend-limits: get: operationId: spendLimitsCardGet summary: Retrieve card limits description: | Retrieves the spend limits that are configured for a card. tags: - spend-limits security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Card spend limits. content: application/json: schema: $ref: '#/components/schemas/card-limits' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' patch: operationId: spendLimitsCardUpdate summary: Create or update card limits description: > Create or update card transaction, daily, monthly or lifetime spend limits. tags: - spend-limits security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: transaction: type: object properties: value: type: object description: The amount allowed per transaction. properties: amount: type: number currency: type: string daily: type: object properties: value: type: object description: The amount allowed to be spent daily. properties: amount: type: number currency: type: string monthly: type: object properties: value: type: object description: The amount allowed to be spent monthly. properties: amount: type: number currency: type: string lifetime: type: object properties: value: type: object description: >- The amount allowed to be spent over the lifetime of the card. properties: amount: type: number currency: type: string example: daily: value: amount: 1000 currency: GBP monthly: value: amount: 1000 currency: GBP responses: '200': description: >- Updated card spend limits. See [Retrieve card limits](/api-reference/spend-limits/spendlimitscardget). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v4/spend/profiles/{profileId}/cards/{cardToken}/spend-limits/{granularity}: delete: operationId: spendLimitsCardDelete summary: Delete card limits description: | Delete card spend limits for a specific granularity. tags: - spend-limits security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: cardToken in: path required: true description: The card token. schema: type: string - name: granularity in: path required: true description: The limit granularity to delete. schema: type: string enum: - transaction - daily - monthly - lifetime - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: >- Updated card spend limits. See [Retrieve card limits](/api-reference/spend-limits/spendlimitscardget). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/spend/profiles/{profileId}/spending-limits: get: operationId: spendControlsProfileLimitsGet summary: Retrieve profile spend limits deprecated: true description: > 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 %} tags: - spend-limits security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Profile spending limits. content: application/json: schema: type: object properties: spendings: type: array description: A collection of spending resources. items: type: object properties: type: type: string description: The spending category. limits: type: array items: type: object properties: type: type: string description: >- The type of limit. One of `TRANSACTION`, `DAILY`, `MONTHLY`, `LIFETIME`. usage: type: number description: >- The amount which has been captured for the specific type and limit up till now. threshold: type: number description: >- The transaction limit configured for the spending limit. currency: type: string description: >- The 3-digit currency code assigned to the spending limit. expiresAt: type: - string - 'null' format: date-time description: >- The timestamp at which the spending limit will expire, ISO-8601 with timezone. example: spendings: - type: ATM_WITHDRAWAL limits: - type: TRANSACTION usage: 0 threshold: 1750 currency: SGD expiresAt: null - type: DAILY usage: 0 threshold: 2700 currency: SGD expiresAt: '2022-12-15T16:00:00Z' - type: MONTHLY usage: 0 threshold: 5250 currency: SGD expiresAt: '2022-12-31T16:00:00Z' - type: ECOM_PURCHASE limits: - type: TRANSACTION usage: 0 threshold: 17500 currency: SGD expiresAt: null - type: DAILY usage: 0 threshold: 17500 currency: SGD expiresAt: '2022-12-15T16:00:00Z' - type: MONTHLY usage: 0 threshold: 35000 currency: SGD expiresAt: '2022-12-31T16:00:00Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/pin: post: operationId: scaPinCreate summary: Create a PIN description: > 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. tags: - sca-pin security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -X POST \ 'https://api.wise-sandbox.com/v2/profiles/{profileId}/pin' \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-tw-jose-method: jwe' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcx...' requestBody: required: true content: application/jose+json: schema: type: string description: | A JWE encrypted string. The decrypted payload contains: - `pin` — A four-digit string. Payload before encryption: ```json {"pin": "1234"} ``` example: responses: '200': description: The PIN has been successfully created. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: A PIN has already been created for this profile. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: operationId: scaPinDelete summary: Delete a PIN description: > 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 %} tags: - sca-pin security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: The PIN has been deleted. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: No PIN has been set up for this profile. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/pin/verify: post: operationId: scaPinVerify summary: Verify a PIN description: > 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. tags: - sca-pin security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: One-Time-Token in: header required: true description: A one-time token unique identifier. schema: type: string format: uuid - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -X POST \ 'https://api.wise-sandbox.com/v2/profiles/{profileId}/pin/verify' \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-tw-jose-method: jwe' \ -H 'One-Time-Token: ' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcx...' requestBody: required: true content: application/jose+json: schema: type: string description: | A JWE encrypted string. The decrypted payload contains: - `pin` — A four-digit string. Payload before encryption: ```json {"pin": "1234"} ``` example: responses: '200': description: The PIN has been successfully verified. content: application/json: schema: $ref: '#/components/schemas/one-time-token' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: The PIN verification failed or PIN was blocked. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: The PIN was not found or has not been set up. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/device-fingerprints: post: operationId: scaDeviceFingerprintCreate summary: Create a device fingerprint description: > 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. tags: - sca-device-fingerprints security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -X POST \ 'https://api.wise-sandbox.com/v2/profiles/{profileId}/device-fingerprints' \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-tw-jose-method: jwe' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcx...' requestBody: required: true content: application/jose+json: schema: type: string description: > A JWE encrypted string. The decrypted payload contains: - `deviceFingerprint` — A string value used as a device fingerprint. Payload before encryption: ```json {"deviceFingerprint": "3207da22-a0d3-4b6b-a591-6297e646fe32"} ``` example: responses: '200': description: The device fingerprint has been successfully created. content: application/json: schema: type: object properties: deviceFingerprintId: type: string format: uuid description: The identifier of the device fingerprint. createdAt: type: string format: date-time description: The device fingerprint creation timestamp. example: deviceFingerprintId: 636a5514-aa86-4719-8700-e9a9a0ae7ea7 createdAt: '2025-05-24T07:27:58.273205554Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Maximum number of device fingerprints reached (default is 3). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: The device fingerprint has already been created. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/device-fingerprints/verify: post: operationId: scaDeviceFingerprintVerify summary: Verify a device fingerprint description: > 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. tags: - sca-device-fingerprints security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: One-Time-Token in: header required: true description: A one-time token unique identifier. schema: type: string format: uuid - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -X POST \ 'https://api.wise-sandbox.com/v2/profiles/{profileId}/device-fingerprints/verify' \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-tw-jose-method: jwe' \ -H 'One-Time-Token: ' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcx...' requestBody: required: true content: application/jose+json: schema: type: string description: | A JWE encrypted string. The decrypted payload contains: - `deviceFingerprint` — A device fingerprint value. Payload before encryption: ```json {"deviceFingerprint": "3207da22-a0d3-4b6b-a591-6297e646fe32"} ``` example: responses: '200': description: The device fingerprint has been successfully verified. content: application/json: schema: $ref: '#/components/schemas/one-time-token' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: The device fingerprint verification failed. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: The device fingerprint was not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/device-fingerprints/{deviceFingerprintId}: delete: operationId: scaDeviceFingerprintDelete summary: Delete a device fingerprint description: > 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 %} tags: - sca-device-fingerprints security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: deviceFingerprintId in: path required: true description: The device fingerprint ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: The device fingerprint has been deleted. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: The device fingerprint ID does not exist. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/facemaps: post: operationId: scaFacemapCreate summary: Create a facemap description: > 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. tags: - sca-facemaps security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: faceMap: type: string description: A base64 encoded string. example: faceMap: responses: '204': description: The facemap has been successfully created. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: A facemap has already been created for this profile. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: operationId: scaFacemapDelete summary: Delete a facemap description: > 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 %} tags: - sca-facemaps security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: The facemap has been deleted. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: No facemap has been set up for this profile. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/facemaps/verify: post: operationId: scaFacemapVerify summary: Verify a facemap description: > 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. tags: - sca-facemaps security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - name: One-Time-Token in: header required: true description: A one-time token unique identifier. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: faceMap: type: string description: A base64 encoded string. example: faceMap: responses: '200': description: The facemap has been successfully verified. content: application/json: schema: $ref: '#/components/schemas/one-time-token' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: The facemap verification failed. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/sca-sessions/authorise: post: operationId: scaSessionCreate summary: Create a SCA session description: > Manually triggers SCA, returning a one-time token along with a list of associated challenges. These challenges can be cleared with the verify endpoints. tags: - sca-sessions security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: A list of challenges to clear SCA. content: application/json: schema: type: object properties: oneTimeTokenProperties: $ref: '#/components/schemas/one-time-token' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfers: post: operationId: transferCreate summary: Create a transfer description: > 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 credentials, and if your business account has payment approvals, your application will receive this error when attempting to create a transfer: `Quote cannot be accepted with this request due to missing approval.` Consider removing the payment rule if you are going to use the API to create transfers. tags: - transfer security: - UserToken: [] - PersonalToken: [] requestBody: required: true content: application/json: schema: type: object required: - targetAccount - quoteUuid - customerTransactionId properties: sourceAccount: type: integer format: int64 description: Refund recipient account ID targetAccount: type: integer format: int64 description: >- Recipient account ID. You can create multiple transfers to same recipient account quoteUuid: type: string format: uuid description: >- V2 quote ID. You can only create one transfer per one quote. You cannot use same quote ID to create multiple transfers customerTransactionId: type: string format: uuid description: >- Required to perform idempotency check to avoid duplicate transfers in case of network failures or timeouts details: type: object properties: reference: type: string description: >- Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. See [Business Payments Tips](https://wise.com/help/articles/2932870/tips-for-paying-invoices) for a full list transferPurpose: type: string description: >- Conditionally required. For example when target currency is THB. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions transferPurposeSubTransferPurpose: type: string description: >- Conditionally required. For example when target currency is CNY. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions transferPurposeInvoiceNumber: type: string description: >- Conditionally required. For example when target currency is INR. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions sourceOfFunds: type: string description: >- Conditionally required. For example when target currency is USD and transfer amount exceeds 80k. See [Transfer Requirements](/api-reference/transfer/transferrequirementsvalidate) for conditions examples: basic: summary: Basic transfer value: targetAccount: 8692237 quoteUuid: 8fa9be20-ba43-4b15-abbb-9424e1481050 customerTransactionId: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 details: reference: Invoice 2026-001 with-transfer-requirements: summary: With conditionally required fields value: targetAccount: 8692237 quoteUuid: 8fa9be20-ba43-4b15-abbb-9424e1481050 customerTransactionId: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 details: reference: Invoice 2026-001 transferPurpose: verification.transfers.purpose.pay.bills transferPurposeSubTransferPurpose: INTERPRETATION_SERVICE sourceOfFunds: verification.source.of.funds.salary responses: '200': description: Transfer successfully created. content: application/json: schema: $ref: '#/components/schemas/transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' get: operationId: transferList summary: List transfers description: > 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. tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: profile in: query required: false description: >- User profile ID. If parameter is omitted, defaults to user's personal profile schema: type: integer format: int64 - name: status in: query required: false description: >- Comma separated list of one or more status codes to filter transfers. See [Tracking Transfers](/guides/product/send-money/tracking-transfers) for complete list of statuses schema: type: string - name: sourceCurrency in: query required: false description: Source currency code schema: type: string - name: targetCurrency in: query required: false description: Target currency code schema: type: string - name: createdDateStart in: query required: false description: Starting date to filter transfers, inclusive of the provided date schema: type: string format: date-time - name: createdDateEnd in: query required: false description: Ending date to filter transfers, inclusive of the provided date schema: type: string format: date-time - name: limit in: query required: false description: Maximum number of records to be returned in response schema: type: integer format: int32 - name: offset in: query required: false description: Starting record number schema: type: integer format: int32 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: >- Returns an array of transfer objects, with or without an `originator` block depending on the type of each transfer. content: application/json: schema: type: array items: oneOf: - $ref: '#/components/schemas/transfer' - $ref: '#/components/schemas/originator-transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfers/{transferId}: get: operationId: transferGet summary: Get a transfer by ID description: > Get transfer info by ID. To receive dynamic updates as the state of the transfer changes, see the [webhooks documentation](/guides/developer/webhooks). tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: >- Returns the transfer object, with or without an `originator` block depending on the type of transfer. content: application/json: schema: oneOf: - $ref: '#/components/schemas/transfer' - $ref: '#/components/schemas/originator-transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfers/{transferId}/cancel: put: operationId: transferCancel summary: Cancel a transfer description: > 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 %} tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: >- Returns the cancelled transfer object, with or without an `originator` block depending on the type of transfer. content: application/json: schema: oneOf: - $ref: '#/components/schemas/transfer' - $ref: '#/components/schemas/originator-transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: >- Transfer cannot be cancelled because it is in a non-cancellable state or has other restrictions. The error response will include the code `transfer.cancellation.not.allowed`. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfer-requirements: post: operationId: transferRequirementsValidate summary: Validate transfer requirements description: > 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 %} tags: - transfer security: - UserToken: [] - PersonalToken: [] requestBody: required: true content: application/json: schema: type: object required: - targetAccount - quoteUuid properties: targetAccount: type: integer format: int64 description: Recipient account ID quoteUuid: type: string format: uuid description: V2 quote ID customerTransactionId: type: string format: uuid description: Unique identifier for the transfer request originatorLegalEntityType: type: string enum: - PRIVATE - BUSINESS description: >- Type of sender. Required from March 2026 for Correspondent Send integrations details: type: object properties: reference: type: string sourceOfFunds: type: string sourceOfFundsOther: type: string transferPurpose: type: string transferPurposeSubTransferPurpose: type: string transferPurposeInvoiceNumber: type: string transferNature: type: string example: targetAccount: 8692237 quoteUuid: 8fa9be20-ba43-4b15-abbb-9424e1481050 originatorLegalEntityType: PRIVATE details: reference: Invoice 2026-001 sourceOfFunds: verification.source.of.funds.salary transferPurpose: verification.transfers.purpose.pay.bills responses: '200': description: >- Returns a list of transfer requirement objects describing the dynamic form fields. content: application/json: schema: type: array items: $ref: '#/components/schemas/transfer-requirement' example: - type: transfer fields: - name: Transfer reference group: - key: reference name: Transfer reference type: text refreshRequirementsOnChange: false required: false displayFormat: null example: null minLength: null maxLength: 10 validationRegexp: '[a-zA-Z0-9- ]*' validationAsync: null valuesAllowed: null - name: Transfer purpose group: - key: transferPurpose name: Transfer purpose type: select refreshRequirementsOnChange: true required: true displayFormat: null example: null minLength: null maxLength: null validationRegexp: null validationAsync: null valuesAllowed: - key: verification.transfers.purpose.purchase.property name: Buying property abroad - key: verification.transfers.purpose.pay.bills name: Rent or other property expenses - key: verification.transfers.purpose.mortgage name: Mortgage payment - key: verification.transfers.purpose.pay.tuition name: Tuition fees or studying expenses - key: verification.transfers.purpose.send.to.family name: Sending money home to family - key: verification.transfers.purpose.living.expenses name: General monthly living expenses - key: verification.transfers.purpose.other name: Other - key: transferPurposeSubTransferPurpose name: Please select a specific reason for your transfer type: select refreshRequirementsOnChange: true required: true displayFormat: null example: null minLength: null maxLength: null validationRegexp: null validationAsync: null valuesAllowed: - key: INTERPRETATION_SERVICE name: Interpretation service - key: TRANSLATION_SERVICE name: Translation service - key: HUMAN_RESOURCE_SERVICE name: Human resource service - key: SOFTWARE_DEVELOPMENT_SERVICE name: Software development service - name: Source of funds group: - key: sourceOfFunds name: Source of funds type: select refreshRequirementsOnChange: true required: true displayFormat: null example: null minLength: null maxLength: null validationRegexp: null validationAsync: null valuesAllowed: - key: verification.source.of.funds.salary name: Salary - key: verification.source.of.funds.investment name: Investments (stocks, properties, etc.) - key: verification.source.of.funds.inheritance name: Inheritance - key: verification.source.of.funds.loan name: Loan - key: verification.source.of.funds.other name: Other headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v2/profiles/{profileId}/third-party-transfers: post: operationId: transferThirdPartyCreate summary: Create a third party transfer description: > 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. tags: - transfer security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: oneOf: - title: Private originator type: object required: - targetAccount - quote - originalTransferId - originator properties: targetAccount: type: integer format: int64 description: >- Recipient account ID. You can create multiple transfers to same recipient account example: 12345678 quote: type: string description: >- V2 quote ID. You can only create one transfer per one quote. You cannot use same quote ID to create multiple transfers example: 8fa9be20-ba43-4b15-abbb-9424e1481050 originalTransferId: type: string description: >- Unique transfer ID in your system. Also used to perform idempotency check to avoid duplicate transfers. You can only submit one transfer with same originalTransferId example: unique-transfer-id-in-your-system details: type: object properties: reference: type: string description: >- Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. See [Business Payments Tips](https://wise.com/help/articles/2932870/tips-for-paying-invoices) for a full list example: Ski trip originator: type: object required: - legalEntityType - reference - name - dateOfBirth - address - accountDetails description: Data block to capture payment originator details properties: legalEntityType: type: string enum: - PRIVATE description: Payment originator legal type example: PRIVATE reference: type: string description: >- Unique customer ID in your system. This allows Wise to uniquely identify each originator example: CST-2991992 name: type: object required: - givenName - familyName properties: givenName: type: string description: Payment originator first name example: John middleNames: type: array items: type: string description: Payment originator middle name(s) example: - Ryan familyName: type: string description: Payment originator family name example: Godspeed patronymicName: type: string description: Payment originator patronymic name dateOfBirth: type: string format: date description: Payment originator date of birth example: '1977-07-01' nationality: type: string description: >- Payment originator nationality. Required for certain routes (e.g. to `UGX`) address: type: object required: - firstLine - city - countryCode properties: firstLine: type: string description: Payment originator address first line example: Salu tee 100, Apt 4B city: type: string description: Payment originator address city example: Tallinn stateCode: type: string description: >- Payment originator address state code. Required if address country code in (US, CA, BR, AU) countryCode: type: string description: >- Payment originator address country code ISO 3166-1 alpha-2 minLength: 2 maxLength: 2 example: EE postCode: type: string description: Originator address zip code example: '12112' accountDetails: type: string description: Originator account number - title: Business originator type: object required: - targetAccount - quote - originalTransferId - originator properties: targetAccount: type: integer format: int64 description: >- Recipient account ID. You can create multiple transfers to same recipient account example: 12345678 quote: type: string description: >- V2 quote ID. You can only create one transfer per one quote. You cannot use same quote ID to create multiple transfers example: 8fa9be20-ba43-4b15-abbb-9424e1481050 originalTransferId: type: string description: >- Unique transfer ID in your system. Also used to perform idempotency check to avoid duplicate transfers. You can only submit one transfer with same originalTransferId example: unique-transfer-id-in-your-system details: type: object properties: reference: type: string description: >- Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. See [Business Payments Tips](https://wise.com/help/articles/2932870/tips-for-paying-invoices) for a full list example: Payment for invoice 22092 originator: type: object required: - legalEntityType - reference - name - businessRegistrationCode - address description: Data block to capture payment originator details properties: legalEntityType: type: string enum: - BUSINESS description: Payment originator legal type example: BUSINESS reference: type: string description: >- Unique customer ID in your system. This allows Wise to uniquely identify each originator example: BIZ-2991992 name: type: object required: - fullName properties: fullName: type: string description: Payment originator full legal name example: Hot Air Balloon Services Ltd businessRegistrationCode: type: string description: >- Payment originator business registry number / incorporation number example: '1999212' businessRegistrationDate: type: string format: date description: >- Payment originator business registration date. Required for certain routes (e.g. to `UGX`) address: type: object required: - firstLine - city - countryCode properties: firstLine: type: string description: Payment originator address first line example: Aiandi tee 1431 city: type: string description: Payment originator address city example: Tallinn stateCode: type: string description: >- Payment originator address state code. Required if address country code in (US, CA, BR, AU) countryCode: type: string description: >- Payment originator address country code ISO 3166-1 alpha-2 minLength: 2 maxLength: 2 example: EE postCode: type: string description: Originator address zip code example: '12112' accountDetails: type: string description: Originator account number responses: '200': description: Third party transfer successfully created. content: application/json: schema: $ref: '#/components/schemas/originator-transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/third-party-transfers/{transferId}: get: operationId: transferThirdPartyGetV1 summary: Get a third party transfer by ID (V1) deprecated: true description: > {% 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). tags: - transfer security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID schema: type: integer format: int64 - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Returns the originator transfer object. content: application/json: schema: $ref: '#/components/schemas/originator-transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/profiles/{profileId}/third-party-transfers/{transferId}: get: operationId: transferThirdPartyGet summary: Get a third party transfer by ID description: > 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). tags: - transfer security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID schema: type: integer format: int64 - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Returns the originator transfer object. content: application/json: schema: $ref: '#/components/schemas/originator-transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/transfers/{transferId}/payments: post: operationId: transferFund summary: Fund a transfer description: > {% 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 later date. This method is not applicable for First Party partner account transfers. If funding from `BALANCE`, and your multi-currency account does not have the required funds to complete the action, then this call will fail with an "insufficient funds" error. Once funds are added and available, you must call this endpoint again. tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: profileId in: path required: true description: >- The profile ID that created the transfer. Can be either your personal or business profile ID schema: type: integer format: int64 - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - type properties: type: type: string description: The type of funding to apply to the transfer example: BALANCE partnerReference: type: string description: >- The transaction/payment identifier in your system, uniquely identifies the transfer in your platform. Required for the Cross Currency Bulk Settlement model responses: '200': description: Transfer funding result. content: application/json: schema: type: object properties: type: type: string description: The type of funding applied to the transfer example: BALANCE status: type: string enum: - COMPLETED - REJECTED description: Funding status example: COMPLETED errorCode: type: - string - 'null' description: Failure reason example: null examples: completed: summary: Balance - Completed value: type: BALANCE status: COMPLETED errorCode: null insufficient-funds: summary: Balance - Insufficient Funds value: type: BALANCE status: REJECTED errorCode: transfer.insufficient_funds headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfers/{transferId}/payments: get: operationId: transferPaymentsList summary: List completed payments description: > 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. tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Returns a list of completed payment objects. content: application/json: schema: type: array items: $ref: '#/components/schemas/payment' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v2/transfers/{transferId}/invoices/bankingpartner: get: operationId: transferPayoutInfoGet summary: Get payout information description: > 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. tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Returns payout information for the transfer. content: application/json: schema: type: object properties: processorName: type: string description: >- The legal entity that processed the transfer on behalf of the customer example: Acme Bank Ltd. deliveryMode: type: string description: The delivery mode for the payment (e.g. SWIFT) example: SWIFT bankingPartnerReference: type: string description: >- The reference used by the partner bank to identify and track the transfer example: ABCD1234 bankingPartnerName: type: string description: The name of the sending bank to the recipient's bank example: Global Bank Corp. mt103: type: - string - 'null' description: The MT103 of the transfer, if available example: processorName: Acme Bank Ltd. deliveryMode: SWIFT bankingPartnerReference: ABCD1234 bankingPartnerName: Global Bank Corp. mt103: > {1:F01XXXXGBXXAXXX0000000000}{2:I103XXXXGBXXXXXXN}{3:{108:1234567}{111:001}{121:00000000-0000-0000-0000-000000000000}}{4: :20:1234567 :23B:CRED :32A:221212USD12345, :33B:USD12345, :50K:/11111111 SOME COMPANY INC. 1 SOME STREET MIAMI 33132 US :59:/GB00000000000000 COMPANY NAME LTD UK LONDON 1234 GB :70:REFERENCE :71A:OUR :71G:USD11, -} headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfers/{transferId}/receipt.pdf: get: operationId: transferReceiptGet summary: Get a transfer receipt description: > 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 %} tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Transfer confirmation receipt in Wise branded PDF format. content: application/pdf: schema: type: string format: binary headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfers/{transferId}/us-combined-receipt.pdf: get: operationId: transferUsCombinedReceiptGet summary: Get a US combined disclosure receipt description: > 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`. tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: The US Combined Receipt in Wise branded PDF format. content: application/pdf: schema: type: string format: binary headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/transfers/{transferId}/documents/noc: get: operationId: transferNocGet summary: Get a non objection certificate (INR) description: > 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. tags: - transfer security: - UserToken: [] - PersonalToken: [] parameters: - name: transferId in: path required: true description: The transfer ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: Non objection certificate in PDF format. content: application/pdf: schema: type: string format: binary headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: Transfer not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/profiles/{profileId}/partner-licence-transfers: post: operationId: transferPartnerLicenceCreate summary: Create a partner licence transfer deprecated: true description: > {% 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/transfer/transfercreate) or [Create a third party transfer](/api-reference/transfer/transferthirdpartycreate) instead. {% /admonition %} This is similar to the [Create a transfer](/api-reference/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. tags: - transfer security: - UserToken: [] parameters: - name: profileId in: path required: true description: The profile ID schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object required: - targetAccount - quote - customerTransactionId - originator properties: sourceAccount: type: integer format: int64 description: Refund recipient account ID targetAccount: type: integer format: int64 description: >- Recipient account ID. You can create multiple transfers to same recipient account quote: type: string description: >- V2 quote ID. You can only create one transfer per one quote. You cannot use same quote ID to create multiple transfers customerTransactionId: type: string description: >- Unique transfer ID in your system. Also used to perform idempotency check to avoid duplicate transfers. You can only submit one transfer with same customerTransactionId details: type: object properties: reference: type: string description: >- Recipient will see this reference text in their bank statement. Maximum allowed characters depends on the currency route. See [Business Payments Tips](https://wise.com/help/articles/2932870/tips-for-paying-invoices) for a full list originator: type: object required: - legalEntityType - externalId - address description: Data block to capture payment originator details properties: legalEntityType: type: string enum: - PRIVATE - BUSINESS description: Payment originator legal type externalId: type: string description: >- Unique customer ID in your system. This allows Wise to uniquely identify each originator name: type: object description: >- Originator name details. Required fields depend on the legal entity type: `givenName` and `familyName` are required for `PRIVATE`, `fullName` is required for `BUSINESS` properties: givenName: type: string description: >- Payment originator first name. Required if `legalEntityType = PRIVATE` middleNames: type: array items: type: string description: >- Payment originator middle name(s). Used only if `legalEntityType = PRIVATE` familyName: type: string description: >- Payment originator family name. Required if `legalEntityType = PRIVATE` patronymicName: type: string description: >- Payment originator patronymic name. Used only if `legalEntityType = PRIVATE` fullName: type: string description: >- Payment originator full legal name. Required if `legalEntityType = BUSINESS` dateOfBirth: type: string format: date description: >- Payment originator date of birth. Required if `legalEntityType = PRIVATE` businessRegistrationCode: type: string description: >- Payment originator business registry number / incorporation number. Required if `legalEntityType = BUSINESS` address: type: object required: - firstLine - city - countryCode properties: firstLine: type: string description: Payment originator address first line city: type: string description: Payment originator address city stateCode: type: string description: >- Payment originator address state code. Required if address country code in (US, CA, BR, AU) countryCode: type: string description: >- Payment originator address country code ISO 3166-1 alpha-2 minLength: 2 maxLength: 2 postCode: type: string description: Originator address zip code accountDetails: type: string description: Originator account number examples: personal: summary: Personal originator value: sourceAccount: 12345678 targetAccount: 87654321 quote: 8fa9be20-ba43-4b15-abbb-9424e1481050 customerTransactionId: unique-transfer-id-in-your-system details: reference: Ski trip originator: legalEntityType: PRIVATE externalId: CST-2991992 name: givenName: John middleNames: - Ryan familyName: Godspeed dateOfBirth: '1977-07-01' address: firstLine: Salu tee 100, Apt 4B city: Tallinn countryCode: EE postCode: '12112' accountDetails: the unique account number of the customer business: summary: Business originator value: sourceAccount: 12345678 targetAccount: 87654321 quote: 8fa9be20-ba43-4b15-abbb-9424e1481050 customerTransactionId: unique-transfer-id-in-your-system details: reference: Payment for invoice 22092 originator: legalEntityType: BUSINESS externalId: BIZ-2991992 name: fullName: Hot Air Balloon Services Ltd businessRegistrationCode: '1999212' address: firstLine: Aiandi tee 1431 city: Tallinn countryCode: EE postCode: '12112' accountDetails: the unique account number of the customer responses: '200': description: Partner licence transfer successfully created. content: application/json: schema: $ref: '#/components/schemas/originator-transfer' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/me: get: tags: - user summary: Retrieve current user by token operationId: userGetByToken description: > Get authenticated user details for the user's token submitted in the Authorization header. security: - UserToken: [] - PersonalToken: [] responses: '200': description: OK - Successfully retrieved user. content: application/json: schema: $ref: '#/components/schemas/user' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/users/{userId}: get: tags: - user summary: Retrieve a user by ID operationId: userGetById description: | Get authenticated user details by user ID. security: - UserToken: [] - PersonalToken: [] parameters: - name: userId in: path required: true schema: type: integer format: int64 description: The user ID. example: 101 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved user. content: application/json: schema: $ref: '#/components/schemas/user' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/user/signup/registration_code: post: tags: - user summary: Create a user with a registration code operationId: userCreate description: > 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. security: - ClientCredentialsToken: [] requestBody: required: true content: application/json: schema: type: object required: - email - registrationCode properties: email: type: string format: email description: New user's email address. example: user@email.com registrationCode: type: string minLength: 32 description: > Randomly generated registration code that is unique to this user and request. At least 32 characters long. You need to store registration code to obtain access token on behalf of this newly created user in next step. Please apply the same security standards to handling registration code as if it was a password. example: a]#Et6(yLW@mq4Ky_+EAjXxpHGq7*&lr language: type: string description: > User default language for UI and email communication. Allowed values: EN, US, PT, ES, FR, DE, IT, JA, RU, PL, HU, TR, RO, NL, HK. Default value: EN. example: EN responses: '200': description: OK - User is created successfully. content: application/json: schema: $ref: '#/components/schemas/user' example: id: 12345 name: null email: new.user@domain.com active: true details: null headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: Conflict - User already exists. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string path: type: string arguments: type: array items: type: string example: errors: - code: NOT_UNIQUE message: You're already a member. Please login path: email arguments: - email - class com.transferwise.fx.api.ApiRegisterCommand - existing.user@domain.com headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/users/exists: post: tags: - user summary: Check if user exists operationId: userCheckExists description: > 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. security: - ClientCredentialsToken: [] requestBody: required: true content: application/json: schema: type: object required: - email properties: email: type: string format: email description: User's email address. example: test@wise.com responses: '200': description: OK - Successfully checked user existence. content: application/json: schema: type: object properties: exists: type: boolean description: Whether a user with this email already exists. example: exists: true headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/users/{userId}/contact-email: put: tags: - user summary: Set a contact email address operationId: userContactEmailSet description: > 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. security: - UserToken: [] parameters: - name: userId in: path required: true schema: type: integer format: int64 description: The user ID. example: 101 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: type: object properties: email: type: string format: email description: Contact email address. example: new-user@email.com responses: '200': description: OK - Contact email address set successfully. content: application/json: schema: type: object properties: email: type: string format: email description: Contact email address. example: email: new-user@email.com headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: tags: - user summary: Retrieve a contact email address operationId: userContactEmailGet description: Retrieves a contact email address. security: - UserToken: [] parameters: - name: userId in: path required: true schema: type: integer format: int64 description: The user ID. example: 101 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK - Successfully retrieved contact email address. content: application/json: schema: type: object properties: email: type: string format: email description: Contact email address. example: email: new-user@email.com headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/user/pin: post: deprecated: true operationId: userSecurityPinCreate summary: Create PIN description: > 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. tags: - user-security security: - UserToken: [] parameters: - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -X POST \ 'https://api.wise-sandbox.com/v1/user/pin' \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-TW-JOSE-Method: jwe' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwi...' requestBody: required: true content: application/jose+json: schema: type: string description: | A JWE encrypted string. The decrypted payload contains: - `pin` — A four-digit string. Payload before encryption: ```json {"pin": "1234"} ``` example: responses: '204': description: PIN is created successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: PIN has already been created. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/users/{userId}/pin: delete: deprecated: true operationId: userSecurityPinDelete summary: Delete PIN description: > 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 %} tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: PIN is deleted successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: PIN is not setup for this user. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string example: errors: - code: pin.not.setup message: PIN has not been setup. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/user/facemap/enrol: post: deprecated: true operationId: userSecurityFacemapEnrol summary: Enrol FaceMap description: > 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). tags: - user-security security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object properties: faceMap: type: string description: > Base64-encoded binary data as a string. For more details how to get this binary, please read FaceTec's [export API](https://dev.facetec.com/api-guide#export-3d-facemap). To retrieve Wise's FaceTec public key, please refer to our FaceTec's [Get Public Key API](/api-reference/facetec/facetecpublickeyget). responses: '204': description: Enrollment is successful. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: FaceMap has already been enrolled. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/users/{userId}/facemap/enrol: delete: deprecated: true operationId: userSecurityFacemapDelete summary: Delete FaceMap description: > 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 %} tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: FaceMap is deleted successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: FaceMap is not setup for this user. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string example: errors: - code: facemap.not.setup message: FaceMap has not been setup. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/user/partner-device-fingerprints: post: deprecated: true operationId: userSecurityDeviceFingerprintCreate summary: Create Device Fingerprint description: > 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. tags: - user-security security: - UserToken: [] parameters: - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: | curl -X POST \ 'https://api.wise-sandbox.com/v1/user/partner-device-fingerprints' \ -H 'Authorization: Bearer ' \ -H 'Accept: application/jose+json' \ -H 'Accept-Encoding: identity' \ -H 'Content-Type: application/jose+json' \ -H 'Content-Encoding: identity' \ -H 'X-TW-JOSE-Method: jwe' \ -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcx...' requestBody: required: true content: application/jose+json: schema: type: string description: > A JWE encrypted string. The decrypted payload contains: - `deviceFingerprint` — A string value used as a device fingerprint. Payload before encryption: ```json {"deviceFingerprint": "3207da22-a0d3-4b6b-a591-6297e646fe32"} ``` example: responses: '200': description: The device fingerprint has been successfully created. content: application/json: schema: type: object properties: deviceFingerprintId: type: string format: uuid description: Identifier of the device fingerprint. createdAt: type: string format: date-time description: Timestamp on when the device fingerprint was created. example: deviceFingerprintId: 636a5514-aa86-4719-8700-e9a9a0ae7ea7 createdAt: '2024-05-24T07:27:58.273205554Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Maximum number of device fingerprints reached (defaulted to 3). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: The device fingerprint has already been created. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/users/{userId}/partner-device-fingerprints: get: deprecated: true operationId: userSecurityDeviceFingerprintList summary: List Device Fingerprints description: > 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 %} tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: type: array items: type: object properties: deviceFingerprintId: type: string format: uuid description: Identifier of the device fingerprint. createdAt: type: string format: date-time description: Timestamp on when the device fingerprint was created. example: - deviceFingerprintId: 636a5514-aa86-4719-8700-e9a9a0ae7ea7 createdAt: '2024-05-24T07:27:58.273205554Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: The user is not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/users/{userId}/partner-device-fingerprints/{deviceFingerprintId}: delete: deprecated: true operationId: userSecurityDeviceFingerprintDelete summary: Delete Device Fingerprint description: > 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 %} tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - name: deviceFingerprintId in: path required: true description: Device fingerprint ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: Device fingerprint has been successfully removed. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: User or deviceFingerprintId is not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/applications/{clientKey}/subscriptions: post: operationId: webhookApplicationSubscriptionCreate summary: Create Application Webhook Subscription description: > Create a webhook subscription at the application level. `clientKey` can be received upon obtaining client credentials from our tech support. tags: - webhook security: - ClientCredentialsToken: [] parameters: - name: clientKey in: path required: true description: Your application's client key. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/subscription-request' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/subscription' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: webhookApplicationSubscriptionList summary: List Application Webhook Subscriptions description: List all webhook subscriptions for your application. tags: - webhook security: - ClientCredentialsToken: [] parameters: - name: clientKey in: path required: true description: Your application's client key. schema: type: string - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/subscription' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/applications/{clientKey}/subscriptions/{subscriptionId}: get: operationId: webhookApplicationSubscriptionGet summary: Get Application Webhook Subscription description: Retrieve an application webhook subscription by its identifier. tags: - webhook security: - ClientCredentialsToken: [] parameters: - name: clientKey in: path required: true description: Your application's client key. schema: type: string - name: subscriptionId in: path required: true description: UUID of the subscription. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/subscription' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: operationId: webhookApplicationSubscriptionDelete summary: Delete Application Webhook Subscription description: Delete an application webhook subscription by its identifier. tags: - webhook security: - ClientCredentialsToken: [] parameters: - name: clientKey in: path required: true description: Your application's client key. schema: type: string - name: subscriptionId in: path required: true description: UUID of the subscription. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: No Content. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/applications/{clientKey}/subscriptions/{subscriptionId}/test-notifications: post: operationId: webhookApplicationSubscriptionTest summary: Test Application Webhook Subscription description: > 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 redeliver the notification later. The API returns the delivery IDs of the notifications that have been successfully queued for sending, which can be correlated with the delivery ID header values for notifications you later receive. {% admonition type="info" %} This test notification API is only available for application-based subscriptions. Profile-based subscriptions do not currently support this testing feature. {% /admonition %} tags: - webhook security: - ClientCredentialsToken: [] parameters: - name: clientKey in: path required: true description: Your application's client key. schema: type: string - name: subscriptionId in: path required: true description: UUID of the subscription. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/test-notification' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/subscriptions: post: operationId: webhookProfileSubscriptionCreate summary: Create Profile Webhook Subscription description: Create a webhook subscription at the profile level. tags: - webhook security: - UserToken: [] parameters: - name: profileId in: path required: true description: ID of the profile you are subscribing to. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/subscription-request' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/subscription' example: id: 72195556-e5cb-495e-a010-b37a4f2a3043 name: 'Webhook Subscription #1' delivery: version: 4.0.0 url: https://your.webhook.url/12345 trigger_on: transfers#state-change scope: domain: profile id: created_by: type: user id: created_at: '2019-10-10T13:55:57Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' get: operationId: webhookProfileSubscriptionList summary: List Profile Webhook Subscriptions description: List all webhook subscriptions for a profile. tags: - webhook security: - UserToken: [] parameters: - name: profileId in: path required: true description: ID of the profile. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: type: array items: $ref: '#/components/schemas/subscription' example: - id: e889e085-3677-4110-be26-3e9160ac9f25 name: '#1 subscription' delivery: version: 2.0.0 url: https://your.webhook.url/12345 trigger_on: transfers#state-change scope: domain: profile id: created_by: type: user id: - id: eabeb3f5-c134-4a1c-99e2-86a1163daf1b name: '#2 subscription' delivery: version: 2.0.0 url: https://your.webhook.url/12345 trigger_on: transfers#state-change scope: domain: profile id: created_by: type: user id: headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v3/profiles/{profileId}/subscriptions/{subscriptionId}: get: operationId: webhookProfileSubscriptionGet summary: Get Profile Webhook Subscription description: Retrieve a profile webhook subscription by its identifier. tags: - webhook security: - UserToken: [] parameters: - name: profileId in: path required: true description: ID of the profile. schema: type: integer format: int64 - name: subscriptionId in: path required: true description: UUID of the subscription. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: $ref: '#/components/schemas/subscription' example: id: f215f353-35fd-405b-b27f-4fd603c905ed name: 'Webhook Subscription #1' delivery: version: 2.0.0 url: https://your.webhook.url/12345 trigger_on: balances#credit scope: domain: profile id: created_by: type: user id: created_at: '2008-09-15T15:53:00Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' delete: operationId: webhookProfileSubscriptionDelete summary: Delete Profile Webhook Subscription description: Delete a profile webhook subscription by its identifier. tags: - webhook security: - UserToken: [] parameters: - name: profileId in: path required: true description: ID of the profile. schema: type: integer format: int64 - name: subscriptionId in: path required: true description: UUID of the subscription. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: No Content. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' webhooks: transfers#state-change: post: operationId: eventTransfersStateChange summary: Transfer state change description: > Triggered every time a transfer's status is updated. See the [Webhooks guide](/guides/developer/webhooks) for setup instructions, signature verification, and best practices. Events may not be delivered in the order they occurred. Use `data.occurred_at` to reconcile the order. See the [Event Ordering](/guides/developer/webhooks/event-ordering) guide for details. {% admonition type="warning" %} For topup-to-balance transfers, `transfers#state-change` events will **not** be triggered. To listen to these, subscribe to the `balances#update` event instead. {% /admonition %} * Event type: `transfers#state-change` * Profile level subscriptions: Supported * Application level subscriptions: Supported tags: - webhook-event - transfer parameters: - $ref: '#/components/parameters/x-signature-sha256' - $ref: '#/components/parameters/x-delivery-id' - $ref: '#/components/parameters/x-test-notification' requestBody: content: application/json: schema: title: Transfer State Change Event discriminator: propertyName: schema_version mapping: 4.0.0: '#/components/schemas/v4.0.0' 2.0.0: '#/components/schemas/v2.0.0' oneOf: - $ref: '#/components/schemas/v4.0.0' - $ref: '#/components/schemas/v2.0.0' responses: '200': content: application/json: schema: type: object properties: status: type: string example: ok description: Return any `2xx` status to acknowledge receipt of the event. transfers#active-cases: post: operationId: eventTransfersActiveCases summary: Transfer active cases description: > Triggered every time a transfer's list of active cases is updated. Active cases indicate potential problems with transfer processing. See the [Webhooks guide](/guides/developer/webhooks) for setup instructions, signature verification, and best practices. * Event type: `transfers#active-cases` * Profile level subscriptions: Supported * Application level subscriptions: Supported tags: - webhook-event - transfer parameters: - $ref: '#/components/parameters/x-signature-sha256' - $ref: '#/components/parameters/x-delivery-id' - $ref: '#/components/parameters/x-test-notification' requestBody: content: application/json: schema: title: Transfer Active Cases Event discriminator: propertyName: schema_version mapping: 4.0.0: '#/components/schemas/v4.0.0-2' 2.0.0: '#/components/schemas/v2.0.0-2' oneOf: - $ref: '#/components/schemas/v4.0.0-2' - $ref: '#/components/schemas/v2.0.0-2' responses: '200': content: application/json: schema: type: object properties: status: type: string example: ok description: Return any `2xx` status to acknowledge receipt of the event. account-details-payment#state-change: post: operationId: eventAccountDetailsPaymentStateChange summary: Account details payment state change description: > Triggered every time a pay-in is made into the specified account details. See the [Webhooks guide](/guides/developer/webhooks) for setup instructions, signature verification, and best practices. Events may not be delivered in the order they occurred. Use `data.occurred_at` to reconcile the order. See the [Event Ordering](/guides/developer/webhooks/event-ordering) guide for details. * Event type: `account-details-payment#state-change` * Profile level subscriptions: Supported * Application level subscriptions: Supported tags: - webhook-event - bank-account-details parameters: - $ref: '#/components/parameters/x-signature-sha256' - $ref: '#/components/parameters/x-delivery-id' - $ref: '#/components/parameters/x-test-notification' requestBody: content: application/json: schema: title: Account Details Payment State Change Event discriminator: propertyName: schema_version mapping: 4.0.0: '#/components/schemas/v4.0.0-3' 2.0.0: '#/components/schemas/v2.0.0-3' oneOf: - $ref: '#/components/schemas/v4.0.0-3' - $ref: '#/components/schemas/v2.0.0-3' responses: '200': content: application/json: schema: type: object properties: status: type: string example: ok description: Return any `2xx` status to acknowledge receipt of the event. cards#manual-provisioning-verification: post: operationId: eventCardsManualProvisioningVerification summary: Cards manual provisioning verification description: > Triggered when a card is manually added to a wallet provider, and the verification methods required to complete the wallet provisioning are returned. See the [Webhooks guide](/guides/developer/webhooks) for setup instructions, signature verification, and best practices. * Event type: `cards#manual-provisioning-verification` * Profile level subscriptions: Not Supported * Application level subscriptions: Supported tags: - webhook-event - card parameters: - $ref: '#/components/parameters/x-signature-sha256' - $ref: '#/components/parameters/x-delivery-id' - $ref: '#/components/parameters/x-test-notification' requestBody: content: application/json: schema: $ref: '#/components/schemas/v2.0.0-4' responses: '200': content: application/json: schema: type: object properties: status: type: string example: ok description: Return any `2xx` status to acknowledge receipt of the event. hold-limit-breach#update: post: operationId: eventHoldLimitBreachUpdate summary: Hold limit breach update description: > Triggered whenever a hold limit breach is opened or closed for a profile. A hold limit breach occurs when a balance exceeds the regulatory hold limit (applicable in countries such as Singapore and Malaysia). See the [Webhooks guide](/guides/developer/webhooks) for setup instructions, signature verification, and best practices. Events may not be delivered in the order they occurred. Use `data.occurred_at` to reconcile the order. See the [Event Ordering](/guides/developer/webhooks/event-ordering) guide for details. Use `data.state` to determine whether the breach has been opened or closed, and `data.closing_reason` to understand how it was resolved. * Event type: `hold-limit-breach#update` * Profile level subscriptions: Supported * Application level subscriptions: Supported tags: - webhook-event - balance parameters: - $ref: '#/components/parameters/x-signature-sha256' - $ref: '#/components/parameters/x-delivery-id' - $ref: '#/components/parameters/x-test-notification' requestBody: content: application/json: schema: $ref: '#/components/schemas/v4.0.0-4' examples: breachOpened: summary: Breach opened value: schema_version: 4.0.0 subscription_id: 01234567-89ab-cdef-0123-456789abcdef event_type: hold-limit-breach#update sent_at: '2024-06-01T08:00:00Z' data: resource: type: hold-limit-breach hold_limit_breach_id: 1001 profile_id: 12321323 amount: 500.5 currency: SGD state: OPEN closing_reason: null created_at: '2024-06-01T08:00:00Z' updated_at: '2024-06-01T08:00:00Z' occurred_at: '2024-06-01T08:00:00Z' breachClosed: summary: Breach closed value: schema_version: 4.0.0 subscription_id: 01234567-89ab-cdef-0123-456789abcdef event_type: hold-limit-breach#update sent_at: '2024-06-02T09:15:00Z' data: resource: type: hold-limit-breach hold_limit_breach_id: 1001 profile_id: 12321323 amount: 500.5 currency: SGD state: CLOSED closing_reason: MANUALLY_RESOLVED created_at: '2024-06-01T08:00:00Z' updated_at: '2024-06-02T09:15:00Z' occurred_at: '2024-06-02T09:15:00Z' responses: '200': content: application/json: schema: type: object properties: status: type: string example: ok description: Return any `2xx` status to acknowledge receipt of the event. components: parameters: X-External-Correlation-Id: x-global: true name: X-External-Correlation-Id in: header required: false description: > Optional UUID for correlating requests across systems. If provided, Wise echoes it back in the response. Maximum 36 characters. [Learn more](/guides/developer/headers/correlation-id). schema: type: string format: uuid maxLength: 36 example: f47ac10b-58cc-4372-a567-0e02b2c3d479 x-signature-sha256: name: X-Signature-SHA256 in: header required: false description: > RSA-SHA256 signature of the request body, Base64 encoded. Verify this against the [Wise public key](/guides/developer/webhooks/event-handling#requests) to ensure the request is authentic and has not been tampered with. schema: type: string example: t7FMhk3OARMgwqz0LJXO... x-delivery-id: name: X-Delivery-Id in: header required: false description: Unique identifier for this webhook delivery attempt. schema: type: string format: uuid example: a1b2c3d4-e5f6-7890-abcd-ef1234567890 x-test-notification: name: X-Test-Notification in: header required: false description: > Present with the value `true` if this is a test notification sent to verify your callback URL during subscription setup. schema: type: boolean example: true headers: X-External-Correlation-Id: x-global: true description: >- Echoed back when `X-External-Correlation-Id` was included in the request. [Learn more](/guides/developer/headers/correlation-id). schema: type: string format: uuid maxLength: 36 example: f47ac10b-58cc-4372-a567-0e02b2c3d479 x-trace-id: x-global: true description: >- Unique trace identifier assigned by Wise. Useful when contacting support about a specific request. schema: type: string example: fba501b6d453b96789f52338f019341f responses: '429': x-global: true description: >- Rate limit exceeded. Retry after the number of seconds specified in the `Retry-After` header. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer example: 5 X-Rate-Limited-By: description: Identifies the rate limiter that triggered the 429 response. schema: type: string example: wise-public-api X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' content: application/json: schema: type: object securitySchemes: UserToken: type: http scheme: bearer bearerFormat: JWT description: > 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. PersonalToken: type: http scheme: bearer bearerFormat: JWT description: > Personal API Token for individual personal or small business users. Generated from Wise.com > Settings > Connect and manage apps > API tokens. Has limited API access compared to OAuth tokens (PSD2 restrictions apply for EU/UK users). ClientCredentialsToken: type: http scheme: bearer bearerFormat: JWT description: > 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 [create an OAuth token](/api-reference/oauth-token/oauthtokencreate) for details. BasicAuth: type: http scheme: basic description: > 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. schemas: ChallengeResultRequest: type: object required: - transactionReference - challengeStatus properties: transactionReference: type: string description: >- Transaction reference as received in the 3DS challenge webhook event. example: '148579538' challengeStatus: type: string description: The customer's response to the 3DS challenge. enum: - APPROVED - REJECTED example: APPROVED ActivityResourceType: type: string description: Type of Activity Monetary Resource. example: TRANSFER enum: - ACCRUAL_CHARGE - ACQUIRING_PAYMENT - ASSETS_WITHDRAWAL - BALANCE_CASHBACK - BALANCE_INTEREST - BALANCE_TRANSACTION - BANK_DETAILS_ORDER - BATCH_TRANSFER - CARD_CASHBACK - CARD_ORDER - CARD_TRANSACTION - DIRECT_DEBIT_INSTRUCTION - DIRECT_DEBIT_TRANSACTION - FEE_REFUND - INCIDENT_REFUND - INCORPORATION_ORDER - OPERATIONAL_TRANSACTION - PAYMENT_REQUEST - REWARD - REWARDS_REDEMPTION - SEND_ORDER - SEND_ORDER_EXECUTION - TRANSFER ActivityStatus: type: string description: > Status of the Activity. - `REQUIRES_ATTENTION` - Requires an end user attention. - `IN_PROGRESS` - Indicates that this activity has yet to be completed. (Example: In progress Top Up) - `UPCOMING` - Indicates that this activity is scheduled to happen in the future. By default these activities will only be shown 2 days before the date. (Example: A scheduled transfer) - `COMPLETED` - Indicates that this activity is at its end state. (Example: A completed Top Up) - `CANCELLED` - Indicates that this activity is cancelled. (Example: A Top Up is cancelled) example: IN_PROGRESS enum: - REQUIRES_ATTENTION - IN_PROGRESS - UPCOMING - COMPLETED - CANCELLED ActivityType: type: string description: Type of Activity. example: CARD_PAYMENT enum: - ACQUIRING_PAYMENT - AUTO_CONVERSION - BALANCE_ADJUSTMENT - BALANCE_ASSET_FEE - BALANCE_CASHBACK - BALANCE_DEPOSIT - BALANCE_HOLD_FEE - BALANCE_INTEREST - BANK_DETAILS_ORDER - BATCH_TRANSFER - CARD_CASHBACK - CARD_CHECK - CARD_ORDER - CARD_PAYMENT - CASH_WITHDRAWAL - CLAIMABLE_SEND_ORDER - DIRECT_DEBIT_TRANSACTION - EXCESS_REFUND - FEE_REFUND - INCORPORATION_ORDER - INTERBALANCE - PAYMENT_REQUEST - PREFUNDING_TRANSFER - REWARD - SCHEDULED_SEND_ORDER - TRANSFER Activity: type: object description: Activity represents a snapshot of a performed action for a profile. properties: id: type: string description: Activity id. example: >- TU9ORVRBUllfQUNUSVZJVFk6OjE0NTU4OTk4OjpDQVJEX1RSQU5TQUNUSU9OOjozNDMwNDk= type: $ref: '#/components/schemas/ActivityType' resource: type: object description: The resource associated with the activity. properties: type: $ref: '#/components/schemas/ActivityResourceType' id: type: string description: The unique identifier of the resource. example: '343049' title: type: string description: > Title of the Activity. Value can be formatted with custom tags to put emphasis on important wordings. Supported custom tags: - ``: Indicates strong emphasis on words that the end user should pay attention to. - ``: Indicates a positive transaction (e.g., top up to balance is successful). - ``: Indicates a negative transaction (e.g., amount is deducted from a balance). - ``: (Coming soon) Indicates the negation of an activity (e.g., transfer is cancelled). example: Test Payment description: type: string description: A short description that briefly summarizes the activity. primaryAmount: type: string description: > A currency formatted text that describe the primary amount of transaction. Value of this field is intended to have units in it and should not be treated as a numeric value. One example of primaryAmount would be: "Topping up 100 USD balance with 80 GBP". In this case `100 USD` would be the primaryAmount of the activity. example: 150 JPY secondaryAmount: type: string description: > A currency formatted text that describe the secondary amount of transaction. Value of this field is intended to have units in it and should not be treated as a numeric value. Value can be empty if there is no good candidate as secondary amount. One example of secondaryAmount would be: "Topping up 100 USD balance with 80 GBP". In this case `80 GBP` would be the secondaryAmount of the activity. example: 1.50 SGD status: $ref: '#/components/schemas/ActivityStatus' createdOn: type: string format: date-time description: Timestamp when the activity was created. example: '2023-01-01T00:00:00.000Z' updatedOn: type: string format: date-time description: Timestamp when the activity was last modified. example: '2023-01-01T00:00:00.000Z' Address: type: object x-tags: - address description: Represents a physical address associated with a profile. properties: id: type: integer format: int64 description: Address ID. example: 10000001 profile: type: integer format: int64 description: User profile ID. example: 12345678 details: type: object description: Address details. properties: country: type: string description: Country code (ISO 3166-2 Country Code). example: US firstLine: type: string description: 'Address line: street, house, apartment.' example: 50 Sunflower Ave postCode: type: string description: Postal or zip code (max 30 characters). maxLength: 30 example: '10025' city: type: string description: City name. example: Phoenix state: type: string description: State code. Required if country is US, CA, BR, or AU. example: AZ occupations: type: array description: >- User occupations. Required for CA, IN, JP, ID, IL, MX, and within the US for state NM. items: type: object properties: code: type: string description: User occupation - any value permitted. example: Software Engineer format: type: string description: Occupation type - always `FREE_FORM`. enum: - FREE_FORM example: FREE_FORM AddressRequest: type: object description: Request payload for creating or updating an address. required: - profile - details properties: profile: type: integer format: int64 description: User profile ID. example: 12345678 details: type: object description: Address details. required: - country - firstLine - postCode - city properties: country: type: string description: Country code (ISO 3166-1 alpha-2). example: US firstLine: type: string description: 'Address line: street, house, apartment.' example: 50 Sunflower Ave postCode: type: string description: Postal / zip code (max 30 characters). maxLength: 30 example: '10025' city: type: string description: City name. example: Phoenix state: type: string description: State code. Required if country is US, CA, BR, or AU. example: AZ occupations: type: array description: >- User occupations. Required for CA, IN, JP, ID, IL, MX, and within the US for state NM. items: type: object properties: code: type: string description: User occupation - any value permitted. example: Software Engineer format: type: string description: Occupation type - always `FREE_FORM`. enum: - FREE_FORM example: FREE_FORM AddressRequirementsResponse: type: array items: type: object properties: type: type: string description: Always "address". example: address fields: type: array description: List of fields required for the address. items: type: object properties: name: type: string description: Display name of the field. example: Country group: type: array items: type: object properties: key: type: string description: Key name to include in the JSON request. example: country type: type: string description: Display type of field. enum: - text - select example: select refreshRequirementsOnChange: type: boolean description: >- If true, call POST address-requirements when this field value changes to discover additional required fields. example: true required: type: boolean description: Indicates if the field is mandatory. example: true displayFormat: type: - string - 'null' description: Display format pattern. example: null example: type: string description: Example value to help users understand what to input. example: Germany minLength: type: - integer - 'null' format: int32 description: Minimum valid length of field value. example: null maxLength: type: - integer - 'null' format: int32 description: Maximum valid length of field value. example: null validationRegexp: type: - string - 'null' description: Regexp validation pattern. example: null validationAsync: type: - string - 'null' description: >- Deprecated. This validation will instead be performed when submitting the request. deprecated: true example: null valuesAllowed: type: array description: List of allowed values (for select fields). example: - key: US name: United States - key: GB name: United Kingdom items: type: object properties: key: type: string description: Value key to use in the request. name: type: string description: Display name for the value. AddressRequirementsRequest: type: object description: Request body for retrieving address requirements based on context. required: - details properties: profile: type: integer format: int64 description: User profile ID. example: 12345678 details: type: object description: >- Address details to provide context for requirements lookup. Additional fields beyond those listed are accepted. required: - country properties: country: type: string description: Country code (ISO 3166-2 Country Code). example: US state: type: string description: State code. Provide to discover state-dependent fields. example: AZ additionalProperties: type: string description: >- Any other properties to provide context for the requirements lookup. BalanceType: type: string description: > Type of balance account. - `STANDARD` - Standard balance account. Only one per currency per profile. - `SAVINGS` - Savings balance (Jar). Multiple allowed per currency. enum: - STANDARD - SAVINGS example: STANDARD Balance: type: object x-tags: - balance description: Represents a balance account within a profile. properties: id: type: integer format: int64 description: Balance ID. example: 200001 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR type: $ref: '#/components/schemas/BalanceType' name: type: - string - 'null' description: Name of the balance. Required for SAVINGS balances. example: null icon: type: - object - 'null' description: Icon for the balance. properties: type: type: string enum: - EMOJI description: Icon type. value: type: string description: Icon value (e.g., emoji character). example: null investmentState: type: string description: | Investment state of the balance. - `NOT_INVESTED` - Balance is not invested. - `INVESTED` - Balance is invested in assets. - `INVESTING` - Balance is being invested into assets. - `DIVESTING` - Balance is being divested from assets. - `UNKNOWN` - Investment state is unknown. enum: - NOT_INVESTED - INVESTED - INVESTING - DIVESTING - UNKNOWN example: NOT_INVESTED amount: type: object description: Available balance that can be used to fund transfers. properties: value: type: number description: Amount value. example: 310.86 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR reservedAmount: type: object description: Amount reserved for transactions. properties: value: type: number description: Amount value. example: 0 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR cashAmount: type: object description: Cash amount in the account. properties: value: type: number description: Amount value. example: 310.86 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR totalWorth: type: object description: Current total worth. properties: value: type: number description: Amount value. example: 310.86 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR creationTime: type: string format: date-time description: Date when the balance was created. example: '2020-05-20T14:43:16.658Z' modificationTime: type: string format: date-time description: Date when the balance was last modified. example: '2020-05-20T14:43:16.658Z' visible: type: boolean description: Whether the balance is visible to the user. example: true HoldLimitBreach: type: object x-tags: - balance description: Represents a hold limit breach. properties: id: type: integer format: int64 description: Hold limit breach ID. example: 200001 profileId: type: integer format: int64 description: ID of the profile that owns the hold limit breach example: 123456 amount: type: number description: Amount value. example: 310.86 currency: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR state: type: string description: Current state of the hold limit breach. enum: - OPEN - CLOSED x-enumDescriptions: OPEN: Hold limit breach is open and needs to be resolved. CLOSED: Hold limit breach is closed and resolved. example: OPEN closingReason: type: string description: Reason the breach was closed, null if state is `OPEN`. enum: - AUTOMATICALLY_RESOLVED - MANUALLY_RESOLVED x-enumDescriptions: AUTOMATICALLY_RESOLVED: >- The breach was resolved automatically after the customer withdrew funds and the balance dropped below the hold limit. MANUALLY_RESOLVED: >- The breach was closed by calling the [Close Hold Limit Breach](/api-reference/balance/holdlimitbreachclose) endpoint with a specified recipient. example: AUTOMATICALLY_RESOLVED createdAt: type: string format: date-time description: Date when the hold limit breach was created. example: '2020-05-20T14:43:16.658Z' updatedAt: type: string format: date-time description: Date when the hold limit breach was last modified. example: '2020-05-20T14:43:16.658Z' BankAccountDetails: type: object title: Bank Account Details x-tags: - bank-account-details description: >- Bank account details for receiving money into a Wise Multi-Currency Account. properties: id: type: - integer - 'null' format: int64 description: >- Bank account details ID. Returns `null` for preview account details that have not yet been issued. example: 14000001 currency: type: object description: Currency information for the bank account details. properties: code: type: string description: Currency code (ISO 4217 Alphabetic Code). example: EUR name: type: string description: Currency name. example: Euro title: type: string description: Account title. example: Your EUR account details subtitle: type: string description: Account subtitle. example: IBAN, SWIFT/BIC status: type: string description: > Account details status: - `AVAILABLE`: Account details do not exist for the user but may be created - `ACTIVE`: Account details are ready to be used by this user enum: - AVAILABLE - ACTIVE example: ACTIVE deprecated: type: boolean description: >- When `true`, Wise has issued new account details for the same currency. Users should not use the deprecated account but may still have external references to it. example: false receiveOptions: type: array description: > Available receive options for the given currency: - `LOCAL`: Local bank details to receive money in the account currency - `INTERNATIONAL`: SWIFT bank details to receive money internationally items: type: object properties: type: type: string description: Receive option type. enum: - LOCAL - INTERNATIONAL example: LOCAL title: type: string description: Display title for this receive option. example: Local description: type: - object - 'null' description: Description for this receive option. properties: title: type: string description: Description title. example: Your EUR account details body: type: string description: Description body text. example: Receive from a bank in the Eurozone cta: type: - object - 'null' description: Call-to-action details. properties: label: type: string description: CTA label. example: IBAN content: type: string description: CTA content. example: BE12 3456 7890 1234 details: type: array description: > Account details to display to users. This array varies by currency. For example, EUR returns `ACCOUNT_HOLDER`, `SWIFT_CODE`, `IBAN` and `BANK_NAME_AND_ADDRESS`. items: type: object properties: type: type: string description: Account detail type. example: IBAN title: type: string description: Label to display in the UI. example: IBAN body: type: string description: Value to display in the UI. example: BE12 3456 7890 1234 description: type: - object - 'null' description: Tooltip/popup hint content when present. properties: title: type: string description: Description title. example: What is an IBAN? body: type: string description: Description body (may contain HTML). example: >-

IBAN stands for International Bank Account Number.

cta: type: - object - 'null' description: Call-to-action details. properties: label: type: string description: CTA label. example: IBAN content: type: string description: CTA content. example: BE12 3456 7890 1234 hidden: type: boolean description: Whether the field should be hidden in the UI. example: false bankFeatures: type: array description: Features enabled on the account. items: type: object properties: key: type: string description: Feature identifier. example: LOCAL_RECEIVE title: type: string description: Human-readable feature name. example: Receive locally supported: type: boolean description: Whether the feature is supported. example: true PayInDetails: type: object description: >- Pay-in details describe how the batch group can be funded. Only populated when a batch group is in the `COMPLETED` state. properties: type: type: string description: Method of payment. enum: - bank_transfer example: bank_transfer reference: type: string description: >- The reference that should be used when funding the transfers in the batch group. This reference should be treated as an opaque value and there should be no attempt to decode or decompose it. example: B5323 amount: type: number format: decimal description: >- The total pay-in amount for all transactions in the batch when paying in with this reference and method. example: 12504.54 currency: type: string description: Three-character ISO 4217 currency code. example: NOK name: type: string description: Name of the bank account holder. example: TransferWise Ltd branchName: type: - string - 'null' description: >- Name of the bank branch. Provided only when the currency route requires it (such as JPY). example: null accountNumber: type: - string - 'null' description: Bank account number. example: '9910728' accountType: type: - string - 'null' description: >- Bank account type. Provided only when the currency route requires it. example: null bankCode: type: - string - 'null' description: >- Bank identifier or routing number, depending on pay-in type and currency. example: '8301' bankAddress: type: - object - 'null' description: >- Address for the receiving bank. Provided only when the currency route requires it. properties: name: type: string description: Bank name. example: CitiBank Europe Plc firstLine: type: string description: Street address. example: Bolette brygge 1 postCode: type: string description: Postcode or ZIP code. example: '0252' city: type: string description: City. example: Oslo stateCode: type: - string - 'null' description: State, province, or region code. example: null country: type: string description: Country name. example: Norway transferWiseAddress: type: - object - 'null' description: Wise's address. Provided only when the currency route requires it. properties: name: type: string description: Wise's company name. example: TransferWise Ltd firstLine: type: string description: Street address. example: 6th Floor, The Tea Building, 56 Shoreditch High Street postCode: type: string description: Postcode or ZIP code. example: E1 6JJ city: type: string description: City. example: London stateCode: type: - string - 'null' description: State, province, or region code. example: null country: type: string description: Country name. example: United Kingdom iban: type: - string - 'null' description: ISO 13616 International Bank Account Number (when available). example: null bban: type: - string - 'null' description: >- Basic Bank Account Number (BBAN). Provided only when the currency route requires it (such as NOK). example: '83019910728' institutionNumber: type: - string - 'null' description: >- Financial Institution number (3 digits). Provided only when the currency route requires it (such as CAD). example: null transitNumber: type: - string - 'null' description: >- Branch Transit Number (5 digits). Provided only when the currency route requires it (such as CAD). example: null beneficiaryBankBIC: type: - string - 'null' description: >- Beneficiary Bank Business Identifier Code (BIC). Provided only when the currency route requires it (such as CAD). example: null intermediaryBankBIC: type: - string - 'null' description: >- Intermediary Bank Business Identifier Code (BIC). Provided only when the currency route requires it (such as CAD). example: null fpsIdentifier: type: - string - 'null' description: >- Faster Payment System identifier. Provided only when the currency route requires it (such as HKD). example: null clearingNumber: type: - string - 'null' description: >- Clearing number. Provided only when the currency route requires it (such as SEK). example: null BatchGroup: title: Batch Group x-tags: - batch-group type: object properties: id: type: string format: uuid description: Batch group ID. example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 version: type: integer format: int64 description: > Batch version, used for concurrency control. This number is updated whenever there is a change to the batch group state (its status, the identity of the transfers in the batch, etc). Some API operations require this version in requests, and operations may be rejected when the requested version does not match the server's version. The version is a signed integer and is not ordered with respect to any previous version. example: 123 name: type: string description: Descriptive name for the batch group. example: My batch group sourceCurrency: type: string description: >- Source currency code (ISO 4217 Alphabetic Code). This currency is expected to be used for funding the batch group. example: GBP status: type: string description: > Current batch group status: - `NEW` — New batch group with zero or more transfers. Able to have more transfers added to it. Transfers in a `NEW` group cannot yet be funded and paid out. - `COMPLETED` — The batch group has had all desired transfers added and is now closed to further changes. Transfers in the group can now be funded and paid out. Note: `COMPLETED` does not imply payouts have been successfully completed. - `MARKED_FOR_CANCELLATION` — Cancellation of the transfers in the batch group was requested. - `PROCESSING_CANCEL` — Transfers in the group are being cancelled. - `CANCELLED` — Transfers in the group have been cancelled. enum: - NEW - COMPLETED - MARKED_FOR_CANCELLATION - PROCESSING_CANCEL - CANCELLED example: COMPLETED transferIds: type: array items: type: integer format: int64 description: The IDs of all transfers successfully added to the group. example: - 234 - 456 payInDetails: type: array description: > List of pay-in details describing how the batch group can be funded. Provided only when the batch group is in the `COMPLETED` state. Currently supported types: `bank_transfer`. items: $ref: '#/components/schemas/PayInDetails' PaymentInitiation: type: object description: Payment initiation for funding a batch group via direct debit. properties: id: type: integer format: int64 description: Payment initiation ID. example: 12345 batchGroupId: type: string format: uuid description: Batch group ID. example: 068e186d-9632-4937-b753-af3e53f4d0b0 reference: type: string description: >- Payment reference that will be passed to the network. Can be used for reconciliation. example: B1234567 userId: type: integer format: int64 description: The ID of the user who initiated this payment. example: 33333333 profileId: type: integer format: int64 description: The ID of the profile this payment belongs to. example: 44444444 type: type: string description: Payment type. enum: - DIRECT_DEBIT example: DIRECT_DEBIT status: type: string description: | Payment initiation status: - `NEW` — Payment initiation created - `PROCESSING` — Payment is being processed - `COMPLETED` — Payment completed successfully - `FAILED` — Payment failed - `CHARGED_BACK` — Payment was charged back enum: - NEW - PROCESSING - COMPLETED - FAILED - CHARGED_BACK example: NEW accountId: type: integer format: int64 description: External account ID associated with the payment. example: 1 transferId: type: - integer - 'null' format: int64 description: >- Transfer ID of the direct debit payment. Present only after the direct debit is initiated. example: null createdTime: type: string format: date-time description: Date and time when the payment initiation was created. example: '2022-01-01T19:51:41.423404Z' Card: type: object description: The Card resource represents a Wise card linked to a profile. x-tags: - card properties: token: type: string description: Unique identifier for the card. example: ca0c8154-1e14-4464-a1ce-dcea7dc3de52 profileId: type: integer format: int64 description: Profile ID that owns this card. example: 123456 clientId: type: string description: Client ID of the partner that issued the card. example: wise_api_docs status: type: object description: Current status of the card. properties: value: type: string description: > Status value. One of: - `ACTIVE` - Card is active and can be used - `INACTIVE` - Card is inactive and all transactions will be declined - `BLOCKED` - Card is blocked and cannot be reversed back to any state - `FROZEN` - Card is temporarily blocked - `PARTNER_SUSPENDED` - Card is suspended by Wise temporarily (do not display to end customers) - `EXPIRED` - Card is expired - `PURGED` - Cardholder data (e.g. PAN, PIN) has been purged after the retention period (555 days after the card's expiry date) enum: - ACTIVE - INACTIVE - BLOCKED - FROZEN - PARTNER_SUSPENDED - EXPIRED - PURGED example: ACTIVE cardHolderName: type: string description: Name of the card holder. example: John Smith expiryDate: type: string format: date-time description: Date when the card will expire. example: '2028-05-31T00:00:00Z' lastFourDigits: type: string description: Last 4 digits of the card number. example: '6320' bankIdentificationNumber: type: string description: Bank identification number (BIN) of the card. example: '459661' phoneNumber: type: string description: Phone number associated with the card. example: '+441234567890' cardProgram: type: object description: Card program details. properties: name: type: string description: Name of the card program. example: VISA_DEBIT_BUSINESS_UK_1 scheme: type: string description: Card network scheme. enum: - VISA - MASTERCARD example: VISA defaultCurrency: type: string description: Default currency of the card. example: GBP cardType: type: string description: Type of the card. E.g. `PHYSICAL` or `VIRTUAL`. example: VIRTUAL unlockSpendingPermissions: type: string description: > Method with which physical card spending permissions can be unlocked. One of: - `WITH_PARTNER_API` - Unlock via Partner API - `WITH_FIRST_CHIP_AND_PIN_TRANSACTION` - Unlock with first chip and PIN transaction - `NONE` - Not applicable (for virtual cards) enum: - WITH_PARTNER_API - WITH_FIRST_CHIP_AND_PIN_TRANSACTION - NONE example: WITH_PARTNER_API creationTime: type: string format: date-time description: Time when the card was created. example: '2022-05-31T01:43:24.596321434Z' modificationTime: type: string format: date-time description: Time when the card was last modified. example: '2022-05-31T01:43:24.596321825Z' Permission: type: object description: Spending permission configuration for a card. x-tags: - card properties: type: type: string description: > The type of transaction this permission controls: - `ECOM` - Online transactions - `POS_CHIP` - Physical point-of-sale transactions with chip - `POS_MAGSTRIPE` - Physical point-of-sale transactions with magnetic stripe - `POS_CONTACTLESS` - Physical point-of-sale contactless transactions - `ATM_WITHDRAWAL` - ATM withdrawals - `MOBILE_WALLETS` - Digital wallet payments (Apple Pay, Google Pay) enum: - ECOM - POS_CHIP - POS_MAGSTRIPE - POS_CONTACTLESS - ATM_WITHDRAWAL - MOBILE_WALLETS example: ECOM isEnabled: type: boolean description: Indicates if this permission type is enabled. example: false isLocked: type: boolean description: >- Indicates if this permission is locked. If locked, the permission cannot be enabled. example: false ProductionStatus: type: object description: Represents the production status of a card at a kiosk machine. properties: status: type: string description: | Current production status: - `READY` - Card is ready for production - `IN_PROGRESS` - Card is in production at the kiosk machine - `PRODUCED` - Card is produced and collected. This is a final state - `PRODUCTION_ERROR` - Card production failed - `REQUEST_ERROR` - Card production request failed enum: - READY - IN_PROGRESS - PRODUCED - PRODUCTION_ERROR - REQUEST_ERROR example: IN_PROGRESS kioskId: type: - string - 'null' description: >- Identifier that specifies which kiosk machine is producing the card. When the status is `READY`, this value is null. example: WIS00001 occurredAt: type: string format: date-time description: >- Time when the card production request has been sent to the kiosk machine (ISO 8601 format). example: '2024-01-01T12:24:56.121Z' errorCode: type: - string - 'null' description: > Code returned when card production is not successful. Nullable. **Request errors** - Returned when `status` is `REQUEST_ERROR`: - `UNKNOWN_ERROR` - An error occurred on the server - `REQUEST_ALREADY_EXISTS` - The request has already been submitted - `KIOSK_ID_NOT_FOUND` - The kiosk ID does not exist - `CARD_TYPE_NOT_FOUND` - The card type does not exist - `INVALID_FIELD_VALUE` - Some field values are unexpected - `INVALID_PIN_FORMAT` - The PIN does not follow ISO0 or ISO2 standard - `EMPTY_OR_NULL_FIELD_VALUE` - Some required fields are empty or null - `EMPTY_OR_NULL_OR_WRONG_SIZE_FIELD_VALUE` - Some required fields are empty, null, or have incorrect lengths - `CHARSET_NOT_SUPPORTED` - The character set for some fields is not supported - `INVALID_FIELD_FORMAT` - Some field formats are invalid - `INVALID_FIELD_ENCODING` - The encoding for some fields is not expected - `CDATA_ENCODING_OR_FORMATING_ERROR` - The encoding or formatting for XML text field values is incorrect - `PIN_LENGTH_ERROR` - The PIN length is incorrect - `PIN_VERIFICATION_FAILED` - The PIN cannot be verified because the server is unreachable - `DATA_PREPARATION_FAILED` - The server failed to parse the request - `PARTIAL_DATA_RECEIVED` - Only part of the expected data has been received - `NO_BRANCH_LINKED_TO_KIOSK` - The kiosk has not been linked to any branch - `IMAGE_SERVER_ERROR` - The image server is unreachable or failed to process the data - `PAN_ALREADY_EXISTS` - The PAN already exists - `PRINTER_OR_SATELLITE_NOT_READY` - The printer or satellite is not ready to start the production - `REQUEST_CREATED_BUT_NOT_STARTED` - The request has been created, but production is pending until the printer or satellite is ready - `UNABLE_TO_ACCEPT_REQUEST` - The system is currently busy and cannot accept new requests at this time **Production errors** - Returned when `status` is `PRODUCTION_ERROR`: - `CB_NOT_AVAILABLE` - Main server error: central base not available - `CB_DB_NOT_AVAILABLE` - Main server error: database not available - `CB_NETWORK_NOT_AVAILABLE` - Main server error: network not available - `CB_AUTHENTICATION_FAILED` - Main server error: user authentication verification failed - `CB_SERVICE_NOT_ALLOWED` - Main server error: the accessed service requires a higher security level - `CB_TIME` - Main server error: timeout occurred on the Central Base side - `DP_NOT_AVAILABLE` - Data processing error: the Data preparation module is not available - `DP_IO_ERROR` - Data processing error: Input/Output error when communicating with the DP - `DP_TIMEOUT` - Data processing error: timeout error - `SAT_SERVER_NOT_REACHABLE` - Satellite agent error: the server is not reachable - `SAT_AUTHENTICATION_FAILED` - Satellite agent error: user authentication failed on satellite - `SAT_NETWORK_NOT_AVAILABLE` - Satellite agent error: the network is not available - `PRT_NOT_REACHABLE` - Printer error: printer is not reachable - `PRT_SETUP_ERROR` - Printer error: printer setup is incorrect - `PRT_TIMEOUT` - Printer error: printer timeout - `PRT_RIBBON` - Printer error: ribbon error - `PRT_LOCK_ERROR` - Printer error: printer physically unlocked - `PRT_RIBBON_MISSING` - Printer error: ribbon is missing - `PRT_RIBBON_ENDED` - Printer error: ribbon has ended - `PRT_COVER_OPEN` - Printer error: printer cover is open - `PRT_PAUSED` - Printer error: printer paused - `PRD_UNEXPECTED_DATA` - Production error: production data is incorrect - `PRD_FEEDER_EMPTY` - Production error: feeder is empty - `PRD_FEEDER_JAM` - Production error: feeder card jam - `PRD_HOPPER_FULL` - Production error: hopper is full - `PRD_HOPPER_DOOR` - Production error: hopper door is open - `PRD_HOPPER_JAM` - Production error: hopper card jam - `PRD_MAGSTRIPE` - Production error: error occurred during magstripe encoding - `PRD_SMARTCARD` - Production error: error occurred during chip personalization - `PRD_EMBOSSER` - Production error: error occurred during embossing - `PRD_TIMEOUT` - Production error: production timeout has been reached - `PRD_REJECT_FULL` - Production error: reject box is full - `PRD_SMARTCARD_CARD_NOT_IN_READER` - Production error: card is not in reader - `PRD_FINAL_VALIDATION_NOK` - Production error: user has rejected card production - `INV_NOT_INITIALIZED` - Production error: inventory not initialized - `UNKNOWN_ERROR` - Unknown error example: PIN_VERIFICATION_FAILED description: type: - string - 'null' description: Detailed description of the error code. example: The PIN cannot be verified because the server is unreachable CardOrder: type: object title: Card Order x-tags: - card-order properties: id: type: integer format: int64 description: ID of the card order. example: 142 profileId: type: integer format: int64 description: Profile ID. example: 123456 clientId: type: string description: Client ID. example: your-client-id cardProgram: type: object description: >- The card program associated with this card order. A Card Program is what Wise refers to all the cards that you will be issuing with us, grouped by product type and by issuing country. properties: name: type: string description: The name of the card program. example: VISA_DEBIT_BUSINESS_UK_1_PHYSICAL_CARDS_API scheme: type: string description: | The network of the card program: - `MASTERCARD` - `VISA` enum: - MASTERCARD - VISA example: VISA defaultCurrency: type: string description: The default currency assigned to the card program. example: GBP cardType: type: string description: | The type of the card: - `VIRTUAL_NON_UPGRADEABLE` - `PHYSICAL` enum: - VIRTUAL_NON_UPGRADEABLE - PHYSICAL example: PHYSICAL address: type: object description: >- Address set during card order. Fields vary by country. See the [card address validation guide](/guides/developer/api-guides/card-address-validation) for country-specific fields and validation rules. additionalProperties: true properties: firstLine: type: string description: Card holder's address. example: 56 Shoreditch High St secondLine: type: - string - 'null' description: Card holder's address. example: The Tea Bldg thirdLine: type: - string - 'null' description: Card holder's address. example: null city: type: string description: Card holder's city. example: London postCode: type: string description: Card holder's postal code. example: E1 6JJ state: type: - string - 'null' description: Card holder's state. example: null country: type: string description: Card holder's country (ISO 3166-1 alpha-2). example: GB cardToken: type: - string - 'null' description: Token of the card associated with card order. Nullable. example: 4dc0be88-903f-49e4-8237-735f1139e3dd replacesCard: type: - string - 'null' description: A string for replacement card. Not supported at the moment. example: null creationTime: type: string format: date-time description: Time when the card order is created. example: '2023-07-31T01:43:24.596321434Z' modificationTime: type: string format: date-time description: Time when the card order was last modified. example: '2023-07-31T01:43:24.596321825Z' status: type: string description: >- Status of the card order. See [card order status flow](/api-reference/card-order#card-order-status-flow) for details. enum: - PLACED - REQUIREMENTS_FULFILLED - CARD_DETAILS_CREATED - PRODUCED - COMPLETED - CANCELLED - RETURNED example: PRODUCED cardHolderName: type: string description: Name of the card holder. example: John Smith phoneNumber: type: string description: Phone number associated with the card order. example: '+441234567890' lifetimeLimit: type: - number - 'null' description: Maximum amount of spending on the card once issued. Nullable. example: 100 deliveryEstimate: type: string format: date-time description: > The estimated time when the card will be delivered. There are few scenarios to be mindful of: 1. For virtual card the delivery estimate will be close to the creationTime, as it does not require delivery. 2. For physical card in `PLACED` status, the delivery estimate is calculated assuming that the order requirements will be fulfilled today (refreshed daily). 3. For physical card after `PLACED` status, we provide a best effort estimation, and it should not be used as delivery timing as we will have separate delivery tracking (subject to region availability) for physical card that is coming soon. example: '2023-10-30T07:11:00.848681Z' deliveryDetails: type: object description: >- Delivery details of a physical card order. For virtual cards, this value is null. properties: deliveryOption: type: string description: The delivery option used on the card order. enum: - POSTAL_SERVICE_STANDARD - POSTAL_SERVICE_WITH_TRACKING - KIOSK_COLLECTION example: POSTAL_SERVICE_WITH_TRACKING deliveryVendor: type: - string - 'null' description: The name of the delivery vendor. example: DHL trackingUrl: type: - string - 'null' description: The URL to track the card delivery. example: >- https://www.dhl.com/gb-en/home/tracking/tracking-express.html?submit=1&tracking-id=1999473803 trackingNumber: type: - string - 'null' description: The tracking number of the card delivery. example: '1999473803' CardTransactionV3: title: Card Transaction (V3) type: object additionalProperties: true properties: id: type: string description: ID of the transaction example: '342671' cardToken: type: string description: Unique identifier of the card example: 59123122-223d-45f9-b840-0ad4a4f80937 type: type: string description: > [Type](/api-reference/card-transaction#card-transaction-type) of the transaction. One of: - `ACCOUNT_CREDIT` - `ACCOUNT_FUNDING` - `CASH_ADVANCE` - `CASH_WITHDRAWAL` - `CHARGEBACK` - `CREDIT_TRANSACTION` - `ECOM_PURCHASE` - `POS_PURCHASE` - `REFUND` enum: - ACCOUNT_CREDIT - ACCOUNT_FUNDING - CASH_ADVANCE - CASH_WITHDRAWAL - CHARGEBACK - CREDIT_TRANSACTION - ECOM_PURCHASE - POS_PURCHASE - REFUND example: ECOM_PURCHASE declineReason: type: - string - 'null' description: >- Code of the [decline reason](/api-reference/card-transaction#card-transaction-decline-reasons) if applicable example: null detailedDeclineReason: type: - string - 'null' description: >- Code of the [detailed decline reason](/api-reference/card-transaction#card-transaction-detailed-decline-reasons) if applicable example: null createdDate: type: string format: date-time description: When the transaction was created example: '2022-11-28T08:17:54.241236Z' state: type: string description: > The current [state](/api-reference/card-transaction#card-transaction-state) of the transaction. One of: - `IN_PROGRESS` - `COMPLETED` - `DECLINED` - `CANCELLED` - `UNKNOWN` enum: - IN_PROGRESS - COMPLETED - DECLINED - CANCELLED - UNKNOWN example: IN_PROGRESS cardLastDigits: type: string description: Last 4 digits of the card example: '3086' transactionAmount: type: object description: >- Transaction amount, excluding all embedded fees such as ATM fees that are not applied by Wise properties: amount: type: number description: Transaction amount example: 1.5 currency: type: string description: Currency code example: SGD fees: type: array description: Array of fees items: type: object properties: amount: type: number description: Fee amount example: 0.1 currency: type: string description: Currency code example: SGD fee_type: type: string description: Fee type example: ATM_ACQUIRER transactionAmountWithFees: type: object description: Transaction amount including fees properties: value: type: number description: Transaction amount including fees example: 1.5 currency: type: string description: Currency code example: SGD merchant: type: object description: Merchant information properties: name: type: string description: Name of the merchant example: Test Payment location: type: object description: Merchant location properties: country: type: - string - 'null' description: Country where merchant is located example: France city: type: - string - 'null' description: City where merchant is located example: Rouen zipCode: type: - string - 'null' description: Zip code where merchant is located example: '00000' region: type: - string - 'null' description: Region where merchant is located example: null state: type: - string - 'null' description: State where merchant is located example: null category: type: object description: Merchant category properties: name: type: string description: Category of the merchant example: RMiscellaneousAndSpecial code: type: string description: MCC code of the merchant example: '5999' description: type: string description: Description of the merchant category example: 5999 R Miscellaneous and Special authorisationMethod: type: string description: Authorisation method example: MANUAL_ENTRY balanceTransactionId: type: - integer - 'null' format: int64 description: Associated balance transaction ID if applicable example: 2598366 debits: type: array description: Array of debits items: type: object properties: balanceId: type: integer format: int64 description: Balance ID example: 52832 debitedAmount: type: object description: Amount taken from the balance properties: amount: type: number description: Amount example: 1.06 currency: type: string description: Currency code example: EUR forAmount: type: object description: Amount converted to properties: amount: type: number description: Amount example: 1.5 currency: type: string description: Currency code example: SGD rate: type: number description: Exchange rate of debitedAmount to forAmount example: 1.43073 fee: type: object description: Conversion fee properties: amount: type: number description: Conversion fee amount example: 0.01 currency: type: string description: Currency code example: EUR credit: type: - object - 'null' description: Credit details, present for refund transactions properties: balanceId: type: integer format: int64 description: Balance ID example: 52832 creditedAmount: type: object description: Amount credited to the balance properties: amount: type: number description: Amount example: 1.5 currency: type: string description: Currency code example: SGD relayAuthorisationData: type: - object - 'null' description: >- Relayed authorisation response data, only available if the partner has opted in for [relayed authorisation](/guides/product/issue-cards/relayed-authorisation) properties: responseCode: type: string description: > [ResponseCode](/guides/product/issue-cards/relayed-authorisation#authorisation-response) of the relayed authorisation. One of: - `APPROVED` - `PROCESSING_ERROR` - `NON_SUPPORTED_CURRENCY` - `NON_SUPPORTED_MCC_FOR_COUNTRY` - `BLOCKED_COUNTRY` - `TRANSACTION_TYPE_NOT_SUPPORTED` - `SUSPECTED_FRAUD` enum: - APPROVED - PROCESSING_ERROR - NON_SUPPORTED_CURRENCY - NON_SUPPORTED_MCC_FOR_COUNTRY - BLOCKED_COUNTRY - TRANSACTION_TYPE_NOT_SUPPORTED - SUSPECTED_FRAUD example: APPROVED fallback: type: boolean description: Indicating whether there was a fallback applied by Wise example: true CardTransaction: title: Card Transaction type: object additionalProperties: true description: > The `debits` and `credits` fields are only present when retrieving a single transaction by ID, and will not be present in the list transactions response. properties: id: type: integer format: int64 description: ID of the transaction example: 342671 cardToken: type: string description: Unique identifier of the card example: 59123122-223d-45f9-b840-0ad4a4f80937 type: type: string description: > [Type](/api-reference/card-transaction#card-transaction-type) of the transaction. One of: - `ACCOUNT_CREDIT` - `ACCOUNT_FUNDING` - `CASH_ADVANCE` - `CASH_WITHDRAWAL` - `CHARGEBACK` - `CREDIT_TRANSACTION` - `ECOM_PURCHASE` - `POS_PURCHASE` - `REFUND` enum: - ACCOUNT_CREDIT - ACCOUNT_FUNDING - CASH_ADVANCE - CASH_WITHDRAWAL - CHARGEBACK - CREDIT_TRANSACTION - ECOM_PURCHASE - POS_PURCHASE - REFUND example: ECOM_PURCHASE state: type: string description: > The current [state](/api-reference/card-transaction#card-transaction-state) of the transaction. One of: - `IN_PROGRESS` - `COMPLETED` - `DECLINED` - `CANCELLED` - `UNKNOWN` enum: - IN_PROGRESS - COMPLETED - DECLINED - CANCELLED - UNKNOWN example: IN_PROGRESS declineReason: type: - string - 'null' description: >- Code of the [decline reason](/api-reference/card-transaction#card-transaction-decline-reasons) if applicable example: null detailedDeclineReason: type: - string - 'null' description: >- Code of the [detailed decline reason](/api-reference/card-transaction#card-transaction-detailed-decline-reasons) if applicable example: null creationTime: type: string format: date-time description: When the transaction was created example: '2022-11-28T08:17:54.241Z' modificationTime: type: string format: date-time description: When the transaction was last updated example: '2022-11-28T08:17:54.241Z' purgeTime: type: - string - 'null' format: date-time description: >- Time at which reserved funds will be released after the authorisation hold expires example: '2022-11-28T08:17:54.241Z' transactionAmount: type: object description: >- Transaction amount, including any embedded fees such as ATM fees that are not applied by Wise properties: amount: type: number description: Transaction amount example: 1.4 currency: type: string description: Currency code example: SGD fees: type: array description: Array of fees items: type: object properties: amount: type: number description: Fee amount example: 0.1 currency: type: string description: Currency code example: SGD fee_type: type: string description: Fee type example: ATM_ACQUIRER transactionAmountWithFees: type: object description: Transaction amount including all fees properties: amount: type: number description: Transaction amount including all fees example: 1.5 currency: type: string description: Currency code example: SGD merchant: type: object description: Merchant information properties: name: type: string description: Name of the merchant example: Test Payment location: type: object description: Merchant location properties: country: type: - string - 'null' description: Country where merchant is located example: France city: type: - string - 'null' description: City where merchant is located example: Rouen zipCode: type: - string - 'null' description: Zip code where merchant is located example: '00000' region: type: - string - 'null' description: Region where merchant is located example: null state: type: - string - 'null' description: State where merchant is located example: null category: type: object description: Merchant category properties: name: type: string description: Category of the merchant example: MISCELLANEOUS_FOOD_STORES_CONVEN code: type: string description: MCC code of the merchant example: '5999' description: type: string description: Description of the merchant category example: 5999 R Miscellaneous and Special authorisationMethod: type: string description: Authorisation method example: MANUAL_ENTRY approvalCode: type: - string - 'null' description: >- Also called authorization code. This can be used to prove ownership of a customer's card/account to a merchant example: '913647' billingAmount: type: object description: Billing amount properties: amount: type: number description: Billing amount example: 1.1 currency: type: string description: Currency code example: EUR arn: type: - string - 'null' description: Acquirer reference number example: '04300014127798385983852' pinValidationResult: type: - string - 'null' description: | PIN validation result. One of: - `ONLINE_PIN_VALIDATED` - `ONLINE_PIN_INVALID` - `OFFLINE_PIN_VALIDATED` - `OFFLINE_PIN_INVALID` - `NOT_RECEIVED` enum: - ONLINE_PIN_VALIDATED - ONLINE_PIN_INVALID - OFFLINE_PIN_VALIDATED - OFFLINE_PIN_INVALID - NOT_RECEIVED example: ONLINE_PIN_VALIDATED balanceChannelReferenceId: type: - string - 'null' description: Balance channel reference ID associated with the card transaction example: 6e71018d-2f4d-4fc3-6711-f517f4664712 debits: type: array description: > Array of debits. Only present when retrieving a single transaction by ID. The debits list is a non-aggregated list of debit movements, meaning that the `balanceId` is not unique in the list. For example, a cancelled transaction may have a list of 2 debits where the absolute values of `debitedAmount.amount`, `forAmount.amount` and `fee.amount` are the same, but one is the negation of the other due to a reservation (first debit) which was then released (second debit with negated amounts). You can choose to perform the aggregation in your system or display the full list of debits to the end customer. items: type: object properties: balanceId: type: integer format: int64 description: Balance ID example: 52832 debitedAmount: type: object description: Amount taken from the balance properties: amount: type: number description: Amount example: 1.1 currency: type: string description: Currency code example: EUR forAmount: type: object description: Amount converted to properties: amount: type: number description: Amount example: 1.5 currency: type: string description: Currency code example: SGD rate: type: number description: Exchange rate of debitedAmount to forAmount example: 1.36363636364 fee: type: object description: Conversion fee properties: amount: type: number description: Conversion fee amount example: 0.04 currency: type: string description: Currency code example: EUR creationTime: type: string format: date-time description: Creation time of debit example: '2022-11-28T08:17:54.241Z' credits: type: array description: >- Array of credits. Only present when retrieving a single transaction by ID items: type: object properties: balanceId: type: integer format: int64 description: Balance ID example: 52832 creditedAmount: type: object description: Amount credited to the balance properties: amount: type: number description: Amount example: 1.5 currency: type: string description: Currency code example: SGD creationTime: type: string format: date-time description: Creation time of credit example: '2022-11-28T08:17:54.241Z' relayAuthorisationData: type: - object - 'null' description: >- Relayed authorisation response data, only available if the partner has opted in for [relayed authorisation](/guides/product/issue-cards/relayed-authorisation) properties: responseCode: type: string description: > [ResponseCode](/guides/product/issue-cards/relayed-authorisation#authorisation-response) of the relayed authorisation. One of: - `APPROVED` - `PROCESSING_ERROR` - `NON_SUPPORTED_CURRENCY` - `NON_SUPPORTED_MCC_FOR_COUNTRY` - `BLOCKED_COUNTRY` - `TRANSACTION_TYPE_NOT_SUPPORTED` - `SUSPECTED_FRAUD` enum: - APPROVED - PROCESSING_ERROR - NON_SUPPORTED_CURRENCY - NON_SUPPORTED_MCC_FOR_COUNTRY - BLOCKED_COUNTRY - TRANSACTION_TYPE_NOT_SUPPORTED - SUSPECTED_FRAUD example: APPROVED fallback: type: boolean description: Indicating whether there was a fallback applied by Wise example: true ComparisonV3: title: Comparison (V3) type: object additionalProperties: true description: >- V3 comparison response containing price and speed estimates from various money transfer providers. properties: sourceCurrency: type: - string - 'null' description: ISO 4217 source currency code example: GBP targetCurrency: type: - string - 'null' description: ISO 4217 target currency code example: EUR sourceCountry: type: - string - 'null' description: Source country (ISO 3166-1 Alpha-2 code) example: null targetCountry: type: - string - 'null' description: Target country (ISO 3166-1 Alpha-2 code) example: null providerCountry: type: - string - 'null' description: Provider country (ISO 3166-1 Alpha-2 code) example: null providerTypes: type: array description: List of provider types included in the response items: type: string example: - bank - moneyTransferProvider amount: type: number description: The comparison amount example: 10000 providerType: type: - string - 'null' description: Provider type filter applied to the request example: null providers: type: array description: List of providers with their estimated quotes items: type: object additionalProperties: true properties: id: type: integer format: int64 description: Provider ID example: 39 alias: type: string description: Provider alias (lowercase slug name) example: wise name: type: string description: Provider name (presentational / formal name) example: Wise logos: type: object description: URLs pointing to provider logos (svg, png) properties: normal: type: object properties: svgUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.svg pngUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.png inverse: type: object properties: svgUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.svg pngUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.png white: type: object properties: svgUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.svg pngUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.png circle: type: object properties: svgUrl: type: - string - 'null' example: >- https://dq8dwmysp7hk1.cloudfront.net/logos/wise-mark.svg pngUrl: type: - string - 'null' example: null altText: type: string description: Alt text for the provider logo example: Wise logo: type: - string - 'null' description: (Deprecated) Provider logo svg deprecated: true example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.svg type: type: string description: 'Provider type: bank, money transfer provider, or travel money' example: moneyTransferProvider partner: type: boolean description: Whether a partner of Wise or not example: false quotes: type: array description: An array of estimated quotes per provider items: type: object additionalProperties: true properties: rate: type: number description: >- The live estimated exchange rate for the provider for this quote example: 1.15989 fee: type: number description: The estimated fee for the provider for this quote example: 37.12 dateCollected: type: string description: The date of collection for the original quote example: '2019-10-22T14:36:43Z' sourceCountry: type: - string - 'null' description: Source country (ISO 3166-1 Alpha-2 code) example: null targetCountry: type: - string - 'null' description: Target country (ISO 3166-1 Alpha-2 code) example: null markup: type: number description: >- Percentage markup on the quoted rate compared to the mid-market rate example: 0 receivedAmount: type: - number - 'null' description: >- The total estimated received amount for the provider for this quote example: 11555.84 deliveryEstimation: type: object description: Delivery estimation details - i.e. a speed estimate properties: duration: type: object description: Duration range properties: min: type: - string - 'null' description: >- Minimum quoted time for transaction delivery (ISO 8601 duration format) example: PT20H8M16.305111S max: type: - string - 'null' description: >- Maximum quoted time for transaction delivery (ISO 8601 duration format) example: PT20H8M16.305111S providerGivesEstimate: type: boolean description: >- Whether a provider publicly surfaces a speed estimate or not example: true durationType: type: string description: >- Whether the duration is in calendar days, business days, or same day enum: - CALENDAR - BUSINESS - SAME DAY example: CALENDAR deliveryDate: type: object description: Estimated transaction delivery date range properties: min: type: - string - 'null' description: Minimum estimated delivery date example: '2025-02-05T15:08:00.000000492Z' max: type: - string - 'null' description: Maximum estimated delivery date example: '2025-02-05T15:08:00.000000492Z' Comparison: title: Comparison type: object additionalProperties: true description: >- V4 comparison response containing price and speed estimates from various money transfer providers. properties: sourceCurrency: type: - string - 'null' description: ISO 4217 source currency code example: GBP targetCurrency: type: - string - 'null' description: ISO 4217 target currency code example: EUR sourceCountry: type: - string - 'null' description: Source country (ISO 3166-1 Alpha-2 code) example: null targetCountry: type: - string - 'null' description: Target country (ISO 3166-1 Alpha-2 code) example: null providerCountry: type: - string - 'null' description: Provider country (ISO 3166-1 Alpha-2 code) example: null providerTypes: type: array description: List of provider types included in the response items: type: string example: - bank - moneyTransferProvider amount: type: number description: The comparison amount example: 10000 amountType: type: string description: Whether the amount represents a send amount or recipient gets amount example: SEND providers: type: array description: List of providers with their estimated quotes items: type: object additionalProperties: true properties: id: type: integer format: int64 description: Provider ID example: 39 alias: type: string description: Provider alias (lowercase slug name) example: wise name: type: string description: Provider name (presentational / formal name) example: Wise logos: type: object description: URLs pointing to provider logos (svg, png) properties: normal: type: object properties: svgUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.svg pngUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo.png inverse: type: object properties: svgUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.svg pngUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_inverse.png white: type: object properties: svgUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.svg pngUrl: type: - string - 'null' example: >- https://wise.com/public-resources/assets/logos/wise-personal/logo_white.png circle: type: object properties: svgUrl: type: - string - 'null' example: >- https://dq8dwmysp7hk1.cloudfront.net/logos/wise-mark.svg pngUrl: type: - string - 'null' example: null altText: type: string description: Alt text for the provider logo example: Wise type: type: string description: 'Provider type: bank, money transfer provider, or travel money' example: moneyTransferProvider partner: type: boolean description: Whether a partner of Wise or not example: false quotes: type: array description: An array of estimated quotes per provider items: type: object additionalProperties: true properties: rate: type: number description: >- The live estimated exchange rate for the provider for this quote example: 1.15989 fee: type: number description: The estimated fee for the provider for this quote example: 37.12 dateCollected: type: string description: The date of collection for the original quote example: '2019-10-22T14:36:43Z' sourceCountry: type: - string - 'null' description: Source country (ISO 3166-1 Alpha-2 code) example: null targetCountry: type: - string - 'null' description: Target country (ISO 3166-1 Alpha-2 code) example: null markup: type: number description: >- Percentage markup on the quoted rate compared to the mid-market rate example: 0 receivedAmount: type: - number - 'null' description: >- The total estimated received amount for the provider for this quote (non-null only if a send amount request was made) example: 11555.84 sendAmount: type: - number - 'null' description: >- The total estimated send amount for the provider for this quote (non-null only if a recipient gets amount request was made) example: null isConsideredMidMarketRate: type: boolean description: >- Whether the provider's rate is close enough to the true mid-market rate to be classified as a mid-market rate example: true deliveryEstimation: type: object description: Delivery estimation details - i.e. a speed estimate properties: duration: type: object description: Duration range properties: min: type: - string - 'null' description: >- Minimum quoted time for transaction delivery (ISO 8601 duration format) example: PT20H8M16.305111S max: type: - string - 'null' description: >- Maximum quoted time for transaction delivery (ISO 8601 duration format) example: PT20H8M16.305111S providerGivesEstimate: type: boolean description: >- Whether a provider publicly surfaces a speed estimate or not example: true DirectDebitAccount: title: Direct Debit Account type: object properties: id: type: integer format: int64 description: Direct debit account ID example: 1 currency: type: string description: >- Currency of the bank account. 3-character currency code — `USD` for ACH, `CAD` for EFT example: USD type: type: string description: | Payment type for which the account is used. - `ACH` — US direct debit (USD) - `EFT` — CA direct debit (CAD) enum: - ACH - EFT example: ACH details: type: object description: Bank account details properties: routingNumber: type: string description: >- A valid ABA routing number. For CAD direct debits, the routing number is a combination of an institution number + transit number example: '000000000' accountNumber: type: string description: A valid bank account number example: '0000000000' accountType: type: string description: | Bank account type. - `CHECKING` — Checking account (USD, CAD) - `SAVINGS` — Savings account (USD, CAD) enum: - CHECKING - SAVINGS example: CHECKING DisputeReason: title: DisputeReason type: object properties: code: type: string description: > The type of reasons available for the dispute. Top-level codes include `ATM_DISPENSED_NO_FUNDS`, `WRONG_AMOUNT`, `TROUBLE_WITH_GOODS_SERVICES`, `MERCHANT_CHARGED_AGAIN`, `NO_REFUND`, `UNAUTHORIZED`. If a reason has `subOptions`, use the sub-option reason code when submitting a dispute. example: UNAUTHORIZED description: type: string description: The description of the dispute reason. example: I did not make, authorize, or participate in this transaction isFraud: type: boolean description: Flag indicating that the dispute reason is fraud-related. example: false tooltip: type: string description: Text to display when showing the dispute form to your users. example: >- Choose this if you don't know the merchant or have never purchased anything from them supportsMultipleTransactions: type: boolean description: Whether the dispute supports multiple transactions. example: false subOptions: type: array description: >- Optional list of sub-reasons that should be used as the dispute reason. items: $ref: '#/components/schemas/DisputeReason' Dispute: title: Dispute type: object properties: id: type: string description: Unique identifier of the dispute. example: b4eae16c-b3a9-4327-b0bd-6a2ad430d803 transactionId: type: integer format: int64 description: Card transaction ID. example: 476873 profileId: type: integer format: int64 description: Profile ID. example: 14547572 reason: type: string description: Dispute reason code. example: WRONG_AMOUNT status: type: string description: Dispute overall status. enum: - ACTIVE - CLOSED example: CLOSED subStatus: type: string description: Dispute detailed status. enum: - SUBMITTED - IN_REVIEW - REFUNDED - REJECTED - WITHDRAWN - CONFIRMED - REFUND_IN_PROGRESS - ATTEMPTING_RECOVERY - RECOVERY_UNSUCCESSFUL example: WITHDRAWN statusMessage: type: string description: Explanation for `subStatus`. example: Withdrawn createdAt: type: string format: date-time description: Time when the dispute was created. example: '2024-03-18T03:47:52.493Z' createdBy: type: string description: Creator of the dispute. Currently set to the user ID. example: '9867661' lastUpdatedAt: type: string format: date-time description: Time when the dispute was last updated. example: '2024-03-27T02:30:27.374Z' canWithdraw: type: boolean description: Whether the dispute can be withdrawn. example: false kyc-requirement: title: KYC Requirement description: >- An object returned as part of the [KYC Review](api-reference/kyc-review/kyc-review) object, which includes information about a required evidence, its state, and any additional information that might be required. x-tags: - kyc-review type: object properties: key: type: string description: >- The name of the KYC requirement. A single KYC Requirement should appear in the requirements list at most once. example: ID_DOCUMENT state: type: string description: > The state of the KYC requirement. - `NOT_PROVIDED` — the information is pending. Either the Hosted KYC flow or [KYC Requirement Submit](kycreviewrequirementsubmit) endpoint should be used to fulfil the requirement. - `IN_REVIEW` — the required information has been retrieved and the KYC requirement is being reviewed. No action is needed. enum: - NOT_PROVIDED - IN_REVIEW example: NOT_PROVIDED apiCollectionSupported: type: boolean description: > Indicates if the requirement can be provided via the [KYC Requirement Submit](kycreviewrequirementsubmit) endpoint. If `false`, the requirement should be provided via the Hosted KYC flow. example: true additionalRequirements: type: - array - 'null' description: > List of additional submissions that are needed to fulfill this requirement. These can appear when the originally submitted evidence is a wrong document, wrong format, incomplete or otherwise insufficient. Only provided if not empty. items: type: object properties: additionalRequirementId: type: string format: uuid description: >- Unique identifier for an additional requirement, generated by Wise. example: 8b789c45-60ae-475d-b667-c8714db9a6a4 key: type: string description: A key outlining what type of evidence is additionally required enum: - ACKNOWLEDGEMENT, - DOCUMENT - WRITTEN_ANSWER - DOCUMENT_AND_WRITTEN_ANSWER - DOCUMENT_OR_WRITTEN_ANSWER - EMAIL - CUSTOM_REQUEST example: DOCUMENT_OR_WRITTEN_ANSWER state: type: string description: > The state of the additional requirement. This state should be treated as independent of the parent KYC Requirement's state. They can, but don't have to, change together. - `NOT_PROVIDED` — the information is pending. Either the Hosted KYC flow or [KYC Requirement Submit](kycreviewrequirementsubmit) endpoint should be used to fulfil the additional requirement. - `IN_REVIEW` — the required information has been retrieved and the additional requirement is being reviewed. No action is needed. enum: - NOT_PROVIDED - IN_REVIEW example: NOT_PROVIDED reasons: type: object description: >- Contains information about the reason this additional requirement has been requested. properties: errorCode: type: string description: >- Code for the reason this additional requirement has been requested. enum: - NEEDED - WRONG_DOCUMENT - EXPIRED - INVALID_TRADING_ADDRESS - MISSING_ONE_SIDE - MISSING_COUNTRY_OF_RESIDENCE - MISSING_DIRECTORS - MISSING_UBOS - NO_UBO_DOC_REQUIRED - MISMATCH_NAME - MISMATCH_DATE_OF_BIRTH - AGENT_DETAILS_PROVIDED - DIRECTOR_IS_BUSINESS - UBO_IS_BUSINESS - UNCLEAR - WEBSITE_LINK_BROKEN - BUSINESS_NAME_NOT_ON_WEBSITE - DRIVING_LICENSE_NOT_ACCEPTED - BUSINESS_NOT_REGISTERED - OTHER example: EXPIRED description: type: string example: >- The provided document or information has expired. A valid document is required. dateTime: type: string format: date-time description: >- Timestamp marking when this additional requirement was requested. example: '2026-04-13T10:54:21.929314' attributes: type: object description: >- Contains metadata information about the additional requirement. Not returned if empty. properties: fields: type: object description: Not returned if empty properties: name: type: string description: The name of the affected person(s) or business examples: - John Smith - Hannah Myers and John Smith - My Business Inc. website: type: string description: The URL of the affected website examples: - https://example.com businessName: type: string description: The name of the affected business examples: - My Business Inc. owningBusinessName: type: string description: The name of the affected owning business examples: - Owning Business Inc. markdownText: type: string description: >- Free format text written by a Wise Agent in markdown format. example: >- Requirement details were unclear, *please* provide a clear scan where: * All information is clearly readable * The document is in colour issues: type: array description: >- A list of issues with the previously uploaded document. Not returned if empty items: type: string enum: - CANNOT_BE_SCREENSHOT - INCORRECT_FILE_FORMAT - NEED_COLOUR_VERSION - POOR_QUALITY example: - CANNOT_BE_SCREENSHOT - NEED_COLOUR_VERSION versions: type: array description: > **Conditional:** Only present when `apiCollectionSupported` is `true`. Lists the available versions and their validity. items: type: object properties: version: type: string description: The version identifier. example: v1 validUntil: type: - string - 'null' format: date description: >- If present, indicates the expiry date of this version (ISO 8601). example: '2026-06-30' kyc-review: title: KYC Review description: >- The return object of most KYC Review endpoints, which includes information about the given KYC Review such as status, trigger references, and a list of [KYC Requirements](api-reference/kyc-review/kyc-requirement). x-tags: - kyc-review type: object properties: id: type: string format: uuid description: Unique identifier for a KYC Review resource, generated by Wise. example: 46e1a5c4-4a9b-4563-39d3-18174d3ac0f8 status: type: string description: > Aggregated state of the underlying requirement set. Any of the states below could move into any other state. enum: - NEW - PASSED - PASSED_WITH_REQUIREMENTS - WAITING_CUSTOMER_INPUT - PROCESSING example: WAITING_CUSTOMER_INPUT link: type: - object - 'null' description: > Contains the URL and expiry of said URL the end customer needs to be directed to in order to go through Hosted KYC flow. `link` is returned only when `status` is `WAITING_CUSTOMER_INPUT` and [Update redirect URL](kycreviewredirecturlupdate) is called. properties: value: type: string description: >- The URL that the end customer needs to be directed to in order to go through the Hosted KYC flow. example: >- https://wise-sandbox.com/embedded-flows/verification?token=d7332edb-25bf-41af-a4e9-09f5efe39ded&checkId=3120073 expiresAt: type: string format: date-time description: >- Timestamp for when the one-time token in the link will expire, after which a new link needs to be generated. example: '2024-09-03T16:29:41.203225146' createdAt: type: string format: date-time description: Timestamp marking the creation of the KYC Review. example: '2024-09-03T16:22:02.257725' updatedAt: type: string format: date-time description: Timestamp marking the last update of the KYC Review. example: '2024-09-03T16:29:41.147522' requiredBy: type: - string - 'null' format: date-time description: >- Timestamp by which the underlying requirement set needs to be verified to not block the customer. Only relevant if the status is `PASSED_WITH_REQUIREMENTS`. example: '2024-09-03T16:22:02.257725' triggerReferences: type: array description: List of trigger reference objects. items: type: object description: >- An object that refers to the action or process this KYC Review pertains to. properties: type: type: string description: > Type of the underlying action or process this KYC Review is for. Usually a reference to which product this KYC Review pertains to (like `QUOTE` or `TRANSFER`) or a reference to a KYC process on the profile that isn't related to a specific product (like `REFRESH_CYCLE` or `REPAPERING`). Currently supported types: - `QUOTE` - `TRANSFER` - `PROACTIVE_SEND_MONEY` - `ADD_MONEY` - `CARD` - `BANK_ACCOUNT_DETAILS` - `INFO_REQUEST` example: QUOTE triggerData: type: object description: > Key-value object containing metadata of the underlying product object that triggered the KYC Review. For `QUOTE`, `TRANSFER` and `ADD_MONEY` types, `triggerData` contains an `id` field that refers to their respective IDs. For `BANK_ACCOUNT_DETAILS`, `triggerData` has a field called `currencies` which contains a list of currencies (e.g. USD, SGD, EUR) that the bank details have been created for. Fields and their data types for each `triggerReference.type`: - `QUOTE` - `id` (uuid) - `TRANSFER` - `id` (long) - `ADD_MONEY` - `id` (long) - `BANK_ACCOUNT_DETAILS` - `currencies` (list of string) additionalProperties: true example: id: ba83a43a-f623-46f0-956d-196c13e2ab01 redirectUrl: type: - string - 'null' description: > URL where the user will be redirected at the end of the flow. Can contain query params and path fragments. It has to be a valid URL as per [RFC 2396](https://www.ietf.org/rfc/rfc2396.txt). Provided by the caller in the [Update redirect URL](kycreviewredirecturlupdate) call. example: https://example.com requirements: type: - array - 'null' description: > Nested list of [KYC Requirement](api-reference/kyc-review/kyc-requirement) objects in `[[Requirement]]` format, where each inner list represents a combination of possible requirements to be provided. To fulfil the whole KYC Review, at least one item from each inner list should be provided. For example, if the requirements are `[[a, b], [c, d]]` then it should be read as `(a or b) and (c or d)`. items: type: array items: type: object $ref: '#/components/schemas/kyc-requirement' client-credentials-grant: type: object required: - grant_type properties: grant_type: type: string description: OAuth 2.0 grant type. enum: - client_credentials example: client_credentials registration-code-grant: type: object required: - grant_type - client_id - email - registration_code properties: grant_type: type: string description: OAuth 2.0 grant type. enum: - registration_code example: registration_code client_id: type: string description: Your API client ID. email: type: string format: email description: The email address of the user being registered. registration_code: type: string description: >- Registration code obtained when creating the user via `POST /v1/user/signup/registration_code`. authorization-code-grant: type: object required: - grant_type - client_id - code - redirect_uri properties: grant_type: type: string description: OAuth 2.0 grant type. enum: - authorization_code example: authorization_code client_id: type: string description: Your API client ID. code: type: string description: >- Authorisation code provided upon redirect back from the authorisation flow. redirect_uri: type: string description: Registered redirect URL coordinated with Wise during onboarding. example: https://www.yourapp.com refresh-token-grant: type: object required: - grant_type - refresh_token properties: grant_type: type: string description: OAuth 2.0 grant type. enum: - refresh_token example: refresh_token refresh_token: type: string description: >- Refresh token obtained from a `registration_code` or `authorization_code` grant. token-response: type: object properties: access_token: type: string description: Access token to be used when calling the API. Valid for 12 hours. example: 01234567-89ab-cdef-0123-456789abcdef token_type: type: string description: Type of the token. example: bearer refresh_token: type: string description: > Refresh token used to obtain new user access tokens without requiring the user to re-authorise. Valid for up to 20 years. Only returned for user access token grant types (`registration_code`, `authorization_code`, `refresh_token`). example: 01234567-89ab-cdef-0123-456789abcdef expires_in: type: integer format: int32 description: Access token expiry time in seconds. example: 43199 expires_at: type: string description: Access token expiration timestamp (UTC). example: '2025-04-11T03:43:28.148Z' refresh_token_expires_in: type: integer format: int32 description: > Refresh token expiry time in seconds. Only returned for user access token grant types (`registration_code`, `authorization_code`, `refresh_token`). example: 628639555 refresh_token_expires_at: type: string description: > Refresh token expiration timestamp (UTC). Only returned for user access token grant types (`registration_code`, `authorization_code`, `refresh_token`). example: '2045-03-12T13:49:23.552Z' scope: type: string description: Scope of the token. example: transfers created_at: type: string description: > Token creation time in ISO 8601 format. Only returned for user access token grant types (`registration_code`, `authorization_code`, `refresh_token`). example: '2020-01-01T12:33:33.12345Z' ott-response: type: object properties: oneTimeTokenProperties: type: object description: Properties of the one time token. properties: oneTimeToken: type: string description: Unique identifier of a one time token. challenges: type: array description: Array of challenge objects. items: type: object description: >- Challenge object containing primary and alternative challenges. properties: primaryChallenge: type: object description: Type of challenge user can do. properties: type: type: string description: >- Type of the challenge (PIN, FACE_MAP, SMS, WHATSAPP, VOICE, PARTNER_DEVICE_FINGERPRINT). viewData: type: object description: >- An object that provides data required to present a challenge window. It can be messages, IDs, or other attributes. alternatives: type: array description: Alternative challenges that user can do instead. items: type: object required: type: boolean description: Required (or not) to pass the OTT. passed: type: boolean description: Status of this challenge. validity: type: integer format: int64 description: Seconds until the one time token becomes expired. actionType: type: string description: >- The action bound to the one time token. For example, `BALANCE__GET_STATEMENT` when we want to [retrieve a balance account statement](/api-reference/balance-statement/balancestatementget). userId: type: integer format: int64 description: Creator of this one time token. phone-number: title: Phone Number type: object properties: id: type: integer format: int64 description: ID of the phone number. example: 1230944 phoneNumber: type: string description: A text representation of phone number. example: '+6588888888' type: type: string description: | Type of phone number when used in authentication. Only **PRIMARY** is supported at the moment. example: PRIMARY verified: type: boolean description: Indicator if phone number is verified. example: true clientId: type: string description: Client ID of which this phone number belongs to. example: clientId case: type: object properties: id: type: integer format: int64 description: Partner Case ID. Generated by Wise. example: 123456789 status: type: string description: '[Status of the case](/api-reference/case#case-statuses).' enum: - CREATING - OPEN - PENDING - SOLVED - CLOSED example: PENDING type: type: string description: >- Type of the partner case. More case types will be added in the future. enum: - GENERAL_ENQUIRY example: GENERAL_ENQUIRY externalId: type: string description: >- An ID provided by the external partner for partner internal tracking. example: partner_12344567 createdAt: type: string format: date-time description: When the partner case was originally created. example: '2023-06-28T15:21:24.901' updatedAt: type: string format: date-time description: When the partner case was last updated. example: '2023-06-28T15:21:24.901' address: type: object description: Address associated with a profile. properties: id: type: integer format: int64 description: ID of the address. example: 36086782 addressFirstLine: type: string description: First line of the address. example: 24 Willow Creek Lane city: type: string description: City of the address. example: Bristol countryIso2Code: type: string description: Two-letter ISO country code. example: GB countryIso3Code: type: string description: Three-letter ISO country code. example: gbr postCode: type: string description: Postal code of the address. example: BS1 6AE stateCode: type: - string - 'null' description: State code of the address (can be null for some countries). example: null personal-profile: title: Personal Profile type: object required: - type properties: type: type: string description: Type of profile. enum: - PERSONAL example: PERSONAL id: type: integer format: int64 description: Unique identifier for the profile. example: 14575282 publicId: type: string description: Publicly accessible identifier for the profile. example: a1b2c3d4-e5f6-7890-1234-567890abcdef userId: type: integer format: int64 description: The ID of the user associated with this profile. example: 9889627 address: description: Main registered address of the profile. $ref: '#/components/schemas/address' email: type: string description: Primary email address for the profile. example: sarah.jenkins@example.com createdAt: type: string format: date-time description: Timestamp when the profile was created (ISO 8601 format). example: '2023-01-15T10:30:00' updatedAt: type: string format: date-time description: Timestamp when the profile was last updated (ISO 8601 format). example: '2025-06-18T14:20:00' avatar: type: - string - 'null' description: Link to person avatar image. example: null currentState: type: string description: Current status of this profile. enum: - HIDDEN - VISIBLE - DEACTIVATED example: VISIBLE contactDetails: type: object description: Contact information for the profile. properties: email: type: string description: Contact email address. example: sarah.contact@example.com phoneNumber: type: string description: Contact phone number. example: '+447700900123' firstName: type: string description: First name of the profile holder. example: Sarah lastName: type: string description: Last name of the profile holder. example: Jenkins preferredName: type: string description: Preferred name of the profile holder. example: Sal dateOfBirth: type: string description: Date of birth of the profile holder. example: '1985-05-20' phoneNumber: type: string description: Phone number of the profile holder. example: '+447700900456' secondaryAddresses: type: array description: An array of secondary addresses associated with the profile. items: $ref: '#/components/schemas/address' fullName: type: string description: Full name of the profile holder. example: Sarah Jenkins business-profile: title: Business Profile type: object required: - type properties: type: type: string description: Type of profile. enum: - BUSINESS example: BUSINESS id: type: integer format: int64 description: Unique identifier for the profile. example: 14599371 publicId: type: string description: Publicly accessible identifier for the profile. example: f0e9d8c7-b6a5-4321-fedc-ba9876543210 userId: type: integer format: int64 description: The ID of the user associated with this profile. example: 9889627 address: description: Main registered address of the business. $ref: '#/components/schemas/address' email: type: string description: Primary email address for the business. example: info@innovate-solutions.co.uk createdAt: type: string format: date-time description: Timestamp when the profile was created (ISO 8601 format). example: '2024-03-10T09:00:00' updatedAt: type: string format: date-time description: Timestamp when the profile was last updated (ISO 8601 format). example: '2025-06-18T14:22:00' currentState: type: string description: Current status of this profile. enum: - HIDDEN - VISIBLE - DEACTIVATED example: VISIBLE contactDetails: type: object description: Contact information for the business. properties: email: type: string description: Contact email address. example: contact@innovate-solutions.co.uk phoneNumber: type: string description: Contact phone number. example: '+441617891234' businessName: type: string description: Registered business name. example: Innovate Solutions Ltd registrationNumber: type: string description: Business registration number. example: SC1234567890ABCD descriptionOfBusiness: type: string description: Brief description of the business. example: SOFTWARE_DEVELOPMENT webpage: type: string description: Business website URL. example: https://www.innovate-solutions.co.uk companyType: type: string description: Type of company. example: LIMITED_COMPANY companyRole: type: string description: Role of the person managing the business profile. enum: - OWNER - DIRECTOR - OTHER example: OWNER businessFreeFormDescription: type: string description: Free-form description of the business activities. example: We create cutting-edge software for businesses. firstLevelCategory: type: string description: >- Primary [business category](/guides/developer/api-guides/business-categories). example: CONSULTING_IT_BUSINESS_SERVICES secondLevelCategory: type: string description: >- Secondary [business category](/guides/developer/api-guides/business-categories). example: IT_DEVELOPMENT operationalAddresses: type: array description: An array of operational addresses for the business. items: $ref: '#/components/schemas/address' fullName: type: string description: Full legal name of the business. example: Innovate Solutions Ltd profile: title: Profile x-tags: - profile description: > A profile represents an identity that can send and receive money through Wise. There are two types: **Personal** (an individual) and **Business** (a company). The fields returned vary depending on the profile type. discriminator: propertyName: type mapping: PERSONAL: '#/components/schemas/personal-profile' BUSINESS: '#/components/schemas/business-profile' oneOf: - $ref: '#/components/schemas/personal-profile' - $ref: '#/components/schemas/business-profile' director: type: object properties: id: type: integer format: int64 description: ID of the director. Automatically set. example: 10 firstName: type: string description: Director first name. example: John lastName: type: string description: Director last name. example: Doe dateOfBirth: type: string description: Date of birth. example: '1982-05-20' countryOfResidenceIso3Code: type: string description: 3 character country code. example: usa ubo: type: object properties: id: type: string description: ID of the ultimate beneficial owner. example: 013ab1c2688d0185b582ee7e0bcb28b2 name: type: string description: Owner full name. example: John Doe dateOfBirth: type: string description: Date of birth. example: '1982-05-20' countryOfResidenceIso3Code: type: string description: 3 character country code. example: usa addressFirstLine: type: string description: First line of address. example: 123 Fake St postCode: type: string description: Address post code. example: FK 12345 ownershipPercentage: type: - integer - 'null' format: int32 description: Percentage of ownership. example: 30 quote: type: object title: Quote x-tags: - quote properties: id: type: string format: uuid description: ID of this quote (GUID format). example: 11144c35-9fe8-4c32-b7fd-d05c2a7734bf sourceCurrency: type: string description: Source (sending) currency code. example: GBP targetCurrency: type: string description: Target (receive) currency code. example: USD sourceAmount: type: number description: Amount in source currency to send. example: 100 targetAmount: type: number description: Amount in target currency to be received by the recipient. example: 129.24 payOut: type: string description: >- Mechanism we use to deliver the transfer. Not usually of interest to the user. example: BANK_TRANSFER preferredPayIn: type: string description: Preferred pay-in method. example: BANK_TRANSFER rate: type: number description: Exchange rate value used for the conversion. example: 1.30445 createdTime: type: string format: date-time description: Quote created timestamp. example: '2019-04-05T13:18:58Z' user: type: integer format: int64 description: User ID who created the quote. example: 55 profile: type: integer format: int64 description: Personal or business profile ID. example: 101 rateType: type: string description: Whether the rate is fixed or floating. enum: - FIXED - FLOATING example: FIXED rateExpirationTime: type: string format: date-time description: Time the locked rate will expire. example: '2019-04-08T13:18:57Z' guaranteedTargetAmountAllowed: type: boolean description: Whether guaranteed target amount is allowed. example: true targetAmountAllowed: type: boolean description: Whether target amount is allowed. example: true guaranteedTargetAmount: type: boolean description: Whether the target amount is guaranteed. example: false providedAmountType: type: string description: Whether the quote was created as source or target. enum: - SOURCE - TARGET example: SOURCE pricingConfiguration: type: object description: >- Allows for pricing configurations to be overridden by partners on a transfer level. properties: fee: type: object properties: type: type: string description: >- Identifies the type of fee that will be configured. Options include only `OVERRIDE`. example: OVERRIDE variable: type: number description: >- The selected variable percentage (in decimal format) that should be used in the pricingConfiguration. example: 0.011 fixed: type: number description: >- The selected fixed fee (in source currency) that should be used in the pricingConfiguration. example: 15.42 paymentOptions: type: array description: List of the methods a user can pay for the transfer. items: type: object properties: disabled: type: boolean description: Whether this option is enabled or not for this quote. example: false estimatedDelivery: type: string format: date-time description: >- The estimated delivery time for this combination of payIn and payOut methods, assuming payIn is performed now. example: '2019-04-08T12:30:00Z' formattedEstimatedDelivery: type: string description: A string to display to users for the estimated delivery date. example: by Apr 8 estimatedDeliveryDelays: type: array description: Array of objects for delivery delays to display to users. items: type: object properties: reason: type: string description: Reason of the delivery delay. example: sample reason fee: type: object description: Object containing fee information. properties: transferwise: type: number description: >- The fee to be paid by the sender based on the current state of the quote. example: 3.04 payIn: type: number description: >- The fee for this payment option, based on the product type of the payment option. example: 0 discount: type: number description: >- Any discounts that have been applied to this quote for the user. example: 2.27 partner: type: number description: >- If you have agreed a custom price, it will be displayed here. example: 0 total: type: number description: >- The total fees to be paid - use this figure when displaying fees on your app. example: 0.77 price: type: object description: Object containing the price information. properties: priceSetId: type: integer format: int64 description: ID of the price structure. example: 238 total: type: object description: >- The total fees to be paid - use this figure when displaying fees on your app. properties: type: type: string description: Type of the pricing element. example: TOTAL label: type: string description: Short text describing the price structure. example: Total fees value: type: object description: Object containing value elements. properties: amount: type: number description: Amount to be paid. example: 0.77 currency: type: string description: Currency of the amount to be paid. example: GBP label: type: string description: Text version of the price. example: 0.77 GBP explanation: type: object description: Object element giving more details about the price. items: type: array description: >- Object containing the details of the different elements of the total price. items: type: object properties: id: type: string description: ID of this item. type: type: string description: >- Type of the pricing item. It could be `DISCOUNT` for example. example: FEE label: type: string description: Short text describing the pricing element. example: fee value: type: object description: Object containing value elements. properties: amount: type: number description: >- Amount associated to this pricing element. Can be negative for discounts. example: 0 currency: type: string description: Currency of the pricing element. example: GBP label: type: string description: >- Text field containing the price and its currency. example: 0 GBP explanation: type: object description: Additional information on a price breakdown item. properties: plainText: type: string description: Text element giving more details about the item. markdown: type: string description: Formatted textual information. deferredFee: type: object description: >- Deferred fee information from a pricingConfiguration override. properties: amount: type: number description: >- The amount of fees that has been deferred by a pricingConfiguration override. example: 14.79 currency: type: string description: The currency of the deferred fee amount. example: BRL calculatedOn: type: object properties: unroundedAmountToConvert: type: object description: >- The amount, unrounded, that fees were calculated on and built up from. properties: amount: type: number example: 179.97342 currency: type: string example: BRL sourceAmount: type: number description: sourceAmount when using this payment option. example: 100 targetAmount: type: number description: targetAmount when using this payment option. example: 129.24 sourceCurrency: type: string description: Source currency for this payment option. example: GBP targetCurrency: type: string description: Target currency for this payment option. example: USD payIn: type: string description: Type of pay in method for this payment option. example: BANK_TRANSFER payOut: type: string description: Type of pay out method for this payment option. example: BANK_TRANSFER allowedProfileTypes: type: array description: >- Array of the allowed types of profile to use this payment option. items: type: string enum: - PERSONAL - BUSINESS example: - PERSONAL - BUSINESS payInProduct: type: string description: Pay-in product type. example: CHEAP feePercentage: type: number description: Fee percentage for this payment option. example: 0.0092 disabledReason: type: object description: Object present if a payment option is disabled. properties: code: type: string description: Code to denote the reason a payment method is unavailable. message: type: string description: >- User friendly message to display when a method is unavailable. status: type: string description: Current status of this quote. enum: - PENDING - ACCEPTED - FUNDED - EXPIRED example: PENDING expirationTime: type: string format: date-time description: The time the quote expires. example: '2019-04-05T13:48:58Z' notices: type: array description: >- Array of messages to display to the user. May be empty (`[]`) if there are no messages. items: type: object properties: text: type: string description: The message to display. example: >- You can have a maximum of 3 open transfers with a guaranteed rate. After that, they'll be transferred using the live rate. Complete or cancel your other transfers to regain the use of guaranteed rate. link: type: - string - 'null' description: >- URL that provides more information to the message. May be `null` if there's no URL. example: null type: type: string description: >- Type of message. If it is `BLOCKED`, don't allow the quote to be used to create the transfer. enum: - WARNING - INFO - BLOCKED example: WARNING recipient-v1: type: object title: Recipient Account (v1) description: > Deprecated v1 recipient account object. For new integrations, use the v2 resource which includes additional fields such as `displayFields`, `accountSummary`, and `longAccountSummary`. properties: id: type: integer format: int64 description: Recipient account ID. example: 40000000 business: type: - integer - 'null' format: int64 description: Business profile ID (if applicable). example: null profile: type: integer format: int64 description: Personal or business profile ID. example: 30000000 accountHolderName: type: string description: Recipient full name. example: John Doe currency: type: string description: 3 character currency code. example: GBP country: type: string description: 2 character country code. example: GB type: type: string description: Recipient type. example: sort_code details: type: object description: >- Currency-specific fields. All possible fields are returned, with unused fields set to `null`. properties: legalType: type: string description: Recipient legal type. example: PRIVATE sortCode: type: string description: Recipient bank sort code (GBP example). example: '040075' accountNumber: type: string description: Recipient bank account number (GBP example). example: '37778842' additionalProperties: true user: type: integer format: int64 description: User that created or owns this recipient. example: 10000000 active: type: boolean description: Status of the recipient. example: true ownedByCustomer: type: boolean description: Whether this account is owned by the sending user. example: false confirmations: type: object description: Verification results for the recipient's details. properties: acceptedOutcomes: type: boolean example: false acceptedAt: type: - string - 'null' format: date-time example: null quoteId: type: - string - 'null' example: null outcomes: type: array items: type: object recipient-create-request: type: object description: > Create a recipient (beneficiary) account request for POST /v1/accounts. The required fields inside `details` depend on currency/route; use the account-requirements endpoints (e.g. /v1/quotes/{quoteId}/account-requirements) to discover the exact required fields. properties: currency: type: string description: 3 character currency code. example: GBP type: type: string description: >- Recipient account type (currency/route-specific), e.g. sort_code, iban, email. example: sort_code profile: type: integer format: int64 description: >- Personal or business profile ID of the sender. It is highly advised to pass the business profile ID in this field if your business account is managed by multiple users, so that the recipient can be accessed by all users authorized on the business account. example: 30000000 accountHolderName: type: string description: Recipient full name. example: John Doe ownedByCustomer: type: boolean description: > Indicates whether the recipient account is owned by the profile owner (self-transfer), such as a user sending money to their own account in another country or currency. Set to `true` for self-transfers. We strongly recommend setting this field, as distinguishing self-transfers from third-party transfers improves routing and processing efficiency. example: true details: type: object description: > Currency/route-specific recipient fields. Common examples include legalType, sortCode, accountNumber, email, dateOfBirth, etc. Use account-requirements APIs to determine what is required. properties: legalType: type: string description: Recipient legal type (when applicable). enum: - PRIVATE - BUSINESS example: PRIVATE sortCode: type: string description: Sort code (GBP example). example: '040075' accountNumber: type: string description: Account number (GBP example). example: '37778842' dateOfBirth: type: string description: >- Date of birth in ISO 8601 date format (Optional for GBP example). example: '1961-01-01' additionalProperties: true recipient: type: object title: Recipient Account x-tags: - recipient description: > The `accountSummary` and `longAccountSummary` fields can be used to represent the recipient's details in your UI. The `displayFields` array allows you to build a UI containing all the dynamic fields of a recipient individually. In order to use these fields, you would need to POST using the v1 endpoint to create the recipient account, and then GET using the v2 endpoint to retrieve these fields. The v2 resource also includes the `hash` field that can be used to track recipient details changes. This is useful for re-running any validation checks your system performs on the recipient, for example against fraud engines. The hash will remain constant unless the recipient's name or information in the `details` object changes. properties: id: type: integer format: int64 description: >- ID of the recipient. Use the returned id as `sourceAccount` to specify the refund recipient when creating transfers. example: 40000000 creatorId: type: integer format: int64 description: Account entity that owns the recipient account. example: 41000000 profileId: type: integer format: int64 description: Specific profile that owns the recipient account. example: 30000000 name: type: object description: Recipient name details. properties: fullName: type: string description: Recipient full name. example: John Doe givenName: type: - string - 'null' description: Recipient first name. example: null familyName: type: - string - 'null' description: Recipient surname. example: null middleName: type: - string - 'null' description: Recipient middle name. example: null patronymicName: type: - string - 'null' description: Recipient patronymic name (when applicable). example: null cannotHavePatronymicName: type: - boolean - 'null' description: >- Indicates if the recipient cannot have a patronymic name (when applicable). example: null currency: type: string description: 3 character currency code. example: GBP country: type: string description: 2 character country code. example: GB type: type: string description: Recipient type. example: SortCode legalEntityType: type: string description: Entity type of recipient. example: PERSON active: type: boolean description: Status of the recipient. example: true details: type: object description: >- Account details (currency/type-specific). The keys present vary by currency route and recipient type (e.g., sort code, IBAN, SWIFT, email). properties: reference: type: - string - 'null' description: Recipient reference (present for some routes). example: null sortCode: type: string description: Recipient bank sort code (GBP example). example: '040075' accountNumber: type: string description: Recipient bank account number (GBP example). example: '37778842' hashedByLooseHashAlgorithm: type: string description: Recipient account hash. example: ad245621b974efa3ef870895c3wer419a3f01af18a8a5790b47645dba6304194 additionalProperties: true commonFieldMap: type: object description: Map of key lookup fields on the account. example: accountNumberField: accountNumber bankCodeField: sortCode hash: type: string description: Account hash for change tracking. example: 666ef880f8aa6113fa112ba6531d3ed2c26dd9fgbd7de5136bfb827a6e800479 accountSummary: type: string description: Summary of account details for ease of lookup. example: (04-00-75) 37778842 longAccountSummary: type: string description: Account details summary. example: GBP account ending in 8842 displayFields: type: array description: Lookup fields (key/label/value) for rendering a UI. items: type: object properties: key: type: string description: Account identifier key name. label: type: string description: Account identifier display label. value: type: string description: Account identifier value. example: - key: details/sortCode label: UK sort code value: 04-00-75 - key: details/accountNumber label: Account number value: '37778842' isInternal: type: boolean description: Indicates whether recipient is internal. example: false ownedByCustomer: type: boolean description: If recipient account belongs to profile owner. example: false confirmations: type: object description: > Verification results for the recipient's details. Only populated for currencies with recipient verification enabled (KRW, INR, IDR, EUR). See the [Verifying Recipient Details](/guides/developer/api-guides/recipient-verification) guide for how to handle these. properties: acceptedOutcomes: type: boolean description: Whether we've received an explicit customer acceptance. example: false acceptedAt: type: - string - 'null' format: date-time description: >- Timestamp indicating time of outcome acceptance, `null` if has not been accepted. example: null quoteId: type: - string - 'null' description: >- If the confirmation check was run as part of a quote compatibility check, then the `quoteId` will be on the result. If `quoteId` is present, then the outcome acceptance will need the `quoteId` to be specified as well. example: null outcomes: type: array description: >- Array of confirmation outcomes. At the moment it is safe to assume that there is only one element in the outcomes list. items: type: object properties: type: type: string description: >- The type of confirmation. Possible values: `ACCOUNT_EXISTENCE`, `NAME_MATCHING`, `NAME_RESOLUTION`. example: NAME_MATCHING timestamp: type: string format: date-time description: Timestamp of when the confirmation check was performed. example: '2024-11-11T23:58:11.105916743Z' outcome: type: string description: >- The actual outcome of the confirmation. Possible values: `SUCCESS`, `PARTIAL_FAILURE`, `FAILURE`, `COULD_NOT_CHECK`. example: PARTIAL_FAILURE requiresCustomerAcceptance: type: boolean description: >- Whether we require customer acceptance. Whether this value is true or false is dependent on the currency and the nature of the confirmation. example: true fieldsChecked: type: array description: Fields we used to confirm the account. items: type: string example: - name/fullName - details/accountNumber providedName: type: string description: >- The name that the customer provided when creating the recipient account. Only populated for NAME_MATCHING and NAME_RESOLUTION types for certain outcomes. example: John Doe resolvedName: type: string description: >- The name that we resolved during name matching or name resolution. example: Joe Doe message: type: string description: Customer facing message about the outcome of the check. example: >- The name entered is slightly different to the name on the account. recommendedUpdates: type: array description: >- Shows what are the correct values for some of the fields we've checked. items: type: object properties: path: type: string description: The field path to update. example: name/fullName value: type: string description: The recommended value for the field. example: Joe Doe account-requirements-response: type: array description: > Dynamic account-requirements response used to build recipient forms. The structure and the fields returned vary by currency, recipient type, route, and sometimes previously provided inputs. Treat this as a schema for a dynamically generated form definition rather than a fixed set of recipient fields. items: type: object description: A requirement group for a specific payout method / route. properties: type: type: string description: Requirement group identifier (route/payout-method specific). example: south_korean_paygate title: type: string description: Human-readable title for the requirement group. example: PayGate usageInfo: type: string description: Optional usage/help text. example: null fields: type: array description: List of UI field groups to collect required data. items: type: object description: Group of related fields shown together in UI. properties: name: type: string description: Display name of this group. example: E-mail group: type: array description: The actual fields within this group. items: type: object description: A single field descriptor. properties: key: type: string description: >- Key to include in JSON when submitting recipient details. example: email name: type: string description: Human-readable label. example: E-mail type: type: string description: UI field type. example: text refreshRequirementsOnChange: type: boolean description: > If true, changing this field can alter requirements; call the POST account-requirements endpoint with updated data to refresh requirements. example: false required: type: boolean description: Indicates whether this field is mandatory. example: true displayFormat: type: string description: Optional display formatting hint. example: null example: type: string description: Example value for the field (may be empty string). example: example@example.ex minLength: type: integer description: Minimum allowed length, when applicable. example: null maxLength: type: integer description: Maximum allowed length, when applicable. example: null validationRegexp: type: string description: Regex pattern for validation, when applicable. example: ^[^\s]+@[^\s]+\.[^\s]{2,}$ validationAsync: type: string deprecated: true description: >- Deprecated. This validation will instead be performed when submitting the request. example: null valuesAllowed: type: - array - 'null' description: >- Allowed values for select/radio inputs; null for free-text/date inputs. items: type: object properties: key: type: string description: Machine-readable value. example: PRIVATE name: type: string description: Human-readable value label. example: Person example: - type: south_korean_paygate title: PayGate usageInfo: null fields: - name: E-mail group: - key: email name: E-mail type: text refreshRequirementsOnChange: false required: true displayFormat: null example: example@example.ex minLength: null maxLength: null validationRegexp: ^[^\s]+@[^\s]+\.[^\s]{2,}$ validationAsync: null valuesAllowed: null - name: Recipient type group: - key: legalType name: Recipient type type: select refreshRequirementsOnChange: false required: true displayFormat: null example: '' minLength: null maxLength: null validationRegexp: null validationAsync: null valuesAllowed: - key: PRIVATE name: Person - name: Full Name group: - key: accountHolderName name: Full Name type: text refreshRequirementsOnChange: false required: true displayFormat: null example: '' minLength: 2 maxLength: 140 validationRegexp: ^[0-9A-Za-zÀ-ÖØ-öø-ÿ-_()'*,.%#^@{}~<>+$"\[\]\\ ]+$ validationAsync: null valuesAllowed: null - name: Recipient's Date of Birth group: - key: dateOfBirth name: Recipient's Date of Birth type: date refreshRequirementsOnChange: false required: true displayFormat: null example: '' minLength: null maxLength: null validationRegexp: ^\d{4}\-\d{2}\-\d{2}$ validationAsync: null valuesAllowed: null - name: Recipient Bank Name group: - key: bankCode name: Recipient Bank Name type: select refreshRequirementsOnChange: false required: true displayFormat: null example: Choose recipient bank minLength: null maxLength: null validationRegexp: null validationAsync: null valuesAllowed: - key: '' name: Choose recipient bank - key: '004' name: Example Bank A - key: '011' name: Example Bank B - name: Account number (KRW accounts only) group: - key: accountNumber name: Account number (KRW accounts only) type: text refreshRequirementsOnChange: false required: true displayFormat: null example: '1254693521232' minLength: 10 maxLength: 16 validationRegexp: null validationAsync: null valuesAllowed: null confirmations: type: object description: > Verification results for the recipient's details. Only populated for currencies with recipient verification enabled (KRW, INR, IDR, EUR). See the [Verifying Recipient Details](/guides/developer/api-guides/recipient-verification) guide for how to handle these. properties: acceptedOutcomes: type: boolean description: Whether we've received an explicit customer acceptance. example: false acceptedAt: type: - string - 'null' format: date-time description: >- Timestamp indicating time of outcome acceptance, `null` if has not been accepted. example: null quoteId: type: - string - 'null' description: >- If the confirmation check was run as part of a quote compatibility check, then the `quoteId` will be on the result. If `quoteId` is present, then the outcome acceptance will need the `quoteId` to be specified as well. example: null outcomes: type: array description: >- Array of confirmation outcomes. At the moment it is safe to assume that there is only one element in the outcomes list. items: type: object properties: type: type: string description: >- The type of confirmation. Possible values: `ACCOUNT_EXISTENCE`, `NAME_MATCHING`, `NAME_RESOLUTION`. example: NAME_MATCHING timestamp: type: string format: date-time description: Timestamp of when the confirmation check was performed. example: '2024-11-11T23:58:11.105916743Z' outcome: type: string description: >- The actual outcome of the confirmation. Possible values: `SUCCESS`, `PARTIAL_FAILURE`, `FAILURE`, `COULD_NOT_CHECK`. example: PARTIAL_FAILURE requiresCustomerAcceptance: type: boolean description: >- Whether we require customer acceptance. Whether this value is true or false is dependent on the currency and the nature of the confirmation. example: true fieldsChecked: type: array description: Fields we used to confirm the account. items: type: string example: - name/fullName - details/accountNumber providedName: type: string description: >- The name that the customer provided when creating the recipient account. Only populated for NAME_MATCHING and NAME_RESOLUTION types for certain outcomes. example: John Doe resolvedName: type: string description: >- The name that we resolved during name matching or name resolution. example: Joe Doe message: type: string description: Customer facing message about the outcome of the check. example: >- The name entered is slightly different to the name on the account. recommendedUpdates: type: array description: >- Shows what are the correct values for some of the fields we've checked. items: type: object properties: path: type: string description: The field path to update. example: name/fullName value: type: string description: The recommended value for the field. example: Joe Doe rule: title: Authorisation Rule x-tags: - spend-controls type: object properties: id: type: integer format: int64 description: The unique ID for the authorisation rule. type: type: string enum: - MCC - CURRENCY description: The type of authorisation rule. operation: type: string enum: - ALLOW - BLOCK description: Determines whether the transactions should be allowed or blocked. description: type: string description: The description of the authorisation rule. values: type: array items: type: string description: A list of values based on the `type` of rule configured. example: id: 123 description: my authorisation rule type: MCC operation: BLOCK values: - '1234' - '5678' profile-limits: title: Profile Limits x-tags: - spend-limits type: object properties: type: type: string enum: - PURCHASE - ATM_WITHDRAWAL description: > The type of transaction. `PURCHASE` is a combined limit that applies to contactless, magnetic, online purchase, chip and PIN/mobile wallet transactions. aggregateWindow: type: object properties: daily: type: object properties: value: type: object description: >- Daily limit. The value should be between 0 and the max allowed. properties: amount: type: number example: 20000 currency: type: string example: GBP usage: type: object description: The total authorised amount to date. properties: amount: type: number example: 0 currency: type: string example: GBP max: type: object description: >- The max allowed limit for [daily](https://wise.com/help/articles/2899986/what-are-my-spending-limits). properties: amount: type: number example: 30000 currency: type: string example: GBP resetAt: type: string format: date-time description: >- The time when the limit gets reset. ISO-8601 timestamp with timezone. example: '2023-07-31T22:59:59.999999999Z' monthly: type: object properties: value: type: object description: >- Monthly limit. The value should be between 0 and the max allowed. properties: amount: type: number example: 20000 currency: type: string example: GBP usage: type: object description: The total authorised amount to date. properties: amount: type: number example: 0 currency: type: string example: GBP max: type: object description: >- The max allowed limit for [monthly](https://wise.com/help/articles/2899986/what-are-my-spending-limits). properties: amount: type: number example: 30000 currency: type: string example: GBP resetAt: type: string format: date-time description: >- The time when the limit gets reset. ISO-8601 timestamp with timezone. example: '2023-07-31T22:59:59.999999999Z' card-limits: title: Card Limits x-tags: - spend-limits type: object properties: transaction: type: - object - 'null' properties: value: type: object description: Transaction limit. properties: amount: type: number example: 100 currency: type: string example: GBP usage: type: object description: The total authorised amount. Always 0 for transaction limit. properties: amount: type: number example: 0 currency: type: string example: GBP resetAt: type: - string - 'null' format: date-time description: The time when the limit gets reset. Null for transaction limit. example: null daily: type: - object - 'null' properties: value: type: object description: Daily limit. properties: amount: type: number example: 2000 currency: type: string example: GBP usage: type: object description: The total authorised amount during the daily window. properties: amount: type: number example: 100 currency: type: string example: GBP resetAt: type: - string - 'null' format: date-time description: >- The time when the limit gets reset. ISO-8601 timestamp with timezone. example: '2023-09-29T22:59:59.999999999Z' monthly: type: - object - 'null' properties: value: type: object description: Monthly limit. properties: amount: type: number example: 3000 currency: type: string example: GBP usage: type: object description: The total authorised amount during the monthly window. properties: amount: type: number example: 100 currency: type: string example: GBP resetAt: type: - string - 'null' format: date-time description: >- The time when the limit gets reset. ISO-8601 timestamp with timezone. example: '2023-09-30T22:59:59.999999999Z' lifetime: type: - object - 'null' properties: value: type: object description: Lifetime limit. properties: amount: type: number example: 5000 currency: type: string example: GBP usage: type: object description: The total authorised amount over the lifetime of the card. properties: amount: type: number example: 100 currency: type: string example: GBP resetAt: type: - string - 'null' format: date-time description: The time when the limit gets reset. Null for lifetime limit. example: null one-time-token: title: One-Time Token x-tags: - sca-ott type: object description: > A one-time token is generated when accessing an endpoint secured by SCA. This token includes a list of all available challenges to complete. You can use the [OTT status endpoint](/api-reference/sca-ott/ottstatusget) to view challenges and their statuses, or use [create SCA session](/api-reference/sca-sessions/scasessioncreate) to manually trigger SCA and return a one-time token. properties: oneTimeToken: type: string format: uuid description: A one-time token unique identifier. example: 5932d5b5-ec13-452f-8688-308feade7834 challenges: type: array description: An array of challenges. items: type: object properties: primaryChallenge: type: object properties: type: type: string description: A type of challenge. example: PIN passed: type: boolean description: The status of a challenge. example: false validity: type: integer description: The One-Time Token expiration in seconds. example: 3600 transfer: title: Standard Transfer x-tags: - transfer type: object properties: id: type: integer format: int64 description: Transfer ID example: 16521632 user: type: integer format: int64 description: Your user ID example: 4342275 targetAccount: type: integer format: int64 description: Recipient account ID example: 8692237 sourceAccount: type: - integer - 'null' format: int64 description: Refund recipient account ID example: null quote: type: - integer - 'null' format: int64 description: V1 quote ID example: null quoteUuid: type: string format: uuid description: V2 quote ID example: 8fa9be20-ba43-4b15-abbb-9424e1481050 status: type: string description: >- Transfer current status. See [Tracking Transfers](/guides/product/send-money/tracking-transfers) for all possible statuses. example: incoming_payment_waiting reference: type: string description: Deprecated, use `details.reference` instead deprecated: true example: reference text rate: type: number description: Exchange rate value example: 0.89 created: type: string format: date-time description: Timestamp when transfer was created example: '2017-11-24 10:47:49' business: type: - integer - 'null' format: int64 description: Your business profile ID example: null transferRequest: type: - integer - 'null' description: Deprecated deprecated: true example: null details: type: object properties: reference: type: string description: Payment reference text example: Testing hasActiveIssues: type: boolean description: Are there any pending issues which stop executing the transfer? example: false sourceCurrency: type: string description: Source currency code example: EUR sourceValue: type: number description: Transfer amount in source currency example: 0 targetCurrency: type: string description: Target currency code example: GBP targetValue: type: number description: Transfer amount in target currency example: 150 customerTransactionId: type: string format: uuid description: >- Unique identifier randomly generated per transfer request by the calling client example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 payinSessionId: type: string format: uuid description: >- ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer example: 23330542-8e9e-419f-95eb-312b880f92ad originator-transfer: title: Originator Transfer x-tags: - transfer type: object properties: id: type: integer format: int64 description: Transfer ID example: 16521632 user: type: integer format: int64 description: Your user ID example: 4342275 targetAccount: type: integer format: int64 description: Recipient account ID example: 8692237 sourceAccount: type: - integer - 'null' format: int64 description: Refund recipient account ID example: null quote: type: string description: Quote ID example: 8fa9be20-ba43-4b15-abbb-9424e1481050 status: type: string description: >- Transfer current status. See [Tracking Transfers](/guides/product/send-money/tracking-transfers) for all possible statuses. example: cancelled reference: type: string description: Deprecated, use `details.reference` instead deprecated: true example: reference text rate: type: number description: Exchange rate value example: 0.89 created: type: string format: date-time description: Timestamp when transfer was created example: '2025-10-29T12:28:16.000Z' business: type: - integer - 'null' format: int64 description: Your business profile ID example: null transferRequest: type: - integer - 'null' description: Deprecated deprecated: true example: null details: type: object properties: reference: type: string description: Payment reference text example: Testing originator: type: object description: Data block to capture payment originator details properties: legalEntityType: type: string enum: - PRIVATE - BUSINESS description: Payment originator legal type example: PRIVATE reference: type: string description: Unique customer ID in your system example: CST-2991992 name: type: object properties: givenName: type: string description: Payment originator first name example: John middleNames: type: array items: type: string description: Payment originator middle name(s) example: - Ryan familyName: type: string description: Payment originator family name example: Godspeed patronymicName: type: - string - 'null' description: Payment originator patronymic name example: null fullName: type: string description: Payment originator full legal name example: John Godspeed dateOfBirth: type: string format: date description: Payment originator date of birth example: '1977-07-01' businessRegistrationCode: type: - string - 'null' description: Payment originator business registry or incorporation number example: null address: type: object properties: firstLine: type: string description: Payment originator address first line example: Salu tee 14 city: type: string description: Payment originator address city example: Tallinn stateCode: type: - string - 'null' description: Payment originator address state code example: null countryCode: type: string description: Payment originator address country code ISO 3166-1 alpha-2 example: EE postCode: type: string description: Payment originator address zip code example: '12112' accountDetails: type: string description: Originator account number example: '23456789' hasActiveIssues: type: boolean description: Are there any pending issues which stop executing the transfer? example: false sourceCurrency: type: string description: Source currency code example: EUR sourceValue: type: number description: Transfer amount in source currency example: 0 targetCurrency: type: string description: Target currency code example: GBP targetValue: type: number description: Transfer amount in target currency example: 150 originalTransferId: type: string description: >- Unique identifier randomly generated per transfer request by the calling client example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88 payinSessionId: type: string format: uuid description: >- ID of the Payin Session generated for the transfer, which can be used for certain payin methods when funding the transfer example: 23330542-8e9e-419f-95eb-312b880f92ad transfer-requirement: title: Transfer Requirement type: object properties: type: type: string description: Resource type example: transfer fields: type: array items: type: object properties: name: type: string description: Field description group: type: array items: type: object properties: key: type: string description: Name of the field to include in the JSON name: type: string description: Field description type: type: string description: Display type of field (e.g. text, select) refreshRequirementsOnChange: type: boolean description: >- Whether to call POST transfer-requirements again once the field value is set to discover required lower level fields required: type: boolean description: Indicates if the field is mandatory displayFormat: type: - string - 'null' description: Display format pattern example: type: - string - 'null' description: Example value minLength: type: - integer - 'null' format: int32 description: Minimum valid length of field value maxLength: type: - integer - 'null' format: int32 description: Maximum valid length of field value validationRegexp: type: - string - 'null' description: Regexp validation pattern validationAsync: type: - string - 'null' description: >- Deprecated. This validation will instead be performed when submitting the request deprecated: true valuesAllowed: type: - array - 'null' description: List of allowed values items: type: object properties: key: type: string description: Value key name: type: string description: Value name payment: title: Payment type: object properties: id: type: integer format: int64 description: Payment ID example: 50000000 method: type: string description: The payment method used to pay for the transfer example: BANK_TRANSFER pricingVariant: type: - string - 'null' description: >- The qualifier that allows to apply different pricing policy within the same payment method. Often the value might be the payment method itself example: null amount: type: number description: Transfer source amount example: 1000 currency: type: string description: Transfer source currency example: GBP timeCreated: type: string format: date-time description: Date of when payment was created example: '2020-01-01T12:30:15.000Z' timeUpdated: type: string format: date-time description: Date of when payment was updated example: '2020-01-01T12:30:15.000Z' user: title: User type: object x-tags: - user description: Represents a Wise user account. properties: id: type: integer format: int64 description: User ID. example: 101 name: type: - string - 'null' description: User's full name. example: Example Person email: type: string description: User's email. example: person@example.com active: type: boolean description: If user is active or not. example: true details: type: - object - 'null' description: User details. properties: firstName: type: string description: User's first name. example: Example lastName: type: string description: User's last name. example: Person phoneNumber: type: string description: Phone number. example: '+37111111111' dateOfBirth: type: string format: date description: Date of birth (YYYY-MM-DD). example: '1977-01-01' occupation: type: string description: Person's occupation. example: '' avatar: type: string description: Link to person avatar image. example: https://lh6.googleusercontent.com/photo.jpg primaryAddress: type: integer format: int64 description: Address object ID to use in addresses endpoints. example: 111 address: type: object description: User's address. properties: countryCode: type: string description: Address country code in 2 digits. "US" for example. example: EE firstLine: type: string description: Address first line. example: Road 123 postCode: type: string description: Address post code. example: '11111' city: type: string description: Address city name. example: Tallinn state: type: string description: >- Address state code. Required if country is US, CA, AU, or BR. example: '' occupation: type: string description: User occupation. Required for US, CA, JP. example: '' subscription: title: Subscription type: object properties: id: type: string format: uuid description: UUID that uniquely identifies the subscription. example: 72195556-e5cb-495e-a010-b37a4f2a3043 name: type: string description: A custom name for your webhook to ease with identification. example: 'Webhook Subscription #1' trigger_on: type: string description: > The event type this subscription is listening for. [List of available events](/guides/developer/webhooks/event-types). example: transfers#state-change delivery: type: object properties: version: type: string description: The event representation semantic version. example: 4.0.0 url: type: string description: The URL where your server will be listening for events. example: https://your.webhook.url/12345 scope: type: object properties: domain: type: string description: Scope of this subscription (e.g. "application" or "profile"). example: application id: type: string description: ID associated with the scope (client key or profile ID). example: created_by: type: object properties: type: type: string description: Creator type (e.g. "application" or "user"). example: application id: type: string description: ID of the creator. example: created_at: type: string format: date-time description: Timestamp of when the subscription was created. example: '2019-10-10T13:55:57Z' subscription-request: title: Subscription Request type: object required: - name - trigger_on - delivery properties: name: type: string description: A custom name for your webhook to ease with identification. example: 'Webhook Subscription #1' trigger_on: type: string description: > [Choose from a list of available events](/guides/developer/webhooks/event-types). example: transfers#state-change delivery: type: object required: - version - url properties: version: type: string description: The event representation semantic version. example: 4.0.0 url: type: string description: The URL where your server will be listening for events. example: https://your.webhook.url/12345 test-notification: title: Test Notification type: object properties: delivery_id: type: string format: uuid description: ID of the delivery that was queued for sending. example: 4a6b9810-4279-4de5-8d8d-1a6cf3b92a75 created_at: type: string format: date-time description: Timestamp of when the test notification was created. example: '2019-03-28T11:22:33Z' v4.0.0: title: Schema version 4.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 4.0.0 example: 4.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 01234567-89ab-cdef-0123-456789abcdef event_type: type: string description: Event type identifier example: transfers#state-change sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2020-01-01T12:34:56.123Z' data: type: object properties: resource: type: object properties: type: type: string description: Resource type example: transfer id: type: integer format: int64 description: Transfer ID example: 111 profile_id: type: integer format: int64 description: Profile ID of the transfer owner example: 222 account_id: type: integer format: int64 description: Recipient account ID example: 333 current_state: type: string description: > Current transfer status. See [Transfer Statuses](/guides/product/send-money/tracking-transfers) for possible values. example: processing previous_state: type: - string - 'null' description: >- Previous transfer status. Note that this will be null for newly created transfers. example: incoming_payment_waiting occurred_at: type: string format: date-time description: Timestamp when the state change occurred example: '2020-01-01T12:34:56.789Z' v2.0.0: title: Schema version 2.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 2.0.0 example: 2.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 01234567-89ab-cdef-0123-456789abcdef event_type: type: string description: Event type identifier example: transfers#state-change sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2020-01-01T12:34:56Z' data: type: object properties: resource: type: object properties: type: type: string description: Resource type example: transfer id: type: integer format: int64 description: Transfer ID example: 111 profile_id: type: integer format: int64 description: Profile ID of the transfer owner example: 222 account_id: type: integer format: int64 description: Recipient account ID example: 333 current_state: type: string description: > Current transfer status. See [Transfer Statuses](/guides/product/send-money/tracking-transfers) for possible values. example: processing previous_state: type: - string - 'null' description: >- Previous transfer status. Note that this will be null for newly created transfers. example: incoming_payment_waiting occurred_at: type: string format: date-time description: Timestamp when the state change occurred example: '2020-01-01T12:34:56Z' v4.0.0-2: title: Schema version 4.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 4.0.0 example: 4.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 01234567-89ab-cdef-0123-456789abcdef event_type: type: string description: Event type identifier example: transfers#active-cases sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2020-01-01T12:34:56.123Z' data: type: object properties: resource: type: object properties: type: type: string description: Resource type example: transfer id: type: integer format: int64 description: Transfer ID example: 111 profile_id: type: integer format: int64 description: Profile ID of the transfer owner example: 222 account_id: type: integer format: int64 description: Recipient account ID example: 333 active_cases: type: array items: type: string description: Ongoing issues related to the transfer example: - deposit_amount_less_invoice v2.0.0-2: title: Schema version 2.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 2.0.0 example: 2.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 01234567-89ab-cdef-0123-456789abcdef event_type: type: string description: Event type identifier example: transfers#active-cases sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2020-01-01T12:34:56Z' data: type: object properties: resource: type: object properties: type: type: string description: Resource type example: transfer id: type: integer format: int64 description: Transfer ID example: 111 profile_id: type: integer format: int64 description: Profile ID of the transfer owner example: 222 account_id: type: integer format: int64 description: Recipient account ID example: 333 active_cases: type: array items: type: string description: Ongoing issues related to the transfer example: - deposit_amount_less_invoice v4.0.0-3: title: Schema version 4.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 4.0.0 example: 4.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 36c3f762-560d-4f07-84f9-5d8a3cacabbb event_type: type: string description: Event type identifier example: account-details-payment#state-change sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2024-01-01T12:34:56.123Z' data: type: object properties: resource: type: object properties: id: type: integer format: int64 description: Balance ID which is linked to the account detail example: 12345 profile_id: type: integer format: int64 description: ID of the profile that owns the payment example: 1 type: type: string description: Type of the resource example: balance-account account_details_id: type: string description: Account detail ID where the pay-in was received example: '1' target_account_id: type: string description: Balance ID which is linked to the account detail example: '12345' transfer: type: object properties: id: type: integer format: int64 description: ID of the incoming transfer example: 36454 type: type: string description: Type of the transfer example: credit amount: type: number format: decimal description: Transfer amount example: 120 currency: type: string description: Currency code example: EUR sender: type: object properties: name: type: string description: Sender name example: Test Sender account_number: type: string description: Sender account number example: '12345678' bank_code: type: string description: Sender bank code example: TESTBANK address: type: string description: Sender address example: Test Address current_state: type: string description: Current state of the payment enum: - PROCESSING - COMPLETED - CANCELLED - REFUNDED example: COMPLETED previous_state: type: string description: Previous state of the payment enum: - PROCESSING - COMPLETED - CANCELLED - REFUNDED example: PROCESSING occurred_at: type: string format: date-time description: Timestamp when the event occurred example: '2026-02-24T11:10:13.789Z' v2.0.0-3: title: Schema version 2.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 2.0.0 example: 2.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 36c3f762-560d-4f07-84f9-5d8a3cacabbb event_type: type: string description: Event type identifier example: account-details-payment#state-change sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2024-01-01T12:34:56Z' data: type: object properties: resource: type: object properties: id: type: integer format: int64 description: Balance ID which is linked to the account detail example: 12345 profile_id: type: integer format: int64 description: ID of the profile that owns the payment example: 1 type: type: string description: Type of the resource example: balance-account account_details_id: type: string description: Account detail ID where the pay-in was received example: '1' target_account_id: type: string description: Balance ID which is linked to the account detail example: '12345' transfer: type: object properties: id: type: integer format: int64 description: ID of the incoming transfer example: 36454 type: type: string description: Type of the transfer example: credit amount: type: number format: decimal description: Transfer amount example: 120 currency: type: string description: Currency code example: EUR sender: type: object properties: name: type: string description: Sender name example: Test Sender account_number: type: string description: Sender account number example: '12345678' bank_code: type: string description: Sender bank code example: TESTBANK address: type: string description: Sender address example: Test Address current_state: type: string description: Current state of the payment enum: - PROCESSING - COMPLETED - CANCELLED - REFUNDED example: COMPLETED previous_state: type: string description: Previous state of the payment enum: - PROCESSING - COMPLETED - CANCELLED - REFUNDED example: PROCESSING occurred_at: type: string format: date-time description: Timestamp when the event occurred example: '2026-02-24T11:10:13Z' v2.0.0-4: title: Schema version 2.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 2.0.0 example: 2.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 5281e333-a4d9-4960-aec3-553267a9a8aa event_type: type: string description: Event type identifier example: cards#manual-provisioning-verification sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2026-03-09T05:52:37Z' data: type: object properties: resource: type: object properties: profile_id: type: integer format: int64 description: ID of the profile that owns the card example: 9953556 client_id: type: string description: Your api_client_id example: tw-test-card-issuance card_token: type: string description: Unique identifier of the card example: 72393ec3-0707-4bf1-00b7-744f7a380d2c type: type: string description: Resource type (always `card`) example: card payment_token_unique_reference: type: string description: The payment token unique reference associated to the card example: DNITHE352605523102858206 last_four_digits: type: string description: The last four digits for the card Primary Account Number (PAN) example: '8237' creation_time: type: string format: date-time description: The time when the card provisioning request was created example: '2026-03-09T05:52:37.274962Z' wallet_name: type: string description: >- The wallet provider used to provision the card such as "Google Pay" or "Apple Pay" example: Google Pay v4.0.0-4: title: Schema version 4.0.0 type: object properties: schema_version: type: string description: >- Version of the event schema. Determined by the `schema_version` on your [webhook subscription](/api-reference/webhook). enum: - 4.0.0 example: 4.0.0 subscription_id: type: string format: uuid description: ID of the webhook subscription that triggered this event example: 01234567-89ab-cdef-0123-456789abcdef event_type: type: string description: Event type identifier example: hold-limit-breach#update sent_at: type: string format: date-time description: Timestamp when the event was sent example: '2024-06-01T08:00:00Z' data: type: object properties: resource: type: object properties: type: type: string description: Resource type. Always `hold-limit-breach` example: hold-limit-breach hold_limit_breach_id: type: integer format: int64 description: ID of the hold limit breach example: 1001 profile_id: type: integer format: int64 description: ID of the profile that owns the breach example: 12321323 amount: type: number format: decimal description: Amount that exceeded the hold limit example: 500.5 currency: type: string description: Currency code (ISO 4217) of the breach amount example: SGD state: type: string description: Current state of the breach enum: - OPEN - CLOSED example: CLOSED closing_reason: type: - string - 'null' description: Reason the breach was closed. Null if state is `OPEN` enum: - AUTOMATICALLY_RESOLVED - MANUALLY_RESOLVED - null example: MANUALLY_RESOLVED created_at: type: string format: date-time description: Timestamp when the breach was created (ISO 8601) example: '2024-06-01T08:00:00Z' updated_at: type: string format: date-time description: Timestamp when the breach was last updated (ISO 8601) example: '2024-06-01T08:00:00Z' occurred_at: type: string format: date-time description: >- Timestamp when the event occurred (ISO 8601). Use this field to reconcile out-of-order events example: '2024-06-01T08:00:00Z'