openapi: 3.1.0
info:
  title: Wise Platform API
  version: ''
  x-version: legacy
  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/legacy/quote)** | Exchange rate and fee
    calculations |

    | **[Recipient](/api-reference/legacy/recipient)** | Beneficiary account
    management |

    | **[Transfer](/api-reference/legacy/transfer)** | Payment creation and
    execution |

    | **[Balance](/api-reference/legacy/balance)** | Multi-currency account
    operations |

    | **[Profile](/api-reference/legacy/profile)** | Account ownership details |

    | **[Rate](/api-reference/legacy/rate)** | Current and historical exchange
    rates |


    **Not sure which workflow to build?**<br>

    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.
  - 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/legacy/card-sensitive-details). For ordering
      new cards, see the [Card Orders API](/api-reference/legacy/card-order).
      For transaction history, see the [Card Transactions
      API](/api-reference/legacy/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/legacy/card)

      - For ordering new cards, see the [Card Orders
      API](/api-reference/legacy/card-order)

      - For transaction history, see the [Card Transaction
      API](/api-reference/legacy/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](/api-reference/legacy/webhook-event/eventcardscardproductionstatuschange).


      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/legacy/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/legacy/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/legacy/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/legacy/spend-limits/spendlimitscardupdate) or
      [profile](/api-reference/legacy/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/legacy/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/legacy/spend-limits/spendlimitscardupdate) or
      [profile](/api-reference/legacy/spend-limits/spendlimitsprofileupdate)
      limit

      - `PAYMENT_METHOD_NOT_ALLOWED` - This payment type has been disabled.
      Advise if they would like to
      [enable](/api-reference/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/standard-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/legacy/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/legacy/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: Cases
    description: >
      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 %}


      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. |
  - 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/legacy/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/legacy/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/legacy/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/legacy/sca-otp/usersecurityphonenumbercreate) and
      register the end user's phone number. Then, call the trigger endpoints
      ([SMS](/api-reference/legacy/sca-otp/ottsmstrigger),
      [WhatsApp](/api-reference/legacy/sca-otp/ottwhatsapptrigger),
      [Voice](/api-reference/legacy/sca-otp/ottvoicetrigger)) to send an OTP to
      the registered number. Finally, submit the OTP via the verify endpoints
      ([SMS](/api-reference/legacy/sca-otp/ottsmsverify),
      [WhatsApp](/api-reference/legacy/sca-otp/ottwhatsappverify),
      [Voice](/api-reference/legacy/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/legacy/recipient) based on a
      [quote](/api-reference/legacy/quote).


      Once created, a transfer usually needs to be funded within fourteen days.
      Otherwise, it will be automatically cancelled.
  - name: standard-transfer
    x-displayName: Standard Transfers
    description: >-
      Create and manage transfers over API, either from your own Wise account or
      on behalf of your customers.
  - name: third-party-transfer
    x-displayName: Third Party Transfers
    description: >-
      Create and manage transfers over API on behalf of your customers, under
      your own financial license.
  - 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/legacy/profile) — whether personal or
      business — can have its own [multi-currency
      account](/api-reference/legacy/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/legacy/sca-pin),
      [Facemaps](/api-reference/legacy/sca-facemaps), and [Device
      Fingerprints](/api-reference/legacy/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 Wise sends to your server when specific
      actions occur. Subscribe to events using the
      [Webhook](/api-reference/legacy/webhook) endpoints at the application or
      profile level.


      See the [Webhooks guide](/guides/developer/webhooks) for setup
      instructions, signature verification, and best practices.
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: Issuing
    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
      - standard-transfer
      - third-party-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](/api-reference/legacy/webhook-event/eventcards3dschallenge).


        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: <strong>Test Payment</strong>
                    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.<br>

                        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.<br>

                        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.<br>

                        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.<br>

                        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/legacy/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/legacy/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/legacy/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:
    get:
      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/legacy/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/legacy/transfer#create). For quote and
        recipient creation, see [quote
        creation](/api-reference/legacy/quote/quotecreate) and [recipient
        creation](/api-reference/legacy/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/legacy/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/legacy/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/legacy/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](/api-reference/legacy/webhook-event/eventbatchpaymentinitiationsstatechange),
        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/legacy/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: <encryption 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'
  /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: <your JWE>
      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: <your JWE>
      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/legacy/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'
  /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/{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](/api-reference/legacy/webhook-event/eventcardscardproductionstatuschange)
        webhook with status `READY`.


        {% admonition type="warning" %}

        Cards that were created over 60 days ago will result in a 422 error code
        and cannot be retried. This is due to the data being obfuscated on our
        side. In this case, a new card order has to be created.

        {% /admonition %}
      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](/api-reference/legacy/webhook-event/eventcardscardproductionstatuschange)
        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/legacy/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/legacy/profile/profilebusinesscreate).


        If the cardholder is not the business representative, create a
        cardholder [personal
        profile](/api-reference/legacy/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
              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.
                    **Required** for physical cards. **Optional** for virtual
                    cards (defaults to the profile address, if omitted). 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/legacy/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/legacy/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 card creation, the `address` requirement depends on the card type:


        - **Physical Cards (Required)**: Used as the delivery address to ship
        the card and for AVS checks in countries where required.


        - **Virtual Cards (Optional)**: If provided, this acts as the billing
        address. If omitted, the profile address is used as the fallback. In
        either scenario, the address is used for AVS checks in countries where
        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'
  /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/legacy/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](/api-reference/legacy/webhook-event/eventcardstransactionstatechange).


        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](/api-reference/legacy/webhook-event/eventcardstransactionstatechange)
        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](/api-reference/legacy/webhook-event/eventcardstransactionstatechange)
        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/legacy/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/legacy/user/usercreate).
            example:
              registrationCode: <registration code>
      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: <claim_account_code>
          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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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 <YOUR_JWT_HERE>' \
              -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 <YOUR_JWT_HERE>' \
              -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 <YOUR_JWT_HERE>' \
              -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
        - name: x-tw-jose-encryption-kid
          in: header
          required: true
          description: Public Key ID of JWE Encryption Key
          schema:
            type: string
          example: 2333836d-2e1c-4acd-8b52-234d379260aa
        - $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 <YOUR_JWT_HERE>' \
              -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. **The link is short-lived and single-use and valid for 5
        minutes**. Use the `expiresAt` field in the response to determine the
        exact expiry time. To regenerate the link, call this endpoint again.


        Once the Hosted KYC flow is completed by the end customer, they will be
        redirected to the `redirectUrl` provided in this API call. During the
        redirection, the `redirectUrl` will be appended with query parameters:
        `status=success`, `status=failed`, or `status=closed`.
      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-with-link'
          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_CONTROLLING_PERSON
              - BUSINESS_DIRECTORS_CHECK
              - BUSINESS_INCOME_CLASSIFICATION
              - BUSINESS_MONTHLY_VOLUME
              - BUSINESS_REGISTRATION_DOCS
              - BUSINESS_SHAREHOLDER_CONTACT_DETAILS
              - 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 <token>' \
              -F 'submissionData={"data":{"accountPurpose":"SENDING_MONEY_TO_FRIENDS_OR_FAMILY"},"version":"V1","kycReviewId":"93a903ea-636c-4c86-a25c-cf6d2bd00e81"};type=application/json' \
              -F 'files=@"<file>"'
      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/legacy/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/jose-jwe){%
        .d-inline-block %}


        To clear a **PIN** challenge listed in a OTT.


        Notes:

        1. User is required to [create
        pin](/api-reference/legacy/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 <YOUR_TOKEN_HERE>' \
              -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: <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/jose-jwe) 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/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/legacy/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 <YOUR_TOKEN_HERE>' \
              -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: <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": "<device_fingerprint_value>"}

                ```


                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/jose-jwe) 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/legacy/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/legacy/facetec/facetecpublickeyget).
                  example: <base64_encoded_string>
      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/legacy/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/legacy/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/legacy/sca-otp/usersecurityphonenumbercreate) for
        more information.

        2. [Trigger SMS Challenge](/api-reference/legacy/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/legacy/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/legacy/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/legacy/sca-otp/usersecurityphonenumbercreate) for
        more information.

        2. [Trigger WhatsApp
        Challenge](/api-reference/legacy/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/legacy/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/legacy/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/legacy/sca-otp/usersecurityphonenumbercreate) for
        more information.

        2. [Trigger Voice
        Challenge](/api-reference/legacy/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/legacy/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 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 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 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
      deprecated: true
      summary: Retrieve a case by ID
      description: >
        This endpoint returns a case based on the specified case ID.


        Note : V1 endpoint is deprecated for new integrations and advising users
        to migrate to the 2026Q3 onwards API.
      tags:
        - case
      security:
        - ClientCredentialsToken: []
      parameters:
        - name: caseId
          in: path
          required: true
          description: Case ID.
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/X-External-Correlation-Id'
      responses:
        '200':
          description: 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 case comments
      deprecated: true
      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).


        Note : V1 endpoint is deprecated for new integrations and advising users
        to migrate to the 2026Q3 onwards API.
      tags:
        - case
      security:
        - ClientCredentialsToken: []
      parameters:
        - name: caseId
          in: path
          required: true
          description: 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 case comment
      deprecated: true
      description: >
        This endpoint allows for a comment to be placed on a case.


        Note : V1 endpoint is deprecated for new integrations and advising users
        to migrate to the 2026Q3 onwards API.
      tags:
        - case
      security:
        - ClientCredentialsToken: []
      parameters:
        - name: caseId
          in: path
          required: true
          description: 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.
      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/legacy/profile/profilepersonalcreate) and
        [Create Business
        Profile](/api-reference/legacy/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/legacy/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/product/kyc/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/product/kyc/business-categories).
                          example: CONSULTING_IT_BUSINESS_SERVICES
                        businessSubCategory:
                          type: string
                          description: >-
                            [Business
                            sub-category](/guides/product/kyc/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/product/kyc/business-categories).
                            example: CONSULTING_IT_BUSINESS_SERVICES
                          businessSubCategory:
                            type: string
                            description: >-
                              [Business
                              sub-category](/guides/product/kyc/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/legacy/profile/profilepersonalupdate) and
        [Update Business
        Profile](/api-reference/legacy/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/product/kyc/business-categories).
                          example: CONSULTING_IT_BUSINESS_SERVICES
                        businessSubCategory:
                          type: string
                          description: >-
                            [Business
                            sub-category](/guides/product/kyc/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/product/kyc/business-categories).
                            example: CONSULTING_IT_BUSINESS_SERVICES
                          businessSubCategory:
                            type: string
                            description: >-
                              [Business
                              sub-category](/guides/product/kyc/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/legacy/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 (V2)
      deprecated: true
      description: >
        {% admonition type="warning" %}

        This endpoint is deprecated. New integrations should use the [V4
        endpoint](/api-reference/legacy/profile/profilebusinesscreatev4). See
        [Migrating to industry
        categories](/guides/developer/api-guides/business-profile-industry-categories-migration).

        {% /admonition %}


        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 Categories](/guides/product/kyc/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
                  deprecated: true
                  description: >
                    Legacy primary [business
                    category](/guides/product/kyc/business-categories). New
                    integrations should use `industryCategories` on the [V4
                    endpoint](/api-reference/legacy/profile/profilebusinesscreatev4)
                    instead. See [Migrating to industry
                    categories](/guides/product/kyc/migrate-business-profile-industry-categories).
                  example: CONSULTING_IT_BUSINESS_SERVICES
                secondLevelCategory:
                  type: string
                  deprecated: true
                  description: >
                    Legacy secondary [business
                    category](/guides/product/kyc/business-categories). New
                    integrations should use `industryCategories` on the [V4
                    endpoint](/api-reference/legacy/profile/profilebusinesscreatev4)
                    instead. See [Migrating to industry
                    categories](/guides/product/kyc/migrate-business-profile-industry-categories).
                  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)
      deprecated: true
      description: >
        {% admonition type="warning" %}

        This endpoint is deprecated. See [Migrating to industry
        categories](/guides/product/kyc/migrate-business-profile-industry-categories)
        for the current create business profile endpoint and migration steps.

        {% /admonition %}


        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 Categories](/guides/product/kyc/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
                  deprecated: true
                  description: >
                    Legacy primary [business
                    category](/guides/product/kyc/business-categories). New
                    integrations should use `industryCategories`. See [Migrating
                    to industry
                    categories](/guides/product/kyc/migrate-business-profile-industry-categories).
                  example: CONSULTING_IT_BUSINESS_SERVICES
                secondLevelCategory:
                  type: string
                  deprecated: true
                  description: >
                    Legacy secondary [business
                    category](/guides/product/kyc/business-categories). New
                    integrations should use `industryCategories`. See [Migrating
                    to industry
                    categories](/guides/product/kyc/migrate-business-profile-industry-categories).
                  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'
  /v4/profiles/business-profile:
    post:
      operationId: profileBusinessCreateV4
      summary: Create a business profile (V4)
      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 Categories](/guides/product/kyc/business-categories) for
        the list of valid `industryCategories` values, and [Migrating to
        industry
        categories](/guides/product/kyc/migrate-business-profile-industry-categories)
        if you are moving from the [V2 create
        endpoint](/api-reference/legacy/profile/profilebusinesscreate).
      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
                industryCategories:
                  type: array
                  description: >-
                    One or more industry categories classifying the business.
                    See [Business
                    Categories](/guides/product/kyc/business-categories) for the
                    full list of valid values.
                  minItems: 1
                  items:
                    type: string
                  example:
                    - SOFTWARE_DEVELOPMENT_PUBLISHING
                    - IT_CONSULTANCY_TECHNICAL_SUPPORT_SERVICES
                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-industry-categories'
          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/legacy/profile/profileupdatewindowopen),
        submitting the updated information using this endpoint, and finally
        [closing the update
        window](/api-reference/legacy/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 (V2)
      deprecated: true
      description: >
        {% admonition type="warning" %}

        This endpoint is deprecated. See [Migrating to industry
        categories](/guides/product/kyc/migrate-business-profile-industry-categories)
        for the current update business profile endpoint and migration steps.

        {% /admonition %}


        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/legacy/profile/profileupdatewindowopen),
        submitting the updated information using this endpoint, and finally
        [closing the update
        window](/api-reference/legacy/profile/profileupdatewindowclose).


        See [Business Categories](/guides/product/kyc/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
                  deprecated: true
                  description: >
                    Legacy primary [business
                    category](/guides/product/kyc/business-categories). New
                    integrations should use `industryCategories`. See [Migrating
                    to industry
                    categories](/guides/product/kyc/migrate-business-profile-industry-categories).
                  example: CONSULTING_IT_BUSINESS_SERVICES
                secondLevelCategory:
                  type: string
                  deprecated: true
                  description: >
                    Legacy secondary [business
                    category](/guides/product/kyc/business-categories). New
                    integrations should use `industryCategories`. See [Migrating
                    to industry
                    categories](/guides/product/kyc/migrate-business-profile-industry-categories).
                  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'
        '422':
          description: >
            Request could not be processed due to a missing prerequisite.

            Returned when submitting `FINANCIAL_CAPACITY_BR` for a profile that
            has no tax ID on record.
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
                    example: >-
                      Financial capacity can't be added because no tax ID has
                      been submitted for the profile.
                  success:
                    type: boolean
                    example: 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'
    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'
        '422':
          description: >
            Request could not be processed due to a missing prerequisite.

            Returned when submitting `FINANCIAL_CAPACITY_BR` for a profile that
            has no tax ID on record.
          content:
            application/json:
              schema:
                type: object
                properties:
                  errorMessage:
                    type: string
                    example: >-
                      Financial capacity can't be added because no tax ID has
                      been submitted for the profile.
                  success:
                    type: boolean
                    example: 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/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/legacy/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/legacy/recipient/recipientaccountrequirementsget).


        Using profile extension requirements {% .title-4 .m-t-3 %}


        1. First create a profile. See [Create Personal
        Profile](/api-reference/legacy/profile/profilepersonalcreate) and
        [Create Business
        Profile](/api-reference/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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`<br>

        Fetch latest exchange rates of all currencies.


        `GET /v1/rates?source=EUR&target=USD`<br>

        Fetch latest exchange rate of one currency pair.


        `GET /v1/rates?source=EUR&target=USD&time=2019-02-13T14:53:01`<br>

        Fetch exchange rate of specific historical timestamp.


        `GET
        /v1/rates?source=EUR&target=USD&from=2019-02-13T14:53:01&to=2019-03-13T14:53:01&group=day`<br>

        Fetch exchange rate history over period of time with daily interval.


        `GET
        /v1/rates?source=EUR&target=USD&from=2019-02-13T14:53:01&to=2019-03-13T14:53:01&group=hour`<br>

        Fetch exchange rate history over period of time with hourly interval.


        `GET
        /v1/rates?source=EUR&target=USD&from=2019-02-13T14:53:01&to=2019-03-13T14:53:01&group=minute`<br>

        Fetch exchange rate history over period of time with 1 minute interval.


        {% admonition type="warning" %}

        This endpoint only supports Bearer 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. <br>Supports only Timestamp
            (combined date and time). Timezone offset is supported but optional.
            <br>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. <br>Supports
            Timestamp (combined date and time) or Date (date only).
            <br>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. <br>Supports
            Timestamp (combined date and time) or Date (date only). <br>Timezone
            offset is supported but optional. <br>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/legacy/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 a transfer.


        Recipient data includes:

        - The personal details of an individual or basic information about a
        business.

        - Bank details like account numbers, routing numbers, and other
        region-specific information.

        - Address details like country and street address.


        {% admonition type="info" %}

        Certain fields shown in the schema are conditionally required depending
        on `currency`, `type`, `legalType`, and `country`.


        The reference uses a GBP example for illustration purposes.

        As such, some fields may be `null` in the provided examples. To
        determine which fields are required for a currency, use the

        **[Retrieve recipient account
        requirements](/api-reference/legacy/recipient/recipientaccountrequirementsget)**
        endpoint.

        {% /admonition %}


        #### Bank account details


        There are many variations of bank account details required, depending on
        recipient target currency. For example:


        - **GBP** requires sort code and account number.

        - **BGN, CHF, DKK, EUR, GEL, GBP, NOK, PKR, PLN, RON, SEK** require
        IBAN.

        - **USD** requires routing number, account number, and account type.

        - **INR** requires IFSC code and account number.



        #### Address details


        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 (required for 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]`.

        ### Creating a refund recipient account


        Sometimes we may need to refund the transfer back to the sender. The
        _refund recipient_ is the person or institution who we refund the
        transfer money back to when necessary. 


        It is not always mandatory to create a refund recipient. 


        - 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.


        To indicate a recipient account is a _refund recipient_, includ the
        query parameter `refund=true` in the request.


        Use the account ID returned in the response as `sourceAccount` when
        [creating transfers](/guides/product/send-money/transfers).


        ### Creating an email recipient account


        {% admonition type="warning" %}

        Contact us before attempting to use email recipients as it is only
        recommended for certain use cases.

        {% /admonition %}


        If you don't know recipient bank account details, you can set up an
        email recipient. Wise then collects 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 completes the transfer.


        Confirm this recipient type is available for your transaction by
        checking if the `"type": "email"` class is present in the response the
        [retrieve recipient account requirements
        endpoint](/api-reference/legacy/recipient/recipientaccountrequirementsget).


        If planning to send multiple currencies to a single recipient, you must
        create a separate email recipient resource for the beneficiary, for
        every currency you intend to send them.


        Be aware of the following:

        - 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.

        - Refer to our **[help
        page](https://wise.com/help/articles/2932105/can-i-send-money-to-someone-with-only-their-email-address)**
        for more details about how this works and any additional constraints not
        mentioned here.
      tags:
        - recipient
      security:
        - UserToken: []
      parameters:
        - name: refund
          in: query
          required: false
          description: When `true`, the request 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'
                  ultimateBeneficiary:
                    name:
                      fullName: John Doe
              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.<br>

        `?sort=id,desc` sort by `id` descending.<br>

        `?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/legacy/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`<br>

        `POST /v1/quotes/{quoteId}/account-requirements`<br>

        `GET /v1/account-requirements?source=EUR&target=USD&sourceAmount=1000`


        You can use the data returned by this API to build a dynamic user
        interface for recipient creation. The `GET` and `POST`
        account-requirements endpoints help you to figure out which fields are
        required to create a valid recipient for different currencies. This is a
        step-by-step guide on how these endpoints work.


        Use the `GET` endpoint to learn what datapoints are required to send a
        payment to your beneficiary. As you build that form, use the POST
        endpoint to learn if any additional datapoints are required as a result
        of passing a field that has `"refreshRequirementsOnChange": true` in the
        `GET` response. You should be posting the same recipient account payload
        that will be posted to `/v1/accounts`.


        An 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/legacy/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/legacy/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`.


        {% admonition type="info" %}

        Important notes
         - Simulation is not supported for email transfers.
         - Fund the transfer first before calling any simulation endpoints.
         - Even if funding moves the transfer to a processing state, you must still call the /processing simulation endpoint.
         - Although the simulation request may respond immediately, processing is asynchronous - wait at least 5 seconds between simulation calls.
        {% /admonition %}


        ### Sandbox refund simulation behaviour {% #sandbox-refund %}


        When simulating `funds_refunded`, a `transfers#refund` webhook is
        delivered with a simulated `refund_amount`. The amount is calculated as
        follows:


        - **SWIFT payouts:** A random fee between 5-15% is deducted from the
        source amount. This is non-deterministic — each simulation produces a
        different refund amount. This is intended for testing your partial
        refund handling flow.

        - **Non-SWIFT payouts:** The full source amount is refunded.


        The simulated refund amount only applies to the webhook payload.
        Balances and the sandbox UI will always reflect the full refund amount
        regardless of payout method, so the webhook `refund_amount` may differ
        from what is shown in balances and the sandbox UI for SWIFT transfers.  

        This simulation is not suitable for reconciliation testing between
        webhook amounts and balances.
      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/transfers/{transferId}/payout-failure:
    post:
      operationId: simulationTransferPayoutFailure
      summary: Simulate transfer payout failure
      description: >
        Triggers transfers#payout-failure webhook for the transfer.


        The available payout failure reason codes are listed in the
        [transfers#payout-failure webhook
        guide](/guides/product/send-money/tracking/payout-failures).


        {% admonition type="info" %}

        - Simulation requires transfer to be in `bounced_back` state.

        - While payout failure simulation call will respond with 200 in real
        time, the payout failure webhook is asynchronous.

        {% /admonition %}


        Request body is optional; omit it or send {} to trigger a random failure
        reason.
      tags:
        - simulation
      security:
        - UserToken: []
      parameters:
        - name: transferId
          in: path
          required: true
          description: The ID of the transfer to simulate.
          schema:
            type: integer
            format: int64
        - $ref: '#/components/parameters/X-External-Correlation-Id'
      requestBody:
        required: false
        content:
          application/json:
            schema:
              type: object
              additionalProperties: false
              properties:
                failure_reason_code:
                  type: string
                  description: >-
                    Failure reason code to trigger for payout failure. When not
                    provided, a failure code is selected at random and returned.
            examples:
              empty:
                summary: Random failure reason
                value: {}
              wrongId:
                summary: Explicit failure reason
                value:
                  failure_reason_code: WRONG_ID_NUMBER
      responses:
        '200':
          description: Successful initiation of payout failure.
          content:
            application/json:
              example:
                failure_reason_code: WRONG_ID_NUMBER
                failure_description: Invalid recipient's ID document number
                occurred_at: '2023-08-10T10:17:23.123Z'
          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 input or transfer state
          content:
            application/json:
              schema:
                type: object
              examples:
                invalidFailureReasonCode:
                  summary: Invalid failure reason code provided
                  value:
                    errors:
                      - arguments: []
                        code: invalid_failure_reason_code
                        message: >-
                          The provided failure reason code 'INVALID_CODE' is not
                          recognized
                invalidTransferState:
                  summary: Transfer not in `BOUNCED_BACK` state
                  value:
                    errors:
                      - arguments: []
                        code: invalid_transfer_state
                        message: >-
                          Transfer must be in BOUNCED_BACK state to simulate
                          payout failure. Current state: OUTGOING_PAYMENT_SENT
          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:
              schema:
                type: object
              example:
                errors:
                  - code: system_error
                    message: >-
                      Something went wrong in our side. Please try again in 5
                      minutes. If this does not help, please let us know
                      api@wise.com
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
  /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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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:
              $ref: '#/components/schemas/bank-transaction-import-request'
            examples:
              minimalRequest:
                summary: Minimal example
                value:
                  currency: USD
                  amount: 2000
              fullRequest:
                summary: Full example
                value:
                  currency: USD
                  amount: 2000
                  reference: Test transfer
                  senderName: John Doe
                  senderBankCode: '101019628'
                  senderAccountNumber: '1234567890'
                  senderAddress:
                    addressFirstLine: 1 Sender Street
                    city: Berlin
                    postalCode: '10115'
                    stateCode: BE
                    country: DE
                  beneficiaryName: John Doe
                  beneficiaryAddress:
                    addressFirstLine: 1 Recipient Street
                    city: Brussels
                    postalCode: '1000'
                    stateCode: BRU
                    country: BE
      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](/api-reference/legacy/webhook-event/eventswiftincredit)
        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:
              $ref: '#/components/schemas/swift-in-request'
            examples:
              minimal:
                summary: Minimal request
                value:
                  currencyCode: EUR
                  amount: 100
              full:
                summary: Full request
                value:
                  currencyCode: EUR
                  amount: 100
                  instructedCurrencyCode: EUR
                  instructedAmount: 101
                  beneficiaryName: John Doe
                  beneficiaryAccount: '8599680548'
                  beneficiaryAddress:
                    addressLine: 1234 Elm St, IL
                    city: Springfield
                    postalCode: '62704'
                    country: US
                  senderName: Jane Doe
                  senderBank:
                    bic: DEUTDEDBFRA
                    name: Example Bank
                    lei: 5493001KJTIIGC8Y1R12
                    clearingSystemCode: DEBLZ
                    clearingSystemMemberId: '50070010'
                    address:
                      addressLine: 1 Bank Street
                      city: Frankfurt
                      postalCode: '60311'
                      country: DE
                  senderAccount: DE89370400440532013000
                  senderAddress:
                    addressLine: 5678 Oak St
                    city: Springfield
                    postalCode: '62704'
                    country: US
                  paymentReference: Test123
                  charges:
                    - amount: 1
                      currency: EUR
                      agent: DEUTDEDBFRA
                  previousInstructingAgents:
                    - COBADEFFXXX
      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 0
                    path: amount
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '422':
          description: Unprocessable Entity.
          content:
            application/json:
              example:
                arguments: []
                code: not.valid
                message: >-
                  None of connected BICs match beneficiary account
                  DE00000000000000000000 (TESTDE00)
          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/legacy/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/legacy/spend-controls/spendcontrolsruleslist)
        and can be
        [applied](/api-reference/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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/legacy/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 <YOUR_JWT_HERE>' \
              -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: <JWE encrypted string>
      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/legacy/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/legacy/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 <YOUR_JWT_HERE>' \
              -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: <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: <JWE encrypted string>
      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 <YOUR_JWT_HERE>' \
              -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: <JWE encrypted string>
      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/legacy/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 <YOUR_JWT_HERE>' \
              -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: <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: <JWE encrypted string>
      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/legacy/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: <base64 encrypted 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/legacy/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/legacy/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/legacy/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: <base64 encoded string>
      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/legacy/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:
        - standard-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/legacy/transfer/transferrequirementsvalidate)
                        for conditions
                    transferPurposeSubTransferPurpose:
                      type: string
                      description: >-
                        Conditionally required. For example when target currency
                        is CNY. See [Transfer
                        Requirements](/api-reference/legacy/transfer/transferrequirementsvalidate)
                        for conditions
                    transferPurposeInvoiceNumber:
                      type: string
                      description: >-
                        Conditionally required. For example when target currency
                        is INR. See [Transfer
                        Requirements](/api-reference/legacy/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/legacy/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:
        - standard-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:
      description: |2

            When creating a transfer on behalf of a third party, you must take note that:

            * 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. Please refer the sample request examples.
            * `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.
      summary: Create a third party transfer
      operationId: createThirdPartyTransfer
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateThirdPartyTransferRequestContent'
            examples:
              1.create-third-party-transfer-private-originator:
                summary: PRIVATE Originator
                value:
                  profileId: 123456789
                  targetAccount: 7839323
                  quote: 3522e360-356a-4e37-9f99-94a21898d8fa
                  originalTransferId: '4711'
                  details:
                    reference: Ski trip
                  originator:
                    legalEntityType: PRIVATE
                    accountDetails: '123456789'
                    reference: CST-2991992
                    name:
                      givenName: John
                      middleNames:
                        - Ryan
                      familyName: Godspeed
                      patronymicName: Fitz
                    dateOfBirth: '1977-07-01'
                    nationality: EE
                    address:
                      firstLine: Salu tee 100, Apt 4B
                      city: Tallinn
                      countryCode: EE
                      postCode: '12112'
              2.create-third-party-transfer-business-originator:
                summary: BUSINESS Originator
                value:
                  profileId: 123456789
                  targetAccount: 7839323
                  quote: 3522e360-356a-4e37-9f99-94a21898d8fa
                  originalTransferId: '4711'
                  details:
                    reference: Ski trip
                  originator:
                    legalEntityType: BUSINESS
                    reference: '78976'
                    name:
                      fullName: Hot Air Balloon Services Ltd
                    businessRegistrationCode: AE-89780
                    businessRegistrationDate: '2020-01-15'
                    address:
                      firstLine: Salu tee 100, Apt 4B
                      city: Tallinn
                      countryCode: EE
                      postCode: '12112'
      parameters:
        - name: profileId
          in: path
          description: The profile ID.
          schema:
            type: integer
            description: The profile ID.
            format: int64
            example: 123456789
          required: true
        - $ref: '#/components/parameters/X-External-Correlation-Id'
      responses:
        '201':
          description: Third party transfer successfully created.
          headers:
            Location:
              description: Path to the created transfer
              schema:
                type: string
                description: Path to the created transfer
                example: /public/v2/profiles/123/third-party-transfers/16521632
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateThirdPartyTransferResponseContent'
              examples:
                response-business-legalentity:
                  summary: BUSINESS Originator Response
                  value:
                    id: 16521632
                    originalTransferId: 54a6bc09-cef9-49a8-9041-f1f0c654cd88
                    user: 4342275
                    targetAccount: 8692237
                    sourceAccount: 1527389
                    quote: 8fa9be20-ba43-4b15-abbb-9424e1481050
                    status: cancelled
                    rate: 0.89
                    details:
                      reference: T475890
                    hasActiveIssues: false
                    sourceCurrency: EUR
                    sourceValue: 0
                    targetCurrency: GBP
                    targetValue: 150
                    originator:
                      legalEntityType: BUSINESS
                      name:
                        fullName: Hot Air Balloon Services Ltd
                      reference: CST-2991992
                      businessRegistrationCode: 83920-546
                      businessRegistrationDate: '2020-01-15'
                      address:
                        firstLine: Salu tee 14
                        city: Tallinn
                        stateCode: ''
                        countryCode: EE
                        postCode: '12112'
                      accountDetails: '23456789'
                    created: '2025-10-29T12:28:16.000Z'
                response-private-legalentity:
                  summary: PRIVATE Originator Response
                  value:
                    id: 16521632
                    originalTransferId: 54a6bc09-cef9-49a8-9041-f1f0c654cd88
                    user: 4342275
                    targetAccount: 8692237
                    sourceAccount: 1527389
                    quote: 8fa9be20-ba43-4b15-abbb-9424e1481050
                    status: cancelled
                    rate: 0.89
                    details:
                      reference: Testing
                    hasActiveIssues: false
                    sourceCurrency: EUR
                    sourceValue: 0
                    targetCurrency: GBP
                    targetValue: 150
                    originator:
                      legalEntityType: PRIVATE
                      name:
                        givenName: John
                        middleNames:
                          - Ryan
                        familyName: Godspeed
                        patronymicName: Fitz
                      dateOfBirth: '1977-07-01'
                      nationality: EE
                      reference: CST-2991992
                      address:
                        firstLine: Salu tee 14
                        city: Tallinn
                        stateCode: ''
                        countryCode: EE
                        postCode: '12112'
                      accountDetails: '23456789'
                    created: '2025-10-29T12:28:16.000Z'
        '429':
          $ref: '#/components/responses/429'
      security:
        - UserToken: []
      tags:
        - third-party-transfer
  /v1/profiles/{profileId}/third-party-transfers/{transferId}:
    get:
      operationId: GetThirdPartyTransferV1
      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](/api-reference/legacy/third-party-transfer/getthirdpartytransfer)
        (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/legacy/webhook).
      tags:
        - third-party-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:
      description: |2

            Get third party transfer info by ID. To receive dynamic updates as the state of the transfer changes, see the [webhooks documentation](https://docs.wise.com/api-reference/legacy/webhook).
      summary: Get a third party transfer by ID
      operationId: getThirdPartyTransfer
      parameters:
        - name: profileId
          in: path
          description: Profile Id
          schema:
            type: integer
            description: Profile Id
            format: int64
            example: 123456789
          required: true
        - name: transferId
          in: path
          description: Transfer Id
          schema:
            type: integer
            description: Transfer Id
            format: int64
            example: 16521632
          required: true
        - $ref: '#/components/parameters/X-External-Correlation-Id'
      responses:
        '200':
          description: Returns the originator transfer object.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetThirdPartyTransferResponseContent'
              examples:
                response-business-legalentity:
                  summary: BUSINESS Originator Response
                  value:
                    id: 16521632
                    originalTransferId: 54a6bc09-cef9-49a8-9041-f1f0c654cd88
                    user: 4342275
                    targetAccount: 8692237
                    sourceAccount: 1527389
                    quote: 8fa9be20-ba43-4b15-abbb-9424e1481050
                    status: cancelled
                    rate: 0.89
                    details:
                      reference: T475890
                    hasActiveIssues: false
                    sourceCurrency: EUR
                    sourceValue: 0
                    targetCurrency: GBP
                    targetValue: 150
                    originator:
                      legalEntityType: BUSINESS
                      name:
                        fullName: John Godspeed
                      reference: CST-2991992
                      businessRegistrationCode: 83920-546
                      businessRegistrationDate: '2020-01-15'
                      address:
                        firstLine: Salu tee 14
                        city: Tallinn
                        stateCode: ''
                        countryCode: EE
                        postCode: '12112'
                      accountDetails: '23456789'
                    created: '2025-10-29T12:28:16.000Z'
                response-private-legalentity:
                  summary: PRIVATE Originator Response
                  value:
                    id: 16521632
                    originalTransferId: 54a6bc09-cef9-49a8-9041-f1f0c654cd88
                    user: 4342275
                    targetAccount: 8692237
                    sourceAccount: 1527389
                    quote: 8fa9be20-ba43-4b15-abbb-9424e1481050
                    status: cancelled
                    rate: 0.89
                    details:
                      reference: Testing
                    hasActiveIssues: false
                    sourceCurrency: EUR
                    sourceValue: 0
                    targetCurrency: GBP
                    targetValue: 150
                    originator:
                      legalEntityType: PRIVATE
                      name:
                        givenName: John
                        middleNames:
                          - Ryan
                        familyName: Godspeed
                        patronymicName: Fitz
                      dateOfBirth: '1977-07-01'
                      nationality: EE
                      reference: CST-2991992
                      address:
                        firstLine: Salu tee 14
                        city: Tallinn
                        stateCode: ''
                        countryCode: EE
                        postCode: '12112'
                      accountDetails: '23456789'
                    created: '2025-10-29T12:28:16.000Z'
          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'
      security:
        - UserToken: []
      tags:
        - third-party-transfer
  /v3/profiles/{profileId}/transfers/{transferId}/payments:
    post:
      description: |2-

            {% 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.

            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.
            
      summary: Fund a Transfer
      operationId: transferFund
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/FundingRequest'
            examples:
              fund-transfer-balance:
                summary: BALANCE - Fund from a Wise balance (Pre-Funded Wise Balance)
                value:
                  type: BALANCE
                  balanceId: 45678901
              fund-transfer-trusted-pre-fund-bulk:
                summary: TRUSTED_PRE_FUND_BULK - Cross Currency Bulk Settlement
                value:
                  type: TRUSTED_PRE_FUND_BULK
                  partnerReference: PARTNER-REF-4711
              fund-transfer-trusted-pre-fund-tx:
                summary: TRUSTED_PRE_FUND_TX - Per-transaction trusted pre-fund
                value:
                  type: TRUSTED_PRE_FUND_TX
                  partnerReference: PARTNER-REF-4711
      parameters:
        - name: profileId
          in: path
          description: Profile Id
          schema:
            type: integer
            description: Profile Id
            format: int64
            example: 123456789
          required: true
        - name: transferId
          in: path
          description: Transfer Id
          schema:
            type: integer
            description: Transfer Id
            format: int64
            example: 16521632
          required: true
        - $ref: '#/components/parameters/X-External-Correlation-Id'
      responses:
        '201':
          description: FundTransfer 201 response
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/FundingResponse'
              examples:
                fund-transfer-balance-completed:
                  summary: BALANCE - completed
                  value:
                    type: BALANCE
                    status: COMPLETED
                    balanceTransactionId: 987654321
                fund-transfer-balance-rejected-insufficient-funds:
                  summary: BALANCE - rejected (insufficient funds)
                  value:
                    type: BALANCE
                    status: REJECTED
                    errorCode: balance.insufficient-funds
                fund-transfer-trusted-pre-fund-bulk-completed:
                  summary: TRUSTED_PRE_FUND_BULK - completed
                  value:
                    type: TRUSTED_PRE_FUND_BULK
                    status: COMPLETED
                    partnerReference: PARTNER-REF-4711
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '400':
          description: InvalidRequestError 400 response
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/InvalidRequestErrorErrorPayload'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '403':
          description: UnauthorisedAccessError 403 response
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/UnauthorisedAccessErrorErrorPayload'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '404':
          description: EntityNotFoundError 404 response
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/EntityNotFoundErrorErrorPayload'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '409':
          description: PaymentAlreadyExistsError 409 response
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/PaymentAlreadyExistsErrorErrorPayload'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
        '422':
          description: UnsupportedOperationError 422 response
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/UnsupportedOperationErrorErrorPayload'
          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: UnexpectedError 500 response
          content:
            text/plain:
              schema:
                $ref: '#/components/schemas/UnexpectedErrorErrorPayload'
          headers:
            X-External-Correlation-Id:
              $ref: '#/components/headers/X-External-Correlation-Id'
            x-trace-id:
              $ref: '#/components/headers/x-trace-id'
      security:
        - UserToken: []
        - PersonalToken: []
      tags:
        - transfer
  /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/legacy/webhook-event/eventtransfersstatechange).


        {% admonition type="info" %}

        If you service US retail consumers you must use the [US combined
        receipt](/api-reference/legacy/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/legacy/standard-transfer/transfercreate) or
        [Create a third party
        transfer](/api-reference/legacy/third-party-transfer/createthirdpartytransfer)
        instead.

        {% /admonition %}


        This is similar to the [Create a
        transfer](/api-reference/legacy/standard-transfer/transfercreate)
        endpoint, but the `originator` datablock is additionally required.


        You need to save the transfer ID for tracking its status later via
        webhooks.


        #### Avoiding duplicate transfers


        The `customerTransactionId` field is used to avoid duplicate transfer
        requests. If your initial call fails (error or timeout), retry the call
        using the same `customerTransactionId` value. Subsequent retry messages
        are treated as repeat messages and will not create duplicate transfers.
      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/legacy/sca-pin/ottpinverify)
        when accessing a strongly protected endpoint via [One Time Token
        Framework](/api-reference/legacy/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/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 <YOUR_JWT_HERE>' \
              -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: <JWE encrypted string>
      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/legacy/sca-facemaps/ottfacemapverify) when
        accessing a strongly protected endpoint via [One Time Token
        Framework](/api-reference/legacy/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/legacy/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/legacy/sca-device-fingerprints/ottdevicefingerprintverify)
        when clearing a [OTT](/api-reference/legacy/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/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 <YOUR_JWT_HERE>' \
              -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: <JWE encrypted string>
      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: <your profile ID>
                created_by:
                  type: user
                  id: <your 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: <your profile ID>
                  created_by:
                    type: user
                    id: <your 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: <your profile ID>
                  created_by:
                    type: user
                    id: <your 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: <your profile ID>
                created_by:
                  type: user
                  id: <your 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#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.


        * Event type: `transfers#active-cases`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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.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#refund:
    post:
      operationId: eventTransfersRefund
      summary: Transfer refund
      description: >
        This event provides information about refund amount and currency.
        Triggered every time a transfer's status becomes `funds_refunded`. 
            
        * Event type: `transfers#refund`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        {% admonition type="info" %}

        In sandbox, the refund amount in this webhook is simulated. It may not
        reflect the amount in account balances or the sandbox UI. See [Simulate
        transfer state
        change](/api-reference/legacy/simulation/simulationtransferstatechange#sandbox-refund)
        for details about sandbox refund behaviour.

        {% /admonition %}


        Each event contains a timestamp. Events may not be delivered in the
        order they occurred. Use `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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 Refund 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.
  transfers#payout-failure:
    post:
      operationId: eventTransfersPayoutFailure
      summary: Transfer payout failure
      description: >
        Triggered every time a payout fails. Use this event to get further
        information about a failed payment.


        * Event type: `transfers#payout-failure`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        **Additional info**:


        The
        [transfers#state-change](/api-reference/legacy/webhook-event/eventtransfersstatechange)
        event provides high level information about the state of transfers, but
        it doesn't provide details about payout failures.


        While a transfer is in `outgoing_payment_sent` state, the payout could
        fail for certain reasons. Additionally, not every payout failure will
        trigger a change in transfer state. For example a payout might fail with
        `MANDATE_NOT_FILLED_IN`, but the corresponding transfer might stay in
        the same state.


        We recommend processing both event types(`transfers#payout-failure` and
        `transfers#state-change`) separate from each other.


        For available failure reason codes and descriptions, see the [Payout
        failures guide](/guides/product/send-money/tracking/payout-failures).
        Note that Wise can add new failure codes so your system should be able
        to handle the events even if the failure reason code is not recognised.


        {% admonition type="info" %}

        To simulate payout failure in sandbox, use the [payout failure
        simulation
        endpoint](/api-reference/legacy/simulation/simulationtransferpayoutfailure).

        {% /admonition %}


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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 Payout Failure Event
              discriminator:
                propertyName: schema_version
                mapping:
                  5.0.0: '#/components/schemas/v5.0.0'
                  4.0.0: '#/components/schemas/v4.0.0-3'
                  2.0.0: '#/components/schemas/v2.0.0-3'
              oneOf:
                - $ref: '#/components/schemas/v5.0.0'
                - $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.
  transfers#state-change:
    post:
      operationId: eventTransfersStateChange
      summary: Transfer state change
      description: >
        Triggered every time a transfer's status is updated.


        * Event type: `transfers#state-change`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        {% admonition type="warning" %}

        For topup-to-balance transfers, `transfers#state-change` events are
        **not** triggered.

        To listen to these, subscribe to the `balances#update` event instead.

        {% /admonition %}


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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-4'
                  2.0.0: '#/components/schemas/v2.0.0-4'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-4'
                - $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.
  account-details-order#order-state-change:
    post:
      operationId: eventAccountDetailsOrderStateChange
      summary: Account details order state change
      description: >
        The event contains information about the order state and requirement
        state. Triggered when there is a change in the state of an account
        details order. 


        * Event type: `account-details-order#order-state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Possible values for an order:


        - `PENDING_USER`: One or more requirements has some pending action from
        the user.

        - `PENDING_TW`: One or more requirements has some pending action from
        Wise.

        - `REQUIREMENTS_FULFILLED`: All requirements are completed and pending
        account details to be created.

        - `DONE`: All requirements are completed and account details has also
        been created.


        {% img
          src="/images/diagrams/account-details-order-state-flow.png"
          alt="Create account details order statuses transition diagram"
        /%}


        Most common requirements:


        - `VERIFICATION`: The user needs to be fully verified before completing
        this requirement.


        Events may not be delivered in the order they occurred. Use
        `data.modification_time` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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 Order State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-5'
                  2.0.0: '#/components/schemas/v2.0.0-5'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-5'
                - $ref: '#/components/schemas/v2.0.0-5'
      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.    


        * Event type: `account-details-payment#state-change`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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-6'
                  2.0.0: '#/components/schemas/v2.0.0-6'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-6'
                - $ref: '#/components/schemas/v2.0.0-6'
      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#card-status-change:
    post:
      operationId: eventCardsCardStatusChange
      summary: Card status change
      description: >
        This event is triggered for the initial card status as well as any
        subsequent updates.


        * Event type: `cards#card-status-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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:
              title: Card Status Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-7'
                  2.0.0: '#/components/schemas/v2.0.0-7'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-7'
                - $ref: '#/components/schemas/v2.0.0-7'
      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#card-production-status-change:
    post:
      operationId: eventCardsCardProductionStatusChange
      summary: Card production status change
      description: >
        Triggered every time a card production status is updated. This webhook
        is solely used for physical cards with `KIOSK_COLLECTION` delivery
        method.


        For more details, see the [Card kiosk collection
        guide](/guides/product/issue-cards/card-kiosk-collection).


        * Event type: `cards#card-production-status-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - card-kiosk-collection
      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: Card Production Status Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-8'
                  2.0.0: '#/components/schemas/v2.0.0-8'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-8'
                - $ref: '#/components/schemas/v2.0.0-8'
      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#3ds-challenge:
    post:
      operationId: eventCards3dsChallenge
      summary: 3DS challenge
      description: >
        Triggered when a customer initiates a push notification for 3DS. The
        provided information can be used to send a push notification to the
        customer's mobile app.


        * Event type: `cards#3ds-challenge`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - 3ds
      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: 3DS Challenge Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-9'
                  2.0.0: '#/components/schemas/v2.0.0-9'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-9'
                - $ref: '#/components/schemas/v2.0.0-9'
      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#card-order-status-change:
    post:
      operationId: eventCardsCardOrderStatusChange
      summary: Card order status change
      description: >
        This event is triggered every time a card order status is updated.
        Statuses depend on the type of card (virtual/physical). Additional
        statuses related to delivery exist for physical cards.


        * Event type: `cards#card-order-status-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        **Available card order statuses**:


        The initial card order status is `PLACED` or `REQUIREMENTS_FULFILLED`
        depending on the requirement fulfillment state. The possible values are:

        - `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 is 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
        contact Wise Support to cancel a card order.

        - `RETURNED`: Delivery failed. The physical card has been returned and
        will be blocked (physical card only).


        {% img
          src="/images/diagrams/card-order-status-flow.png"
          alt="Create card order statuses transition diagram"
        /%}


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - card-order
      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: Card Order Status Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-10'
                  2.0.0: '#/components/schemas/v2.0.0-10'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-10'
                - $ref: '#/components/schemas/v2.0.0-10'
      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#transaction-state-change:
    post:
      operationId: eventCardsTransactionStateChange
      summary: Card transaction state change
      description: >
        Triggered whenever a new card transaction occurs or is modified.


        * Event type: `cards#transaction-state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        #### Transaction categorisation


        Transactions can be categorized based on the guidelines below, though
        the results may not always be consistent.


        * Active card check: `transaction_amount` is 0 or 1 and
        `merchant.category.code` does not equal `6011`.

        * ATM balance check: `transaction_amount` is 0 and
        `merchant.category.code` equals `6011`.

        * Pre-Authorisation: `is_amount_confirmed` is false and
        `transaction_state` equals `IN_PROGRESS`.


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - card-transaction
      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: Card Transaction State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-11'
                  2.1.0: '#/components/schemas/v2.1.0'
                  2.0.0: '#/components/schemas/v2.0.0-11'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-11'
                - $ref: '#/components/schemas/v2.1.0'
                - $ref: '#/components/schemas/v2.0.0-11'
      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.


        * Event type: `cards#manual-provisioning-verification`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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-12'
      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).


        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


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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-12'
            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.
  profiles#cdd-check-state-change:
    post:
      operationId: eventProfilesCddCheckStateChange
      summary: Additional verification state change
      description: >
        This event pushes updates for the [Additional Customer
        Verification](/guides/product/kyc/partner-kyc/additional-verification)
        process.


        * Event type: `profiles#cdd-check-state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        #### Verification state values


        | Code                  |
        Description                                                                 
        |

        |-----------------------|------------------------------------------------------------------------------|

        | `VERIFIED`            | Additional verification check has
        passed.                                    |

        | `EVIDENCE_REQUIRED`   | Additional verification check has failed,
        evidences are required .           |


        #### Review outcome values


        | Code                                     |
        Description                                                                 
        |

        |------------------------------------------|------------------------------------------------------------------------------|

        | `DOCUMENT_POOR_QUALITY`                    | Document quality
        poor.                                                       |

        | `DOCUMENT_OUT_OF_DATE`                     | Document out of
        date.                                                        |

        | `DOCUMENT_NAME_MISMATCH`                   | Name on document does not
        match records.                                     |

        | `DOCUMENT_MISSING_NAME`                    | Name on document
        missing.                                                    |

        | `DOCUMENT_MISSING_ISSUE_DATE`              | Document issue date
        missing.                                                 |

        | `DOCUMENT_MISSING_COMPANY_LOGO_LETTERHEAD` | Company logo or
        letterhead missing from document.                            |

        | `DOCUMENT_NOT_COMPLETE`                    | Document is partially
        cut-off and does not contain full information.         |

        | `DOCUMENT_MISSING_SIGNATURE`               | Document missing
        signature.                                                  |

        | `DOCUMENT_MISSING_INCOME`                  | Document missing income
        information or income is not clear from the document. |

        | `DOCUMENT_TYPE_UNACCEPTABLE`               | Submitted document type
        is not acceptable.                                   |

        | `INVOICE_UNACCEPTABLE`                     | Invoice is not an
        accepted document.                                         |

        | `PHOTO_ID_UNACCEPTABLE`                    | Photo ID is not an
        accepted document.                                        |

        | `TRANSACTION_UNACCEPTABLE`                 | Transaction (or a
        screenshot of a transaction) is not accepted.              |

        | `PHOTO_UNACCEPTABLE`                       | Photos (or computer
        screenshots) are not acceptable.                         |

        | `OTHER`                                    | Reason
        unknown.                                                              |


        #### Required evidence values


        See the [list of
        evidences](/guides/product/kyc/partner-kyc/supported-evidences) to find
        all possible values.


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - verification
      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: Additional Verification State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-13'
                  2.0.0: '#/components/schemas/v2.0.0-13'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-13'
                - $ref: '#/components/schemas/v2.0.0-13'
      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.
  profiles#overdraft-limit-threshold:
    post:
      operationId: eventProfilesOverdraftLimitThreshold
      summary: Overdraft limit threshold
      description: >
        Triggered when the overdraft limit usage has reached 70% threshold. The
        event at each threshold is triggered maximum once per hour.


        * Event type: `profiles#overdraft-limit-threshold`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - profile
      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: Overdraft Limit Threshold Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-14'
                  2.0.0: '#/components/schemas/v2.0.0-14'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-14'
                - $ref: '#/components/schemas/v2.0.0-14'
      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.
  profiles#state-change:
    post:
      operationId: eventProfilesStateChange
      summary: Profile state change
      description: >
        Triggered every time a profile's state is updated.


        * Event type: `profiles#state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - profile
      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: Profile State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-15'
                  2.0.0: '#/components/schemas/v2.0.0-15'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-15'
                - $ref: '#/components/schemas/v2.0.0-15'
      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.
  profiles#verification-state-change:
    post:
      operationId: eventProfilesVerificationStateChange
      summary: Verification state change
      description: >
        Triggered when the verification state of a connected profile changes.


        A profile's _verification state_ can be `verified` or `not_verified`.

        - If the state is `verified`, then the user is ready to make payments
        using Wise.

        - If the state is `not_verified`, then we advise not to initiate any
        transfers with the user's access token as the payments will not be
        processed until the verification is completed.


        * Event type: `profiles#verification-state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - profile
      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: Profile Verification State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-16'
                  2.0.0: '#/components/schemas/v2.0.0-16'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-16'
                - $ref: '#/components/schemas/v2.0.0-16'
      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.
  kyc-reviews#state-change:
    post:
      operationId: eventKycReviewsStateChange
      summary: KYC review state change
      description: >
        Triggered when a KYC review state has changed.


        {% admonition type="info" %}

        In previous versions, this event fired only when the overall KYC review
        state changed. In **v5.0.0**, it fires on every requirement or
        additional requirement state change, which may result in receiving more
        events. See `data.resource.prevState` and
        `data.resource.requirementChanges` for details on what changed.

        {% /admonition %}


        * Event type: `kyc-reviews#state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - kyc-review
      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: KYC Review State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  5.0.0: '#/components/schemas/v5.0.0-2'
                  4.0.0: '#/components/schemas/v4.0.0-17'
                  2.0.0: '#/components/schemas/v2.0.0-17'
              oneOf:
                - $ref: '#/components/schemas/v5.0.0-2'
                - $ref: '#/components/schemas/v4.0.0-17'
                - $ref: '#/components/schemas/v2.0.0-17'
      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.
  users#state-change:
    post:
      operationId: eventUsersStateChange
      summary: User state change
      description: >
        Triggered every time a user's state is updated.


        * Event type: `users#state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        **User state change transitions**:


        Possible `previous_state` and `current_state` values:

        - `ACTIVE`: The user's account is active.

        - `WITHDRAW_ONLY`: The user has 90 calendar days to remove their money
        from their balance before we fully close their account. This can be done
        through sending from their balance to themselves and others or spending
        with their card. The user still cannot order new cards, convert between
        balances, open and close balances, and download balance statements.
        After 90 calendar days, the account moves into a `DEACTIVATED` state.

        - `DEACTIVATED`: The user's account is deactivated and they cannot
        perform any actions on their account. The end-user tokens are revoked
        and you will receive a `401 Unauthorized` response for API calls.


        {% img src="/images/diagrams/user-deactivation-flow.png" alt="User state
        change flow diagram" /%}


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - user
      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: User State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-18'
                  2.0.0: '#/components/schemas/v2.0.0-18'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-18'
                - $ref: '#/components/schemas/v2.0.0-18'
      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.
  balances#update:
    post:
      operationId: eventBalancesUpdate
      summary: Balance update
      description: >
        Triggered every time a multi-currency account is credited or debited.


        * Event type: `balances#update`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order, and `data.step_id` to order
        events within a single transaction.

        For tracking events related to a single transaction such as a cancelled
        card transaction, use `data.step_id` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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:
              title: Balance Update Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-19'
                  3.0.0: '#/components/schemas/v3.0.0'
                  2.2.0: '#/components/schemas/v2.2.0'
                  2.1.0: '#/components/schemas/v2.1.0-2'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-19'
                - $ref: '#/components/schemas/v3.0.0'
                - $ref: '#/components/schemas/v2.2.0'
                - $ref: '#/components/schemas/v2.1.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.
  balances#account-state-change:
    post:
      operationId: eventBalancesAccountStateChange
      summary: Balance account state change
      description: >
        Triggered every time a balance account is activated or deactivated.


        * Event type: `balances#account-state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      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:
              title: Balance Account State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-20'
                  2.0.0: '#/components/schemas/v2.0.0-19'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-20'
                - $ref: '#/components/schemas/v2.0.0-19'
      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.
  balances#credit:
    post:
      deprecated: true
      operationId: eventBalancesCredit
      summary: Balance credit
      description: >
        Triggered every time a multi-currency account is credited.


        If you would like to subscribe to balance credit events, please use
        `balances#credit` when creating your subscription.


        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.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.


        * Event type: `balances#credit`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Not Supported


        {% admonition type="warning" %}

        New balance webhook is released. The new webhook is triggered every time
        a multi-currency account is credited or debited.

        For more information: [Balance update
        event](/api-reference/legacy/webhook-event/eventbalancesupdate).

        {% /admonition %}
      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:
              title: Balance Credit Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-21'
                  2.0.0: '#/components/schemas/v2.0.0-20'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-21'
                - $ref: '#/components/schemas/v2.0.0-20'
      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.
  batch-payment-initiations#state-change:
    post:
      operationId: eventBatchPaymentInitiationsStateChange
      summary: Batch payment initiations state change
      description: >
        Triggered when the payment initiation state of a batch group payment
        changes.


        The expected state of a batch payment initiation can be one of: 

        - `NEW`

        - `PROCESSING`

        - `COMPLETED`

        - `FAILED`

        - `CHARGED_BACK`


        * Event type: `batch-payment-initiations#state-change`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - batch-group
      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: Batch Payment Initiations State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-22'
                  2.0.0: '#/components/schemas/v2.0.0-21'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-22'
                - $ref: '#/components/schemas/v2.0.0-21'
      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.
  partner-support#case-changed:
    post:
      operationId: eventPartnerSupportCaseChanged
      summary: Partner support case changed
      description: >
        Triggered every time a case is updated, including if commented on or if
        the status is changed. Note that you will also receive a webhook
        response when you have created a new case or updated a case.


        {% admonition type="warning" name="Endpoint in BETA" %}

        As this endpoing is currently in beta, the information below may change.
        We will be adding in new types of cases, so ensure you handle additional
        undocumented types.

        {% /admonition %}


        * Event type: `partner-support#case-changed`

        * Profile level subscriptions: Not supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - case
      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: Partner Support Case Changed Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-23'
                  2.0.0: '#/components/schemas/v2.0.0-22'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-23'
                - $ref: '#/components/schemas/v2.0.0-22'
      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.
  swift-in#credit:
    post:
      operationId: eventSwiftInCredit
      summary: Swift receive credit
      description: >
        Triggered every time a SWIFT message is received and a credit is
        deposited into a balance account.


        If you also subscribe to `balances#credit` or `transfers#state-change`
        on the same profile or application, you may experience some duplication
        of webhook events. You should make allowances for this to handle it in
        your implementation.


        * Event type: `swift-in#credit`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
      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: Swift In Credit Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-24'
                  3.0.0: '#/components/schemas/v3.0.0-2'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-24'
                - $ref: '#/components/schemas/v3.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.
  swift#message-received:
    post:
      operationId: eventSwiftMessageReceived
      summary: Swift message received
      description: >
        Triggered when a SWIFT message (e.g.,
        [pacs.008](/guides/product/receive-money/incoming-transfer-notifications#example-pacs008-message-content))
        is received and processed by Wise on behalf of a partner.


        * Event type: `swift#message-received`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
      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: Swift Message Received Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-25'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-25'
      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.
  transaction-disputes#update:
    post:
      operationId: eventTransactionDisputesUpdate
      summary: Transaction disputes update
      description: >
        Triggered every time a transaction dispute is submitted or updated.


        You may receive update events even when there are no apparent changes in
        the dispute `status` or `subStatus`, as certain underlying modifications
        might not directly impact these visible indicators.


        * Event type: `transaction-disputes#update`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - disputes
      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: Transaction Disputes Update Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-26'
                  2.0.0: '#/components/schemas/v2.0.0-23'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-26'
                - $ref: '#/components/schemas/v2.0.0-23'
      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.
  bulk-settlement#payment-received:
    post:
      operationId: eventBulkSettlementPaymentReceived
      summary: Bulk settlement payment received
      description: >
        Triggered when a bulk settlement fund is received. Once there is a
        match, meaning the amount for this settlement journal is fully settled,
        the `amount_matched` is set to `true`. If it is not matched, check the
        difference between `source_amount` and `target_amount` to determine how
        much more needs to be paid.


        This event can also be triggered when our operations team reallocates
        funds between settlements. Therefore, the `received_amount` in version
        2.0.0 of the webhook is inaccurate. Please use the latest version,
        4.0.0. Version 2.0.0 is deprecated.


        * Event type: `bulk-settlement#payment-received`

        * Profile level subscriptions: Not Supported

        * Application level subscriptions: Supported


        Events may not be delivered in the order they occurred. Use
        `data.occurred_at` to reconcile the order.

        See the [Event ordering
        guide](/guides/developer/webhooks/event-ordering) for details.


        See the [Webhooks guide](/guides/developer/webhooks) for setup
        instructions, signature verification, and best practices.
      tags:
        - webhook-event
        - bulk-settlement
      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: Bulk Settlement Payment Received Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-27'
                  3.0.0: '#/components/schemas/v3.0.0-3'
                  2.0.0: '#/components/schemas/v2.0.0-24'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-27'
                - $ref: '#/components/schemas/v3.0.0-3'
                - $ref: '#/components/schemas/v2.0.0-24'
      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.
  recipients#state-change:
    post:
      operationId: eventRecipientsStateChange
      summary: Recipient state change
      description: >
        Triggered when a recipient account created or changed through hosted
        recipient creation changes state.

        See the [Embedded Flows
        guide](/guides/product/embedded-flows/index.md#hosted-recipient-creation-flow)
        for an example recipient creation flow.


        Events may not be delivered in the order they occurred. Use
        `data.resource.occurred_at` to reconcile the order.

        See the [Event Ordering](/guides/developer/webhooks/event-ordering)
        guide for details.


        * Event type: `recipients#state-change`

        * Profile level subscriptions: Supported

        * Application level subscriptions: Supported
      tags:
        - webhook-event
        - recipient
      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: Recipient State Change Event
              discriminator:
                propertyName: schema_version
                mapping:
                  4.0.0: '#/components/schemas/v4.0.0-28'
              oneOf:
                - $ref: '#/components/schemas/v4.0.0-28'
      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
  schemas:
    CurrencyCode:
      type: string
      description: ISO 4217 currency code
      pattern: ^[A-Z]{3}$
      example: USD
    Bic:
      description: Business Identifier Code, also known as Swift Code.
      type: string
      pattern: ^[A-Z]{4}[A-Z]{2}[A-Z0-9]{2}([A-Z0-9]{3})?$
    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:

            - `<strong>`: Indicates strong emphasis on words that the end user
            should pay attention to.

            - `<positive>`: Indicates a positive transaction (e.g., top up to
            balance is successful).

            - `<negative>`: Indicates a negative transaction (e.g., amount is
            deducted from a balance).

            - `<strikethrough>`: (Coming soon) Indicates the negation of an
            activity (e.g., transfer is cancelled).
          example: <strong>Test Payment</strong>
        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/legacy/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: >-
                            <p>IBAN stands for International Bank Account
                            Number.</p>
                        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. **Required** for physical cards.
            **Optional** for virtual cards (defaults to the profile address, if
            omitted). 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: >-
            Token of the card being replaced by this replacement card order.
            Nullable.
          example: 4dc0be88-903f-49e4-8237-735f1139e3dd
        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/legacy/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/legacy/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/legacy/card-transaction#card-transaction-decline-reasons)
            if applicable
          example: null
        detailedDeclineReason:
          type:
            - string
            - 'null'
          description: >-
            Code of the [detailed decline
            reason](/api-reference/legacy/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/legacy/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/legacy/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/legacy/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/legacy/card-transaction#card-transaction-decline-reasons)
            if applicable
          example: null
        detailedDeclineReason:
          type:
            - string
            - 'null'
          description: >-
            Code of the [detailed decline
            reason](/api-reference/legacy/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/legacy/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](/api-reference/legacy/kyc-review/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.

            - `VERIFIED` — the required information has been received and
            verified on our side. No action is needed.
          enum:
            - NOT_PROVIDED
            - IN_REVIEW
            - VERIFIED
          example: NOT_PROVIDED
        apiCollectionSupported:
          type: boolean
          description: >
            Indicates if the requirement can be provided via the [KYC
            Requirement
            Submit](/api-reference/legacy/kyc-review/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](/api-reference/legacy/kyc-review/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.

                  - `VERIFIED` — the required information has been received and
                  verified on our side. No action is needed.
                enum:
                  - NOT_PROVIDED
                  - IN_REVIEW
                  - VERIFIED
                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
        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'
    kyc-review-with-link:
      title: KYC Review with a Hosted KYC link
      description: >-
        The return object of the KYC Review Update endpoint, which includes
        information about the given KYC Review such as status, trigger
        references, a list of [KYC
        Requirements](/api-reference/legacy/kyc-review/kyc-requirement) as well
        as a linik to the [Hosted KYC](/guides/product/kyc/wise-kyc/hosted-kyc).
      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/legacy/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: Case ID. Generated by Wise.
          example: 123456789
        status:
          type: string
          description: '[Status of the case](/api-reference/legacy/case#case-statuses).'
          enum:
            - CREATING
            - OPEN
            - PENDING
            - SOLVED
            - CLOSED
          example: PENDING
        type:
          type: string
          description: Type of the 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 case was originally created.
          example: '2023-06-28T15:21:24.901'
        updatedAt:
          type: string
          format: date-time
          description: When the 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/product/kyc/business-categories).
          example: CONSULTING_IT_BUSINESS_SERVICES
        secondLevelCategory:
          type: string
          description: >-
            Secondary [business
            category](/guides/product/kyc/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'
    business-profile-industry-categories:
      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
        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.
        industryCategories:
          type: array
          minItems: 1
          description: >-
            One or more industry categories classifying the business. See
            [Business Categories](/guides/product/kyc/business-categories) for
            the full list of valid values.
          items:
            type: string
          example:
            - SOFTWARE_DEVELOPMENT_PUBLISHING
            - IT_CONSULTANCY_TECHNICAL_SUPPORT_SERVICES
        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
    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 (CNY, KRW, INR, IDR,
            EUR). See the [Recipient verification
            guides](/guides/product/send-money/recipient-verification) 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 (CNY, KRW, INR, IDR,
        EUR). See the [Recipient verification
        guides](/guides/product/send-money/recipient-verification) 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
    Address-2:
      type: object
      properties:
        addressFirstLine:
          type: string
          minLength: 1
          maxLength: 70
          description: 'Address line: street, house, apartment.'
        city:
          type: string
          minLength: 1
          maxLength: 140
          description: City name.
        postalCode:
          type: string
          minLength: 1
          maxLength: 16
          description: Postal code.
        stateCode:
          type: string
          minLength: 1
          maxLength: 16
          description: State code.
        country:
          type: string
          minLength: 2
          maxLength: 2
          pattern: ^[A-Z]{2}$
          description: Country code (ISO 3166-1 alpha-2).
    bank-transaction-import-request:
      $defs:
        Address:
          type: object
          properties:
            addressFirstLine:
              type: string
              minLength: 1
              maxLength: 70
              description: 'Address line: street, house, apartment.'
            city:
              type: string
              minLength: 1
              maxLength: 140
              description: City name.
            postalCode:
              type: string
              minLength: 1
              maxLength: 16
              description: Postal code.
            stateCode:
              type: string
              minLength: 1
              maxLength: 16
              description: State code.
            country:
              type: string
              minLength: 2
              maxLength: 2
              pattern: ^[A-Z]{2}$
              description: Country code (ISO 3166-1 alpha-2).
      type: object
      required:
        - currency
        - amount
      properties:
        currency:
          $ref: '#/components/schemas/CurrencyCode'
          description: >-
            The currency of the bank account details that you want to make
            payment to.
        amount:
          type: number
          exclusiveMinimum: 0
          description: The payment amount.
        reference:
          type: string
          maxLength: 255
          description: Custom payment reference to identify the payment.
          example: Test transfer
        senderName:
          type: string
          maxLength: 255
          description: Sender full name.
          example: Jane Doe
        senderBankCode:
          type: string
          maxLength: 255
          description: Sender bank code.
          example: '101019628'
        senderAccountNumber:
          type: string
          maxLength: 255
          description: Sender's bank account number.
          example: '1234567890'
        beneficiaryName:
          type: string
          maxLength: 255
          description: Beneficiary name - defaults to account holder name.
          example: John Doe
        senderAddress:
          maxLength: 255
          description: Sender address.
          $ref: '#/components/schemas/Address-2'
        beneficiaryAddress:
          description: Beneficiary address.
          $ref: '#/components/schemas/Address-2'
    Address-3:
      type: object
      properties:
        addressLine:
          type: string
          minLength: 1
          maxLength: 70
          description: 'Address line: street, house, apartment.'
        city:
          type: string
          minLength: 1
          maxLength: 140
          description: City name.
        postalCode:
          type: string
          minLength: 1
          maxLength: 16
          description: Postal code.
        country:
          type: string
          minLength: 2
          maxLength: 2
          pattern: ^[A-Z]{2}$
          description: Country code (ISO 3166-1 alpha-2).
    BankDetails:
      title: Bank details
      type: object
      anyOf:
        - title: BIC
          required:
            - bic
        - title: LEI
          required:
            - lei
        - title: Clearing system
          required:
            - clearingSystemCode
            - clearingSystemMemberId
        - title: Name and address
          required:
            - name
            - address
      properties:
        bic:
          $ref: '#/components/schemas/Bic'
          description: BIC of the sender's bank.
          example: DEUTDEDBFRA
        name:
          type: string
          minLength: 1
          description: Name of the sender's bank.
          example: Example Bank
        lei:
          type: string
          pattern: ^[A-Z0-9]{18,18}[0-9]{2,2}$
          minLength: 20
          maxLength: 20
          description: Legal Entity Identifier (LEI) of the sender bank.
          example: 5493001KJTIIGC8Y1R12
        clearingSystemCode:
          type: string
          maxLength: 5
          minLength: 1
          pattern: ^[A-Z0-9]+$
          description: >-
            Code identifying the clearing system in which the sender bank is
            registered.
          example: DEBLZ
        clearingSystemMemberId:
          type: string
          maxLength: 35
          minLength: 1
          pattern: ^[A-Z0-9]+$
          description: >-
            Identifier of the sender bank within the clearing system specified
            by `clearingSystemCode`.
          example: '50070010'
        address:
          description: Address of the sender's bank.
          allOf:
            - $ref: '#/components/schemas/Address-3'
            - type: object
              properties:
                addressLine:
                  example: 1 Bank Street
                city:
                  example: Frankfurt
                postalCode:
                  example: '60311'
                country:
                  example: DE
    swift-in-request:
      $defs:
        Address:
          type: object
          properties:
            addressLine:
              type: string
              minLength: 1
              maxLength: 70
              description: 'Address line: street, house, apartment.'
            city:
              type: string
              minLength: 1
              maxLength: 140
              description: City name.
            postalCode:
              type: string
              minLength: 1
              maxLength: 16
              description: Postal code.
            country:
              type: string
              minLength: 2
              maxLength: 2
              pattern: ^[A-Z]{2}$
              description: Country code (ISO 3166-1 alpha-2).
        BankDetails:
          title: Bank details
          type: object
          anyOf:
            - title: BIC
              required:
                - bic
            - title: LEI
              required:
                - lei
            - title: Clearing system
              required:
                - clearingSystemCode
                - clearingSystemMemberId
            - title: Name and address
              required:
                - name
                - address
          properties:
            bic:
              $ref: '#/components/schemas/Bic'
              description: BIC of the sender's bank.
              example: DEUTDEDBFRA
            name:
              type: string
              minLength: 1
              description: Name of the sender's bank.
              example: Example Bank
            lei:
              type: string
              pattern: ^[A-Z0-9]{18,18}[0-9]{2,2}$
              minLength: 20
              maxLength: 20
              description: Legal Entity Identifier (LEI) of the sender bank.
              example: 5493001KJTIIGC8Y1R12
            clearingSystemCode:
              type: string
              maxLength: 5
              minLength: 1
              pattern: ^[A-Z0-9]+$
              description: >-
                Code identifying the clearing system in which the sender bank is
                registered.
              example: DEBLZ
            clearingSystemMemberId:
              type: string
              maxLength: 35
              minLength: 1
              pattern: ^[A-Z0-9]+$
              description: >-
                Identifier of the sender bank within the clearing system
                specified by `clearingSystemCode`.
              example: '50070010'
            address:
              description: Address of the sender's bank.
              allOf:
                - $ref: '#/components/schemas/Address-3'
                - type: object
                  properties:
                    addressLine:
                      example: 1 Bank Street
                    city:
                      example: Frankfurt
                    postalCode:
                      example: '60311'
                    country:
                      example: DE
      type: object
      required:
        - currencyCode
        - amount
      dependentRequired:
        instructedCurrencyCode:
          - instructedAmount
      not:
        required:
          - senderBic
          - senderBank
      properties:
        currencyCode:
          $ref: '#/components/schemas/CurrencyCode'
          description: Currency received by Wise. 3-letter ISO currency code.
          example: EUR
        amount:
          type: number
          description: Amount received by Wise.
          exclusiveMinimum: 0
          example: 100
        instructedCurrencyCode:
          $ref: '#/components/schemas/CurrencyCode'
          description: >-
            Currency sent by the sender. 3-letter ISO currency code. If not
            provided, it is assumed to be the same as `currencyCode`.
          example: EUR
        instructedAmount:
          type: number
          description: >
            Amount sent by the sender.

            If not provided, it is assumed to be the same as `amount` plus
            **same currency** fees.

            Any outstanding fees in other currencies are ignored.


            Required if `instructedCurrencyCode` is provided.
          exclusiveMinimum: 0
          example: 101
        beneficiaryName:
          type: string
          minLength: 1
          maxLength: 140
          description: Name of the ultimate beneficiary.
          example: John Doe
        beneficiaryAccount:
          type: string
          description: >
            Account number of the ultimate beneficiary. It can be either a local
            account number or an IBAN.

            *If the provided IBAN resolves to a BIC that does not match any
            connected test BICs, simulation is not allowed and an error is
            returned.*
          example: '8599680548'
        beneficiaryAddress:
          description: Address of the ultimate beneficiary.
          allOf:
            - $ref: '#/components/schemas/Address-3'
            - type: object
              properties:
                addressLine:
                  example: 1234 Elm St, IL
                city:
                  example: Springfield
                postalCode:
                  example: '62704'
                country:
                  example: US
        senderName:
          type: string
          minLength: 1
          maxLength: 140
          description: Name of the sender.
          example: Jane Doe
        senderBic:
          $ref: '#/components/schemas/Bic'
          description: |
            BIC of the sender's bank.
            Cannot be provided together with `senderBank`.
        senderBank:
          $ref: '#/components/schemas/BankDetails'
          description: |
            Details of the sender's bank.
            Cannot be provided together with `senderBic`.
        senderAccount:
          type: string
          description: >-
            Account number of the sender. It can be either an IBAN or local
            account number.
          example: DE89370400440532013000
        senderAddress:
          description: Address of the sender.
          allOf:
            - $ref: '#/components/schemas/Address-3'
            - type: object
              properties:
                addressLine:
                  example: 5678 Oak St
                city:
                  example: Springfield
                postalCode:
                  example: '62704'
                country:
                  example: US
        paymentReference:
          type: string
          maxLength: 35
          description: Custom payment reference.
          example: Test123
        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.
                exclusiveMinimum: 0
                example: 1
              currency:
                $ref: '#/components/schemas/CurrencyCode'
                description: Fee currency. 3-letter ISO currency code.
                example: EUR
              agent:
                $ref: '#/components/schemas/Bic'
                description: BIC of the agent incurring the fee.
                example: DEUTDEDBFRA
        previousInstructingAgents:
          type: array
          maxItems: 3
          description: List of previous instructing agents. Maximum 3 items.
          items:
            $ref: '#/components/schemas/Bic'
            description: BIC of a previous instructing agent.
            example: COBADEFFXXX
    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/legacy/sca-ott/ottstatusget) to view challenges
        and their statuses, or use [create SCA
        session](/api-reference/legacy/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
    Details:
      type: object
      properties:
        reference:
          type: string
          maxLength: 250
          description: >-
            Recipient will see this reference text in their bank statement.
            Maximum allowed characters depends on the currency route.
                     [Business Payments Tips](https://wise.com/help/articles/2932870/tips-for-paying-invoices) for a full list
          example: T12789649
    Name:
      type: object
      description: Data block to capture the originator name details
      properties:
        givenName:
          type: string
          description: Payment originator first name
          example: John
        middleNames:
          type: array
          items:
            type: string
          maxItems: 10
          description: Payment originator middle name(s)
        familyName:
          type: string
          description: Payment originator family name
          example: Godspeed
        patronymicName:
          type: string
          description: Payment originator patronymic name
          example: Fitz
        fullName:
          type: string
          description: Payment originator full legal name
          example: John Godspeed
    Address-4:
      type: object
      properties:
        firstLine:
          type: string
          maxLength: 250
          minLength: 1
          pattern: \S
          description: Payment originator address first line
          example: Salu tee 14
        city:
          type: string
          maxLength: 250
          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)
          example: NY
        countryCode:
          type: string
          maxLength: 2
          minLength: 1
          pattern: \S
          description: Payment originator address country code ISO 3166-1 alpha-2
          example: EE
        postCode:
          type: string
          maxLength: 250
          description: Originator address zip code
          example: '12112'
      required:
        - countryCode
        - firstLine
    PrivateOriginator:
      type: object
      properties:
        reference:
          type: string
          minLength: 1
          pattern: \S
          description: >-
            Unique customer ID in your system. This allows us to uniquely
            identify each originator
          example: CST-2991992
        name:
          $ref: '#/components/schemas/Name'
          description: Data block to capture the originator name details
        dateOfBirth:
          type: string
          description: Payment originator date of birth
          format: date
          example: '1977-07-01'
          x-temporal-constraint: past
        nationality:
          type: string
          description: >-
            Payment originator nationality. Required for certain routes (e.g. to
            UGX)
          example: EE
        accountDetails:
          type: string
          description: Payment originator account number
          example: '23456789'
        address:
          $ref: '#/components/schemas/Address-4'
          description: Payment originator address
      required:
        - address
        - dateOfBirth
        - name
        - reference
    OriginatorMixin:
      type: object
      properties:
        legalEntityType:
          type: string
      required:
        - legalEntityType
    OriginatorPRIVATE:
      allOf:
        - $ref: '#/components/schemas/PrivateOriginator'
        - $ref: '#/components/schemas/OriginatorMixin'
    BusinessOriginator:
      type: object
      description: Data block to capture payment originator details for a business entity
      properties:
        reference:
          type: string
          minLength: 1
          pattern: \S
          description: >-
            Unique customer ID in your system. This allows us to uniquely
            identify each originator
          example: CST-2991992
        name:
          $ref: '#/components/schemas/Name'
          description: Data block to capture the originator name details
        businessRegistrationCode:
          type: string
          maxLength: 150
          description: Payment originator business registry number / incorporation number
          example: 83920-546
        businessRegistrationDate:
          type: string
          description: >-
            Payment originator business registration date. Required for certain
            routes (e.g. to UGX)
          format: date
          example: '2020-01-15'
          x-temporal-constraint: pastOrPresent
        accountDetails:
          type: string
          description: Payment originator account number
          example: '23456789'
        address:
          $ref: '#/components/schemas/Address-4'
          description: Payment originator address
      required:
        - address
        - name
        - reference
    OriginatorBUSINESS:
      allOf:
        - $ref: '#/components/schemas/BusinessOriginator'
        - $ref: '#/components/schemas/OriginatorMixin'
    Originator:
      oneOf:
        - $ref: '#/components/schemas/OriginatorPRIVATE'
        - $ref: '#/components/schemas/OriginatorBUSINESS'
      discriminator:
        propertyName: legalEntityType
        mapping:
          PRIVATE: '#/components/schemas/OriginatorPRIVATE'
          BUSINESS: '#/components/schemas/OriginatorBUSINESS'
    CreateThirdPartyTransferRequestContent:
      type: object
      properties:
        originalTransferId:
          type: string
          maxLength: 250
          minLength: 1
          pattern: \S
          description: >-
            Unique transfer ID in your system. We use this field also to perform
            idempotency check to avoid duplicate transfers in case of network
            failures or timeouts.
                You can only submit one transfer with same originalTransferId.
          example: '4711'
        targetAccount:
          type: integer
          description: Recipient account ID.
          format: int64
          example: 7839323
        sourceAccount:
          type: integer
          description: Refund recipient account ID.
          format: int64
          example: 1527389
        quote:
          type: string
          minLength: 1
          pattern: \S
          description: |-
            Quote ID. You can only create one transfer per one quote.
                You cannot use same quote ID to create multiple transfers.
          example: 3522e360-356a-4e37-9f99-94a21898d8fa
        details:
          $ref: '#/components/schemas/Details'
          description: Data block to capture payment details.
        originator:
          $ref: '#/components/schemas/Originator'
          description: Data block to capture payment originator details.
      required:
        - details
        - originalTransferId
        - originator
        - quote
        - targetAccount
    DetailsResponse:
      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.
                     [Business Payments Tips](https://wise.com/help/articles/2932870/tips-for-paying-invoices) for a full list
          example: T12789649
    LegalEntityTypeResponse:
      type: string
      enum:
        - PRIVATE
        - BUSINESS
    NameResponse:
      type: object
      description: Data block to capture the originator name details
      properties:
        givenName:
          type: string
          description: Payment originator first name
          example: John
        middleNames:
          type: array
          items:
            type: string
          description: Payment originator middle name(s)
          example:
            - Fitz
            - John
        familyName:
          type: string
          description: Payment originator family name
          example: Godspeed
        patronymicName:
          type: string
          description: Payment originator patronymic name
          example: Fitz
        fullName:
          type: string
          description: Payment originator full legal name
          example: John Godspeed
    AddressResponse:
      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
          description: >-
            Payment originator address state code. Required if address country
            code in (US, CA, BR, AU)
          example: NY
        countryCode:
          type: string
          pattern: ^[A-Z]{2}$
          description: Payment originator address country code ISO 3166-1 alpha-2
          example: EE
        postCode:
          type: string
          description: Originator address zip code
          example: '12112'
    OriginatorResponse:
      type: object
      properties:
        legalEntityType:
          $ref: '#/components/schemas/LegalEntityTypeResponse'
          description: Payment originator legal type
        reference:
          type: string
          description: >-
            Unique customer ID in your system. This allows us to uniquely
            identify each originator
          example: CST-2991992
        name:
          $ref: '#/components/schemas/NameResponse'
          description: Data block to capture the originator name details
        dateOfBirth:
          type: string
          description: Payment originator date of birth
          format: date
          example: '1977-07-01'
        nationality:
          type: string
          description: >-
            Payment originator nationality. Required for certain routes (e.g. to
            UGX)
          example: EE
        accountDetails:
          type: string
          description: Payment originator account number
          example: '23456789'
        address:
          $ref: '#/components/schemas/AddressResponse'
          description: Payment originator address
        businessRegistrationCode:
          type: string
          description: Payment originator business registry number / incorporation number
          example: 83920-546
        businessRegistrationDate:
          type: string
          description: >-
            Payment originator business registration date. Required for certain
            routes (e.g. to UGX)
          format: date
          example: '2020-01-15'
    CreateThirdPartyTransferResponseContent:
      type: object
      description: Returns the originator transfer object.
      properties:
        id:
          type: integer
          description: Transfer ID
          format: int64
          example: 16521632
        user:
          type: integer
          description: Your user ID
          format: int64
          example: 4342275
        targetAccount:
          type: integer
          description: Recipient account ID
          format: int64
          example: 8692237
        sourceAccount:
          type: integer
          description: Refund recipient account ID
          format: int64
          example: 1527389
        quote:
          type: string
          description: Quote ID
          example: 8fa9be20-ba43-4b15-abbb-9424e1481050
        status:
          type: string
          description: >-
            Transfer current status. See [Tracking
            Transfers](https://docs.wise.com/guides/product/send-money/tracking-transfers)
            for all possible statuses.
          example: cancelled
        rate:
          type: number
          description: Exchange rate value
          format: decimal
          example: 0.89
        details:
          $ref: '#/components/schemas/DetailsResponse'
          description: Payment Details
        originator:
          $ref: '#/components/schemas/OriginatorResponse'
          description: Data block to capture payment originator details
        hasActiveIssues:
          type: boolean
          description: Are there any pending issues which stop executing the transfer?
          example: false
        sourceCurrency:
          type: string
          maxLength: 3
          minLength: 3
          pattern: ^[A-Z]{3}$
          description: Source currency code
          example: EUR
        sourceValue:
          type: number
          minimum: 0
          exclusiveMinimum: 0
          description: Transfer amount in source currency
          format: decimal
          example: 0
        targetCurrency:
          type: string
          maxLength: 3
          minLength: 3
          pattern: ^[A-Z]{3}$
          description: Target currency code
          example: GBP
        targetValue:
          type: number
          minimum: 0
          exclusiveMinimum: 0
          description: Transfer amount in target currency
          format: decimal
          example: 150
        originalTransferId:
          type: string
          description: >-
            Unique identifier randomly generated per transfer request by the
            calling client
          example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88
        created:
          type: string
          description: Timestamp when transfer was created.
          format: date-time
          example: '2025-10-29T12:28:16.000Z'
    GetThirdPartyTransferResponseContent:
      type: object
      description: Returns the originator transfer object.
      properties:
        id:
          type: integer
          description: Transfer ID
          format: int64
          example: 16521632
        user:
          type: integer
          description: Your user ID
          format: int64
          example: 4342275
        targetAccount:
          type: integer
          description: Recipient account ID
          format: int64
          example: 8692237
        sourceAccount:
          type: integer
          description: Refund recipient account ID
          format: int64
          example: 1527389
        quote:
          type: string
          description: Quote ID
          example: 8fa9be20-ba43-4b15-abbb-9424e1481050
        status:
          type: string
          description: >-
            Transfer current status. See [Tracking
            Transfers](https://docs.wise.com/guides/product/send-money/tracking-transfers)
            for all possible statuses.
          example: cancelled
        rate:
          type: number
          minimum: 0
          exclusiveMinimum: 0
          description: Exchange rate value
          format: decimal
          example: 0.89
        details:
          $ref: '#/components/schemas/DetailsResponse'
          description: Payment Details
        originator:
          $ref: '#/components/schemas/OriginatorResponse'
          description: Data block to capture payment originator details
        hasActiveIssues:
          type: boolean
          description: Are there any pending issues which stop executing the transfer?
          example: false
        sourceCurrency:
          type: string
          maxLength: 3
          minLength: 3
          pattern: ^[A-Z]{3}$
          description: Source currency code
          example: EUR
        sourceValue:
          type: number
          minimum: 0
          exclusiveMinimum: 0
          description: Transfer amount in source currency
          format: decimal
          example: 0
        targetCurrency:
          type: string
          maxLength: 3
          minLength: 3
          pattern: ^[A-Z]{3}$
          description: Target currency code
          example: GBP
        targetValue:
          type: number
          minimum: 0
          exclusiveMinimum: 0
          description: Transfer amount in target currency
          format: decimal
          example: 150
        originalTransferId:
          type: string
          description: >-
            Unique identifier randomly generated per transfer request by the
            calling client
          example: 54a6bc09-cef9-49a8-9041-f1f0c654cd88
        created:
          type: string
          description: Timestamp when transfer was created.
          format: date-time
          example: '2025-10-29T12:28:16.000Z'
    BalanceRequest:
      type: object
      properties:
        balanceId:
          type: integer
          description: ID of the balance to debit.
          format: int64
          example: 45678901
    FundingRequestMixin:
      type: object
      properties:
        type:
          type: string
      required:
        - type
    FundingRequestBalance:
      allOf:
        - $ref: '#/components/schemas/BalanceRequest'
        - $ref: '#/components/schemas/FundingRequestMixin'
    TrustedPreFundRequest:
      type: object
      properties:
        partnerReference:
          type: string
          description: >-
            The transaction/payment identifier in your system. Required for the
            Cross Currency Bulk Settlement model.
          example: PARTNER-REF-4711
        status:
          type: string
          description: Internal status field.
          example: COMPLETE
    FundingRequestTrustedPreFundBulk:
      allOf:
        - $ref: '#/components/schemas/TrustedPreFundRequest'
        - $ref: '#/components/schemas/FundingRequestMixin'
    FundingRequestTrustedPreFund:
      allOf:
        - $ref: '#/components/schemas/TrustedPreFundRequest'
        - $ref: '#/components/schemas/FundingRequestMixin'
    FundingRequest:
      oneOf:
        - $ref: '#/components/schemas/FundingRequestBalance'
        - $ref: '#/components/schemas/FundingRequestTrustedPreFundBulk'
        - $ref: '#/components/schemas/FundingRequestTrustedPreFund'
      discriminator:
        propertyName: type
        mapping:
          BALANCE: '#/components/schemas/FundingRequestBalance'
          TRUSTED_PRE_FUND_BULK: '#/components/schemas/FundingRequestTrustedPreFundBulk'
          TRUSTED_PRE_FUND_TX: '#/components/schemas/FundingRequestTrustedPreFund'
    FundingStatus:
      type: string
      description: Outcome of a funding attempt.
      enum:
        - CREATED
        - COMPLETED
        - REJECTED
    FundingErrorCode:
      type: string
      description: >-
        Machine-readable error code returned with `status: REJECTED`. Each
        member's documentation notes the `type` values that can produce it and
        the underlying HTTP status.

            This is the complete set of error codes the API can return today. Consumers should treat unknown codes defensively (new codes may be added); a wildcard fallback to a generic 'funding failed' UI is recommended.
      enum:
        - transfer.not-found
        - transfer.invalid-state
        - payment.exists
        - transfer.not-accessible-for-user
        - balance.unauthorised.missing-security-role
        - payment.not-found
        - invalid.request
        - unexpected.error
        - payment.option-unavailable
        - balance.payment-option-unavailable
        - balance.account-not-found
        - balance.account-inactive
        - balance.insufficient-funds
        - balance.no-balance-for-currency
        - balance.currency-unsupported
        - trustedprefundbulk.payment-option-unavailable
        - trustedprefundtx.payment-option-unavailable
    BalanceResponse:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/FundingStatus'
          description: Outcome of the funding attempt.
        errorCode:
          $ref: '#/components/schemas/FundingErrorCode'
          description: Machine-readable error code. Present if `status = REJECTED`.
        errorMessage:
          type: string
          description: >-
            Free-form human-readable explanation of a `REJECTED` outcome.
            Suitable for logging and developer-facing tools; not localised and
            not safe to surface to end users. May be absent.
          example: Transfer not found
        balanceTransactionId:
          type: integer
          description: ID of the balance transaction created to settle the transfer.
          format: int64
          example: 987654321
    FundingResponseMixin:
      type: object
      properties:
        type:
          type: string
      required:
        - type
    FundingResponseBalance:
      allOf:
        - $ref: '#/components/schemas/BalanceResponse'
        - $ref: '#/components/schemas/FundingResponseMixin'
    TrustedPreFundResponse:
      type: object
      properties:
        status:
          $ref: '#/components/schemas/FundingStatus'
          description: Outcome of the funding attempt.
        errorCode:
          $ref: '#/components/schemas/FundingErrorCode'
          description: Machine-readable error code. Present if `status = REJECTED`.
        errorMessage:
          type: string
          description: >-
            Free-form human-readable explanation of a `REJECTED` outcome.
            Suitable for logging and developer-facing tools; not localised and
            not safe to surface to end users. May be absent.
          example: Transfer not found
        partnerReference:
          type: string
          description: Partner-supplied reference echoed back.
          example: PARTNER-REF-4711
    FundingResponseTrustedPreFundBulk:
      allOf:
        - $ref: '#/components/schemas/TrustedPreFundResponse'
        - $ref: '#/components/schemas/FundingResponseMixin'
    FundingResponseTrustedPreFund:
      allOf:
        - $ref: '#/components/schemas/TrustedPreFundResponse'
        - $ref: '#/components/schemas/FundingResponseMixin'
    FundingResponse:
      oneOf:
        - $ref: '#/components/schemas/FundingResponseBalance'
        - $ref: '#/components/schemas/FundingResponseTrustedPreFundBulk'
        - $ref: '#/components/schemas/FundingResponseTrustedPreFund'
      discriminator:
        propertyName: type
        mapping:
          BALANCE: '#/components/schemas/FundingResponseBalance'
          TRUSTED_PRE_FUND_BULK: '#/components/schemas/FundingResponseTrustedPreFundBulk'
          TRUSTED_PRE_FUND_TX: '#/components/schemas/FundingResponseTrustedPreFund'
    InvalidRequestErrorErrorPayload:
      type: string
      example: transfer.not-found
    UnauthorisedAccessErrorErrorPayload:
      type: string
      example: transfer.not-found
    EntityNotFoundErrorErrorPayload:
      type: string
      example: transfer.not-found
    PaymentAlreadyExistsErrorErrorPayload:
      type: string
      example: transfer.not-found
    UnsupportedOperationErrorErrorPayload:
      type: string
      example: transfer.not-found
    UnexpectedErrorErrorPayload:
      type: string
      example: transfer.not-found
    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](/api-reference/legacy/webhook-event).
          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: <your client key>
        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: <your client ID>
        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](/api-reference/legacy/webhook-event).
          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/legacy/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:
      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/legacy/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-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/legacy/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#refund
        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:
                type:
                  type: string
                  description: Transfer resource type (always `transfer`).
                  example: transfer
                id:
                  type: integer
                  format: int64
                  description: ID of the transfer.
                  example: 111
                profile_id:
                  type: integer
                  format: int64
                  description: Identifies the Wise profile associated with this refund.
                  example: 222
                account_id:
                  type: integer
                  format: int64
                  description: >-
                    ID referring to the initial beneficiary of the payment. The
                    ultimate beneficiary is the sender the funds are being
                    refunded to.
                  example: 333
                refund_amount:
                  type: number
                  format: double
                  description: >-
                    The total amount that was refunded to the customer. Includes
                    any applicable fees.
                  example: 5000
                refund_currency:
                  type: string
                  description: >-
                    The three-letter ISO currency code representing the currency
                    in which the refund was issued.
                  example: EUR
            occurred_at:
              type: string
              format: date-time
              description: The date and time the refund was triggered.
              example: '2024-01-01T12:34:56.789Z'
    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/legacy/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#refund
        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:
                type:
                  type: string
                  description: Transfer resource type (always `transfer`).
                  example: transfer
                id:
                  type: integer
                  format: int64
                  description: ID of the transfer.
                  example: 111
                profile_id:
                  type: integer
                  format: int64
                  description: Identifies the Wise profile associated with this refund.
                  example: 222
                account_id:
                  type: integer
                  format: int64
                  description: >-
                    ID referring to the initial beneficiary of the payment. The
                    ultimate beneficiary is the sender the funds are being
                    refunded to.
                  example: 333
                refund_amount:
                  type: number
                  format: double
                  description: >-
                    The total amount that was refunded to the customer. Includes
                    any applicable fees.
                  example: 5000
                refund_currency:
                  type: string
                  description: >-
                    The three-letter ISO currency code representing the currency
                    in which the refund was issued.
                  example: EUR
            occurred_at:
              type: string
              format: date-time
              description: The date and time the refund was triggered.
              example: '2024-01-01T12:34:56Z'
    v5.0.0:
      title: Schema version 5.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/legacy/webhook).
          enum:
            - 5.0.0
          example: 5.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#payout-failure
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-08-10T10:17:28.123Z'
        data:
          type: object
          properties:
            transfer_id:
              type: integer
              format: int64
              description: ID of the transfer.
              example: 111
            profile_id:
              type: integer
              format: int64
              description: ID of the profile that initiated the transfer.
              example: 222
            failure_reason_code:
              type: string
              description: >-
                Code of the failure error. See [Payout
                failures](/guides/product/send-money/tracking/payout-failures)
                for available codes.
              example: WRONG_ID_NUMBER
              enum:
                - ACCOUNT_BLOCKED
                - ACCOUNT_CLOSED
                - ACCOUNT_DOES_NOT_EXIST
                - ACCOUNT_FROZEN
                - ACCOUNT_LIMIT_REACHED
                - BUSINESS_PAYMENTS_FORBIDDEN
                - CANNOT_ACCEPT_FROM_3RD_PARTY
                - CREDITING_ACCOUNT_FORBIDDEN
                - DUPLICATE_ENTRY
                - EXTERNAL_IDENTIFIER_DETAILS_HAVE_CHANGED
                - FUNDS_NOT_EXPECTED_RETURNED
                - MANDATE_NOT_FILLED_IN
                - REASON_NOT_SPECIFIED
                - REQUEST_FOR_INFORMATION_EXPIRED
                - RETURN_REQUESTED_BY_RECIPIENT
                - SENDER_REQUESTED_TO_CANCEL
                - TAX_ID_NOT_MATCHING
                - TAX_ID_SUSPENDED
                - TECHNICAL_ISSUE
                - TECHNICAL_ISSUE_RETRYABLE
                - WRONG_ACCOUNT_DETAILS
                - WRONG_ACCOUNT_NUMBER
                - WRONG_ACCOUNT_TYPE
                - WRONG_BANK_CODE
                - WRONG_BRANCH_CODE
                - WRONG_CARD_NUMBER
                - WRONG_CARD_TYPE
                - WRONG_CURRENCY
                - WRONG_ID_NUMBER
                - WRONG_NAME
                - WRONG_PHONE_NUMBER
                - WRONG_REFERENCE
                - WRONG_PAYMENT_PURPOSE
                - WRONG_RUT_NUMBER
            failure_description:
              type: string
              description: >-
                Description of the failure code. See [Payout
                failures](/guides/product/send-money/tracking/payout-failures)
                for available descriptions.
              example: Invalid recipient's ID document number
            occurred_at:
              type: string
              format: date-time
              description: When the state change occurred.
              example: '2023-08-10T10:17:23.123Z'
    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/legacy/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#payout-failure
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-08-10T10:17:28.123Z'
        data:
          type: object
          properties:
            transfer_id:
              type: integer
              format: int64
              description: ID of the transfer.
              example: 111
            profile_id:
              type: integer
              format: int64
              description: ID of the profile that initiated the transfer.
              example: 222
            failure_reason_code:
              type: string
              description: >-
                Code of the failure error. See [Payout
                failures](/guides/product/send-money/tracking/payout-failures)
                for available codes.
              example: WRONG_ID_NUMBER
            failure_description:
              type: string
              description: >-
                Description of the failure code. See [Payout
                failures](/guides/product/send-money/tracking/payout-failures)
                for available descriptions.
              example: Invalid recipient's ID document number
            occurred_at:
              type: string
              format: date-time
              description: When the state change occurred.
              example: '2023-08-10T10:17:23.123Z'
    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/legacy/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#payout-failure
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-08-10T10:17:28Z'
        data:
          type: object
          properties:
            transfer_id:
              type: integer
              format: int64
              description: ID of the transfer.
              example: 111
            profile_id:
              type: integer
              format: int64
              description: ID of the profile that initiated the transfer.
              example: 222
            failure_reason_code:
              type: string
              description: >-
                Code of the failure error. See [Payout
                failures](/guides/product/send-money/tracking/payout-failures)
                for available codes.
              example: WRONG_ID_NUMBER
            failure_description:
              type: string
              description: >-
                Description of the failure code. See [Payout
                failures](/guides/product/send-money/tracking/payout-failures)
                for available descriptions.
              example: Invalid recipient's ID document number
            occurred_at:
              type: string
              format: date-time
              description: When the state change occurred.
              example: '2023-08-10T10:17:23.000+00:00'
    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/legacy/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-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/legacy/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-5:
      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/legacy/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: 01989c58-7171-7276-9a4c-c9b4cefc0897
        event_type:
          type: string
          description: Event type identifier
          example: account-details-order#order-state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2025-08-08T07:49:31.123Z'
        data:
          type: object
          properties:
            creation_time:
              type: string
              format: date-time
              description: When the order was created.
              example: '2025-08-08T07:49:27.456Z'
            currency:
              type: string
              description: Currency code for the account details order.
              example: CAD
            is_account_details_issued:
              type: boolean
              description: Whether account details have been issued for this order.
              example: false
            modification_time:
              type: string
              format: date-time
              description: When the order was last modified.
              example: '2025-08-08T07:49:30.789Z'
            order_id:
              type: string
              description: Unique identifier for the account details order.
              example: 01989c58-45e4-71dd-9373-7d999e992f99
            order_status:
              type: string
              description: Current status of the order
              enum:
                - PENDING_USER
                - PENDING_TW
                - REQUIREMENTS_FULFILLED
                - DONE
              example: REQUIREMENTS_FULFILLED
            profile_id:
              type: integer
              format: int64
              description: ID of the profile associated with this order.
              example: 28835473
            requirements:
              type: array
              description: List of requirements for this order.
              items:
                type: object
                properties:
                  status:
                    type: string
                    description: >-
                      Status of the individual requirement (`"DONE"`,
                      `"PENDING"`, etc.)
                    example: DONE
                  type:
                    type: string
                    description: Type of requirement (`"VERIFICATION"`)
                    example: VERIFICATION
    v2.0.0-5:
      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/legacy/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: 01989c58-7171-7276-9a4c-c9b4cefc0897
        event_type:
          type: string
          description: Event type identifier
          example: account-details-order#order-state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2025-08-08T07:49:31Z'
        data:
          type: object
          properties:
            creation_time:
              type: string
              format: date-time
              description: When the order was created.
              example: '2025-08-08T07:49:27Z'
            currency:
              type: string
              description: Currency code for the account details order.
              example: CAD
            is_account_details_issued:
              type: boolean
              description: Whether account details have been issued for this order.
              example: false
            modification_time:
              type: string
              format: date-time
              description: When the order was last modified.
              example: '2025-08-08T07:49:30Z'
            order_id:
              type: string
              description: Unique identifier for the account details order.
              example: 01989c58-45e4-71dd-9373-7d999e992f99
            order_status:
              type: string
              description: Current status of the order.
              enum:
                - PENDING_USER
                - PENDING_TW
                - REQUIREMENTS_FULFILLED
                - DONE
              example: REQUIREMENTS_FULFILLED
            profile_id:
              type: integer
              format: int64
              description: ID of the profile associated with this order.
              example: 28835473
            requirements:
              type: array
              description: List of requirements for this order.
              items:
                type: object
                properties:
                  status:
                    type: string
                    description: >-
                      Status of the individual requirement (`"DONE"`,
                      `"PENDING"`, etc.)
                    example: DONE
                  type:
                    type: string
                    description: Type of requirement (`"VERIFICATION"`)
                    example: VERIFICATION
    v4.0.0-6:
      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/legacy/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-6:
      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/legacy/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'
    v4.0.0-7:
      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/legacy/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: ABCD-1234-ABCD-1234-ABCD
        event_type:
          type: string
          description: Event type identifier
          example: cards#card-status-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2022-08-22T07:59:50.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 123456
                client_id:
                  type: string
                  description: Your api_client_id
                  example: your-bank
                card_token:
                  type: string
                  description: Unique identifier of the card.
                  example: ABCD-1234-ABCD-1234-ABCD
                type:
                  type: string
                  description: Resource type (always `card`)
                  example: card
            card_status:
              type: string
              description: >
                The updated card status. Possible values:

                - `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 "blocked", but temporarily.

                - `PARTNER_SUSPENDED` - Card is suspended by Wise temporarily
                due to, for example, fraud reasons.

                - `EXPIRED` - Card is expired.

                - `PURGED` - The cardhoder data (ex: PAN, PIN) have been purged
                after exceeds the retention period (555 days after the card's
                expiry date).
              example: FROZEN
            changed_by:
              type: string
              description: >
                The identifier of the entity that updated the card status. If
                changed by Wise, the value is set to `internal_system`,

                otherwise, it is set to your `api_client_id`.
              example: internal_system
            occurred_at:
              type: string
              format: date-time
              description: When the card status change occurred.
              example: '2022-08-22T07:49:50.789Z'
    v2.0.0-7:
      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/legacy/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: ABCD-1234-ABCD-1234-ABCD
        event_type:
          type: string
          description: Event type identifier
          example: cards#card-status-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2022-08-22T07:59:50Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 123456
                client_id:
                  type: string
                  description: Your api_client_id
                  example: your-bank
                card_token:
                  type: string
                  description: Unique identifier of the card.
                  example: ABCD-1234-ABCD-1234-ABCD
                type:
                  type: string
                  description: Resource type (always `card`)
                  example: card
            card_status:
              type: string
              description: >
                The updated card status. Possible values:

                - `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 "blocked", but temporarily.

                - `PARTNER_SUSPENDED` - Card is suspended by Wise temporarily
                due to, for example, fraud reasons.

                - `EXPIRED` - Card is expired.

                - `PURGED` - The cardholder data (ex: PAN, PIN) have been purged
                after exceeds the retention period (555 days after the card's
                expiry date).
              example: FROZEN
            changed_by:
              type: string
              description: >
                The identifier of the entity that updated the card status. If
                changed by Wise, the value is set to `internal_system`,

                otherwise, it is set to your `api_client_id`.
              example: internal_system
            occurred_at:
              type: string
              format: date-time
              description: When the card status change occurred.
              example: '2022-08-22T07:49:50Z'
    v4.0.0-8:
      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/legacy/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: cards#card-production-status-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:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 123456
                type:
                  type: string
                  description: Webhook notification of type 'card'.
                  example: card
                client_id:
                  type: string
                  description: API `client_id`
                  example: your-bank
                card_token:
                  type:
                    - string
                    - 'null'
                  description: Unique identifier of the card.
                  example: 35050a4a-9521-426e-8109-1396e3687a3e
            status:
              type: string
              description: >
                Current production status. See possible values in the
                [production status flow
                diagram](/api-reference/legacy/card-kiosk-collection#production-status-flow).
              example: PRODUCED
            kiosk_id:
              type:
                - string
                - 'null'
              description: >-
                Identifier that specifies which kiosk machine is producing the
                card.
              example: WIS00001
            occurred_at:
              type: string
              format: date-time
              description: >-
                Time when the card production request was sent to the kiosk
                machine.
              example: '2024-01-01T12:24:56.789Z'
            error_code:
              type:
                - string
                - 'null'
              description: >
                Code returned when card production is not successful. See
                possible values in [production
                errors](/api-reference/legacy/card-kiosk-collection/cardkioskcollectionproduce).
              example: null
            description:
              type: string
              description: Detailed description of the error code.
              example: Card produced
    v2.0.0-8:
      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/legacy/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: cards#card-production-status-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:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 123456
                type:
                  type: string
                  description: Webhook notification of type 'card'.
                  example: card
                client_id:
                  type: string
                  description: API `client_id`
                  example: your-bank
                card_token:
                  type:
                    - string
                    - 'null'
                  description: Unique identifier of the card.
                  example: 35050a4a-9521-426e-8109-1396e3687a3e
            status:
              type: string
              description: >
                Current production status. See possible values in the
                [production status flow
                diagram](/api-reference/legacy/card-kiosk-collection#production-status-flow).
              example: PRODUCED
            kiosk_id:
              type:
                - string
                - 'null'
              description: >-
                Identifier that specifies which kiosk machine is producing the
                card.
              example: WIS00001
            occurred_at:
              type: string
              format: date-time
              description: >-
                Time when the card production request was sent to the kiosk
                machine.
              example: '2024-01-01T12:24:56Z'
            error_code:
              type:
                - string
                - 'null'
              description: >
                Code returned when card production is not successful. See
                possible values in [production
                errors](/api-reference/legacy/card-kiosk-collection/cardkioskcollectionproduce).
              example: null
            description:
              type: string
              description: Detailed description of the error code.
              example: Card produced
    v4.0.0-9:
      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/legacy/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: ec6d37c2-4611-457a-b210-d1a5f4e354c7
        event_type:
          type: string
          description: Event type identifier
          example: cards#3ds-challenge
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2024-09-05T06:47:15.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                client_id:
                  type: string
                  description: Your `api_client_id`
                  example: tw-test-card-issuance
                card_token:
                  type: string
                  description: Card token
                  example: 3ab81206-d258-4caf-cea5-60067ba82404
                profile_id:
                  type: integer
                  format: int64
                  description: Profile ID
                  example: 29751964
                type:
                  type: string
                  description: Resource type (always `card`).
                  example: card
            challenge_expires_after:
              type: integer
              format: int64
              description: The number of seconds before the challenge expires.
              example: 300
            occurred_at:
              type: string
              format: date-time
              description: When the challenge is triggered.
              example: '2024-09-05T06:47:15.789Z'
            challenge_method:
              type: string
              description: The challenge method chosen by customer (always `PUSH`).
              example: PUSH
            transaction:
              type: object
              properties:
                reference:
                  type: string
                  description: >-
                    Transaction reference. You should use this field when
                    notifying us of the challenge result.
                  example: '148990660'
                channel:
                  type: string
                  description: User agent (usually `browser` or `app`).
                  example: browser
                merchant:
                  type: object
                  properties:
                    category:
                      type:
                        - string
                        - 'null'
                      description: Merchant category code
                      example: null
                    country:
                      type: string
                      description: Merchant country. Follows ISO 3166-1 alpha-2 standard.
                      example: AD
                    name:
                      type: string
                      description: Merchant name
                      example: Cards API BBT
                    url:
                      type:
                        - string
                        - 'null'
                      description: Merchant url
                      example: http://intrepid-fav.net
                money_value:
                  type: object
                  properties:
                    value:
                      type: number
                      format: decimal
                      description: Transaction amount
                      example: 100
                    currency:
                      type: string
                      description: Currency code
                      example: EUR
    v2.0.0-9:
      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/legacy/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: ec6d37c2-4611-457a-b210-d1a5f4e354c7
        event_type:
          type: string
          description: Event type identifier
          example: cards#3ds-challenge
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2024-09-05T06:47:15Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                client_id:
                  type: string
                  description: Your `api_client_id`
                  example: tw-test-card-issuance
                card_token:
                  type: string
                  description: Card token
                  example: 3ab81206-d258-4caf-cea5-60067ba82404
                profile_id:
                  type: integer
                  format: int64
                  description: Profile ID
                  example: 29751964
                type:
                  type: string
                  description: Resource type (always `card`).
                  example: card
            challenge_expires_after:
              type: integer
              format: int64
              description: The number of seconds before the challenge expires.
              example: 300
            occurred_at:
              type: string
              format: date-time
              description: When the challenge is triggered.
              example: '2024-09-05T06:47:15Z'
            challenge_method:
              type: string
              description: The challenge method chosen by customer (always `PUSH`).
              example: PUSH
            transaction:
              type: object
              properties:
                reference:
                  type: string
                  description: >-
                    Transaction reference. You should use this field when
                    notifying us of the challenge result.
                  example: '148990660'
                channel:
                  type: string
                  description: User agent (usually `browser` or `app`).
                  example: browser
                merchant:
                  type: object
                  properties:
                    category:
                      type:
                        - string
                        - 'null'
                      description: Merchant category code
                      example: null
                    country:
                      type: string
                      description: Merchant country. Follows ISO 3166-1 alpha-2 standard.
                      example: AD
                    name:
                      type: string
                      description: Merchant name
                      example: Cards API BBT
                    url:
                      type:
                        - string
                        - 'null'
                      description: Merchant URL
                      example: http://intrepid-fav.net
                money_value:
                  type: object
                  properties:
                    value:
                      type: number
                      format: decimal
                      description: Transaction amount
                      example: 100
                    currency:
                      type: string
                      description: Currency code
                      example: EUR
    v4.0.0-10:
      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/legacy/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: cards#card-order-status-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-01-01T12:34:56.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 123456
                type:
                  type: string
                  description: Webhook notification of type 'card'.
                  example: card
                client_id:
                  type: string
                  description: API `client_id`
                  example: your-bank
                card_token:
                  type:
                    - string
                    - 'null'
                  description: Unique identifier of the card.
                  example: 35050a4a-9521-426e-8109-1396e3687a3e
                card_program:
                  type: string
                  description: >-
                    The card program associated with this card order. A card
                    program is how Wise refers to all the cards you will be
                    issuing with us, grouped by product type and issuing
                    country.
                  example: VISA_DEBIT_CONSUMER_UK_1_PHYSICAL_CARDS_API
            order_id:
              type: string
              description: Card order ID associated with the status change.
              example: 1001L
            order_status:
              type: string
              description: Updated card order status
              enum:
                - PLACED
                - REQUIREMENTS_FULFILLED
                - CARD_DETAILS_CREATED
                - PRODUCED
                - COMPLETED
                - CANCELLED
                - RETURNED
              example: PRODUCED
            delivery_vendor:
              type:
                - string
                - 'null'
              description: Delivery vendor used to dispatch the order (physical card only).
              example: DHL
            occurred_at:
              type: string
              format: date-time
              description: When the card order status change occurred.
              example: '2023-01-01T12:24:56.789Z'
    v2.0.0-10:
      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/legacy/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: cards#card-order-status-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-01-01T12:34:56Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 123456
                type:
                  type: string
                  description: Webhook notification of type 'card'.
                  example: card
                client_id:
                  type: string
                  description: API `client_id`
                  example: your-bank
                card_token:
                  type:
                    - string
                    - 'null'
                  description: Unique identifier of the card.
                  example: 35050a4a-9521-426e-8109-1396e3687a3e
                card_program:
                  type: string
                  description: >-
                    The card program associated with this card order. A card
                    program is how Wise refers to all the cards you will be
                    issuing with us, grouped by product type and issuing
                    country.
                  example: VISA_DEBIT_CONSUMER_UK_1_PHYSICAL_CARDS_API
            order_id:
              type: string
              description: Card order ID associated with the status change.
              example: 1001L
            order_status:
              type: string
              description: Updated card order status
              enum:
                - PLACED
                - REQUIREMENTS_FULFILLED
                - CARD_DETAILS_CREATED
                - PRODUCED
                - COMPLETED
                - CANCELLED
                - RETURNED
              example: PRODUCED
            delivery_vendor:
              type:
                - string
                - 'null'
              description: Delivery vendor used to dispatch the order (physical card only).
              example: DHL
            occurred_at:
              type: string
              format: date-time
              description: When the card order status change occurred.
              example: '2023-01-01T12:24:56Z'
    v4.0.0-11:
      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/legacy/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: 568da36b-7335-4608-ad1b-e5c2d32273b6
        event_type:
          type: string
          description: Event type identifier
          example: cards#transaction-state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2022-08-15T11:10:46.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 123456
                client_id:
                  type: string
                  description: Your `api_client_id`
                  example: your-bank
                card_token:
                  type: string
                  description: Unique identifier of the card.
                  example: 136b29e4-7eab-4dac-a017-438d494ef6cb
                card_last_digits:
                  type: string
                  description: Last 4 digits of the card.
                  example: '1234'
                type:
                  type: string
                  description: Resource type (always `card`).
                  example: card
            transaction_id:
              type: integer
              format: int64
              description: ID of the transaction.
              example: 12345
            transaction_type:
              type: string
              description: >
                Type of the transaction. Possible values:

                - `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.
              example: CASH_WITHDRAWAL
            transaction_step_type:
              type: string
              description: >
                Step type of the transaction. Possible values:

                - `AUTH` - Transaction authorization which is usually the first
                step.

                - `PARTIAL_REVERSAL` - Transaction has been partially reversed.

                - `FULL_REVERSAL` - Transaction has been fully reversed.

                - `CAPTURE` - Transaction has been captured.

                - `SETTLE` - Currently unused. Reserved for future use.

                - `REFUND` - Currently unused. Reserved for future use.

                - `RECONCILIATION` - Currently unused. Reserved for future use.
              example: CAPTURE
            transaction_state:
              type: string
              description: |
                The current state of the transaction. Possible values:
                - `IN_PROGRESS` - The transaction is still in progress.
                - `COMPLETED` - The transaction is completed.
                - `DECLINED` - The transaction has been declined.
                - `CANCELLED` - The transaction has been cancelled.
                - `UNKNOWN` - Default fallback status.
              example: COMPLETED
            decline_reason:
              type:
                - string
                - 'null'
              description: Code of the decline reason if applicable.
              example: null
            detailed_decline_reason:
              type:
                - string
                - 'null'
              description: >
                Code of the detailed decline reason if applicable. See list of
                [card transaction decline
                reasons](/api-reference/legacy/card-transaction#card-transaction-detailed-decline-reasons).
              example: null
            creation_time:
              type: string
              format: date-time
              description: When the transaction was created.
              example: '2022-08-15T11:10:41.456Z'
            occurred_at:
              type: string
              format: date-time
              description: When the transaction state change occurred.
              example: '2022-08-15T11:10:41.789Z'
            purge_time:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                Time at which reserved funds will be released after the
                authorisation hold expires.
              example: '2022-08-22T11:10:41.123Z'
            transaction_amount:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: >-
                    Transaction amount, excluding all embedded fees such as ATM
                    fees that are not applied by Wise.
                  example: 100
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            fees:
              type: array
              description: Array of fees
              items:
                type: object
                properties:
                  amount:
                    type: number
                    format: decimal
                    description: Fee amount
                    example: 1
                  currency:
                    type: string
                    description: Currency code
                    example: EUR
                  fee_type:
                    type: string
                    description: |
                      Fee type. Possible values:
                      - `ATM_WITHDRAWAL` - Fee charged by Wise
                      - `ATM_MACHINE` - Fee charged by the ATM owner
                    example: ATM_WITHDRAWAL
            transaction_amount_with_fees:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: Transaction amount including all fees.
                  example: 101
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            billing_amount:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: Billing amount
                  example: 100
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            merchant:
              type: object
              properties:
                name:
                  type: string
                  description: Name of the merchant.
                  example: Test Payment
                location:
                  type: object
                  properties:
                    country:
                      type: string
                      description: Country where merchant is located.
                      example: France
                    city:
                      type: string
                      description: City where merchant is located.
                      example: Rouen
                    postCode:
                      type:
                        - string
                        - 'null'
                      description: Post code where merchant is located.
                      example: '00000'
                    state:
                      type:
                        - string
                        - 'null'
                      description: State where merchant is located.
                      example: null
                category:
                  type: object
                  properties:
                    code:
                      type: string
                      description: Merchant category code
                      example: '5999'
                    description:
                      type: string
                      description: Merchant category description
                      example: 5999 R Miscellaneous and Special
            authorisation_method:
              type: string
              description: Authorisation method
              example: MANUAL_ENTRY
            approval_code:
              type: string
              description: >-
                Also called authorization code. This can be used to prove
                ownership of a customer's card/account to a merchant.
              example: '913647'
            arn:
              type:
                - string
                - 'null'
              description: Acquirer reference number
              example: '04300014127798385983852'
            pin_validation_result:
              type: string
              description: |
                PIN validation result. Possible values:
                - `ONLINE_PIN_VALIDATED`
                - `ONLINE_PIN_INVALID`
                - `OFFLINE_PIN_VALIDATED`
                - `OFFLINE_PIN_INVALID`
                - `NOT_RECEIVED`
              example: ONLINE_PIN_VALIDATED
            balance_channel_reference_id:
              type: string
              description: >-
                Balance channel reference ID associated with the card
                transaction.
              example: 6e71018d-2f4d-4fc3-6711-f517f4664712
            debits:
              type: array
              description: >
                Array of debits. Note that the debits list is a non-aggregated
                list of debit movements, meaning that the `balance_id` is not
                unique in the list. For example, a cancelled transaction may
                have a list of 2 debits where the absolute values of
                `debited_amount.value`, `for_amount.value` and `fee.value` 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). In this case, 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:
                  balance_id:
                    type: integer
                    format: int64
                    description: Balance ID
                    example: 123
                  debited_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount taken from the balance.
                        example: 165.96
                      currency:
                        type: string
                        description: Currency code
                        example: AUD
                  for_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount converted to
                        example: 101
                      currency:
                        type: string
                        description: Currency code
                        example: EUR
                  rate:
                    type: number
                    format: decimal
                    description: Exchange rate
                    example: 0.61223252
                  fee:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Conversion fee amount
                        example: 0.99
                      currency:
                        type: string
                        description: Currency code
                        example: AUD
                  creation_time:
                    type: string
                    format: date-time
                    description: Time of balance debit creation.
                    example: '2022-08-15T11:10:41.456Z'
            credits:
              type: array
              description: Array of credits
              items:
                type: object
                properties:
                  balance_id:
                    type: integer
                    format: int64
                    description: Balance ID
                    example: 123
                  credited_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount credited to the balance.
                        example: 100
                      currency:
                        type: string
                        description: Currency code
                        example: EUR
            relay_authorisation_data:
              type: object
              properties:
                response_code:
                  type: string
                  description: >-
                    Relayed authorisation [response
                    code](/guides/product/issue-cards/relayed-authorisation#authorisation-response)
                  example: APPROVED
                fallback:
                  type: boolean
                  description: Whether there was a fallback applied by Wise.
                  example: true
    v2.1.0:
      title: Schema version 2.1.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/legacy/webhook).
          enum:
            - 2.1.0
          example: 2.1.0
        subscription_id:
          type: string
          format: uuid
          description: ID of the webhook subscription that triggered this event
          example: 568da36b-7335-4608-ad1b-e5c2d32273b6
        event_type:
          type: string
          description: Event type identifier
          example: cards#transaction-state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2026-02-02T11:05:20Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card
                  example: 123456
                client_id:
                  type: string
                  description: Your api_client_id
                  example: your-bank
                card_token:
                  type: string
                  description: Unique identifier of the card
                  example: 136b29e4-7eab-4dac-a017-438d494ef6cb
                card_last_digits:
                  type: string
                  description: Last 4 digits of the card
                  example: '1234'
                type:
                  type: string
                  description: Resource type (always `card`)
                  example: card
            transaction_id:
              type: integer
              format: int64
              description: ID of the transaction
              example: 712893
            transaction_type:
              type: string
              description: >
                Type of the transaction. Possible values:

                - `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
              example: POS_PURCHASE
            transaction_step_type:
              type: string
              description: >
                Step type of the transaction. Possible values:

                - `AUTH` - Transaction authorization which is usually the first
                step

                - `PARTIAL_REVERSAL` - Transaction has been partially reversed

                - `FULL_REVERSAL` - Transaction has been fully reversed

                - `CAPTURE` - Transaction has been captured

                - `SETTLE` - Currently unused. Reserved for future use.

                - `REFUND` - Currently unused. Reserved for future use.

                - `RECONCILIATION` - Currently unused. Reserved for future use.
              example: FULL_REVERSAL
            transaction_state:
              type: string
              description: |
                The current state of the transaction. Possible values:
                - `IN_PROGRESS` - The transaction is still in progress
                - `COMPLETED` - The transaction is completed
                - `DECLINED` - The transaction has been declined
                - `CANCELLED` - The transaction has been cancelled
                - `UNKNOWN` - Default fallback status
              example: CANCELLED
            decline_reason:
              type:
                - string
                - 'null'
              description: Code of the decline reason if applicable
              example: null
            detailed_decline_reason:
              type:
                - string
                - 'null'
              description: >
                Code of the detailed decline reason if applicable. List of
                available options is available
                [here](/api-reference/legacy/card-transaction#card-transaction-detailed-decline-reasons).
              example: null
            creation_time:
              type: string
              format: date-time
              description: When the transaction was created
              example: '2026-02-02T11:04:41Z'
            occurred_at:
              type: string
              format: date-time
              description: When the transaction state change occurred
              example: '2026-02-02T11:05:19Z'
            purge_time:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                Time at which reserved funds will be released after the
                authorisation hold expires
              example: null
            transaction_amount:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: >-
                    Transaction amount, excluding all embedded fees such as ATM
                    fees that are not applied by Wise
                  example: 10
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            fees:
              type: array
              description: Array of fees
              items:
                type: object
                properties:
                  amount:
                    type: number
                    format: decimal
                    description: Fee amount
                    example: 1
                  currency:
                    type: string
                    description: Currency code
                    example: EUR
                  fee_type:
                    type: string
                    description: |
                      Fee type. Possible values:
                      - `ATM_WITHDRAWAL` - Fee charged by Wise
                      - `ATM_MACHINE` - Fee charged by the ATM owner
                    example: ATM_WITHDRAWAL
            transaction_amount_with_fees:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: Transaction amount including all fees
                  example: 10
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            billing_amount:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: Billing amount
                  example: 10
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            merchant:
              type: object
              properties:
                name:
                  type: string
                  description: Name of the merchant
                  example: Acquirer Name
                location:
                  type: object
                  properties:
                    country:
                      type: string
                      description: Country where merchant is located
                      example: GB
                    city:
                      type: string
                      description: City where merchant is located
                      example: CITY NAME
                    postCode:
                      type:
                        - string
                        - 'null'
                      description: Post code where merchant is located
                      example: '00000'
                    state:
                      type:
                        - string
                        - 'null'
                      description: State where merchant is located
                      example: null
                category:
                  type: object
                  properties:
                    code:
                      type: string
                      description: Merchant category code
                      example: '5499'
                    description:
                      type: string
                      description: Merchant category description
                      example: Miscellaneous Food Stores Conven
            authorisation_method:
              type: string
              description: Authorisation method
              example: CONTACTLESS
            approval_code:
              type: string
              description: >-
                Also called authorization code. This can be used to prove
                ownership of a customer's card/account to a merchant
              example: '723647'
            arn:
              type:
                - string
                - 'null'
              description: Acquirer reference number
              example: null
            pin_validation_result:
              type: string
              description: |
                PIN validation result. Possible values:
                - `ONLINE_PIN_VALIDATED`
                - `ONLINE_PIN_INVALID`
                - `OFFLINE_PIN_VALIDATED`
                - `OFFLINE_PIN_INVALID`
                - `NOT_RECEIVED`
              example: NOT_RECEIVED
            balance_channel_reference_id:
              type: string
              description: >-
                Balance channel reference ID associated with the card
                transaction
              example: 70781abe-9098-42f0-fb1f-6cf428b5068e
            debits:
              type: array
              description: >
                Array of debits. Note that the debits list is a non-aggregated
                list of debit movements, meaning that the `balance_id` is not
                unique in the list. For example, a cancelled transaction may
                have a list of 2 debits where the absolute values of
                `debited_amount.value`, `for_amount.value` and `fee.value` 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). In this case, 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:
                  balance_id:
                    type: integer
                    format: int64
                    description: Balance ID
                    example: 4176832
                  debited_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount taken from the balance
                        example: -10
                      currency:
                        type: string
                        description: Currency code
                        example: EUR
                  for_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount converted to
                        example: -10
                      currency:
                        type: string
                        description: Currency code
                        example: EUR
                  rate:
                    type: number
                    format: decimal
                    description: Exchange rate
                    example: 1
                  fee:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Conversion fee amount
                        example: 0
                      currency:
                        type: string
                        description: Currency code
                        example: EUR
                  creation_time:
                    type: string
                    format: date-time
                    description: Time of balance debit creation
                    example: '2026-02-02T11:05:19Z'
            credits:
              type: array
              description: Array of credits
              items:
                type: object
                properties:
                  balance_id:
                    type: integer
                    format: int64
                    description: Balance ID
                    example: 123
                  credited_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount credited to the balance
                        example: 100
                      currency:
                        type: string
                        description: Currency code
                        example: EUR
            relay_authorisation_data:
              type: object
              properties:
                response_code:
                  type: string
                  description: >-
                    Relayed authorisation [response
                    code](/guides/product/issue-cards/relayed-authorisation#authorisation-response)
                  example: APPROVED
                fallback:
                  type: boolean
                  description: Whether there was a fallback applied by Wise
                  example: true
    v2.0.0-11:
      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/legacy/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: 568da36b-7335-4608-ad1b-e5c2d32273b6
        event_type:
          type: string
          description: Event type identifier
          example: cards#transaction-state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2022-08-15T11:10:46Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card
                  example: 123456
                client_id:
                  type: string
                  description: Your api_client_id
                  example: your-bank
                card_token:
                  type: string
                  description: Unique identifier of the card
                  example: 136b29e4-7eab-4dac-a017-438d494ef6cb
                card_last_digits:
                  type: string
                  description: Last 4 digits of the card
                  example: '1234'
                type:
                  type: string
                  description: Resource type (always `card`)
                  example: card
            transaction_id:
              type: integer
              format: int64
              description: ID of the transaction
              example: 12345
            transaction_type:
              type: string
              description: >
                Type of the transaction. Possible values:

                - `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
              example: CASH_WITHDRAWAL
            is_debit:
              type: boolean
              deprecated: true
              description: >
                Indicates whether the transaction type is a debit. This field is
                deprecated, use `data.transaction_amount.value` to determine if
                the transaction is a debit (positive) or a credit into the
                balance (negative).
              example: true
            transaction_step_type:
              type: string
              description: >
                Step type of the transaction. Possible values:

                - `AUTH` - Transaction authorization which is usually the first
                step

                - `PARTIAL_REVERSAL` - Transaction has been partially reversed

                - `FULL_REVERSAL` - Transaction has been fully reversed

                - `CAPTURE` - Transaction has been captured

                - `SETTLE` - Currently unused. Reserved for future use.

                - `REFUND` - Currently unused. Reserved for future use.

                - `RECONCILIATION` - Currently unused. Reserved for future use.
              example: CAPTURE
            decline_reason:
              type:
                - string
                - 'null'
              description: Code of the decline reason if applicable
              example: null
            detailed_decline_reason:
              type:
                - string
                - 'null'
              description: >
                Code of the detailed decline reason if applicable. List of
                available options is available
                [here](/api-reference/legacy/card-transaction#card-transaction-detailed-decline-reasons).
              example: null
            transaction_state:
              type: string
              description: |
                The current state of the transaction. Possible values:
                - `IN_PROGRESS` - The transaction is still in progress
                - `COMPLETED` - The transaction is completed
                - `DECLINED` - The transaction has been declined
                - `CANCELLED` - The transaction has been cancelled
                - `UNKNOWN` - Default fallback status
              example: COMPLETED
            transaction_amount:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: >-
                    Transaction amount, excluding all embedded fees such as ATM
                    fees that are not applied by Wise
                  example: 100
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            is_amount_confirmed:
              type: boolean
              description: Whether the transaction amount is confirmed
              example: true
            fees:
              type: array
              description: Array of fees
              items:
                type: object
                properties:
                  amount:
                    type: number
                    format: decimal
                    description: Fee amount
                    example: 1
                  currency:
                    type: string
                    description: Currency code
                    example: EUR
                  fee_type:
                    type: string
                    description: |
                      Fee type. Possible values:
                      - `ATM_WITHDRAWAL` - Fee charged by Wise
                      - `ATM_MACHINE` - Fee charged by the ATM owner
                    example: ATM_WITHDRAWAL
            transaction_amount_with_fees:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: Transaction amount including fees
                  example: 101
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            billing_amount:
              type: object
              properties:
                value:
                  type: number
                  format: decimal
                  description: Billing amount
                  example: 100
                currency:
                  type: string
                  description: Currency code
                  example: EUR
            authorisation_method:
              type: string
              description: Authorisation method
              example: CHIP_AND_PIN
            pin_validation_result:
              type: string
              description: |
                PIN validation result. Possible values:
                - `ONLINE_PIN_VALIDATED`
                - `ONLINE_PIN_INVALID`
                - `OFFLINE_PIN_VALIDATED`
                - `OFFLINE_PIN_INVALID`
                - `NOT_RECEIVED`
              example: ONLINE_PIN_VALIDATED
            approval_code:
              type: string
              description: >-
                Also called authorization code. This can be used to prove
                ownership of a customer's card/account to a merchant
              example: '913647'
            purge_time:
              type:
                - string
                - 'null'
              format: date-time
              description: >-
                Time at which reserved funds will be released after the
                authorisation hold expires
              example: '2022-08-22T11:10:41Z'
            balance_transaction_id:
              type: integer
              format: int64
              description: Associated balance transaction id if applicable
              example: 12345
            balance_movements:
              type: array
              description: Array of balance movements
              items:
                type: object
                properties:
                  creation_time:
                    type: string
                    format: date-time
                    description: When the balance movement occurred
                    example: '2024-12-02T04:17:40Z'
                  balance_id:
                    type: string
                    description: ID of the balance credited or debited
                    example: '123'
                  type:
                    type: string
                    description: '`credit` or `debit`'
                    example: debit
                  amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Credited or debited amount
                        example: 165.96
                      currency:
                        type: string
                        description: Currency code
                        example: AUD
            debits:
              type: array
              description: Array of debits
              items:
                type: object
                properties:
                  balance_id:
                    type: integer
                    format: int64
                    description: Balance ID
                    example: 123
                  debited_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount taken from the balance
                        example: 165.96
                      currency:
                        type: string
                        description: Currency code
                        example: AUD
                  for_amount:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Amount converted to
                        example: 101
                      currency:
                        type: string
                        description: Currency code
                        example: EUR
                  rate:
                    type: number
                    format: decimal
                    description: Exchange rate
                    example: 0.61223252
                  fee:
                    type: object
                    properties:
                      value:
                        type: number
                        format: decimal
                        description: Conversion fee amount
                        example: 0.99
                      currency:
                        type: string
                        description: Currency code
                        example: AUD
            credit:
              type:
                - object
                - 'null'
              properties:
                balance_id:
                  type: integer
                  format: int64
                  description: Balance ID
                  example: 123
                credited_amount:
                  type: object
                  properties:
                    value:
                      type: number
                      format: decimal
                      description: Amount credited to the balance
                      example: 100
                    currency:
                      type: string
                      description: Currency code
                      example: EUR
            merchant:
              type: object
              properties:
                name:
                  type: string
                  description: Name of the merchant
                  example: Test Payment
                location:
                  type: object
                  properties:
                    country:
                      type: string
                      description: Country where merchant is located
                      example: France
                    city:
                      type: string
                      description: City where merchant is located
                      example: Rouen
                    postCode:
                      type:
                        - string
                        - 'null'
                      description: Post code where merchant is located
                      example: '00000'
                    state:
                      type:
                        - string
                        - 'null'
                      description: State where merchant is located
                      example: null
                category:
                  type: object
                  properties:
                    code:
                      type: string
                      description: Merchant category code
                      example: '6011'
                    description:
                      type: string
                      description: Merchant category description
                      example: 6011 Z Member Financial Institution
            arn:
              type:
                - string
                - 'null'
              description: Acquirer reference number
              example: '04300014127798385983852'
            creation_time:
              type: string
              format: date-time
              description: When transaction was created
              example: '2022-08-15T11:10:41Z'
            occurred_at:
              type: string
              format: date-time
              description: When transaction or transaction state change occurred
              example: '2022-08-15T11:10:41Z'
            relay_authorisation_data:
              type: object
              properties:
                response_code:
                  type: string
                  description: >-
                    Relayed authorisation [response
                    code](/guides/product/issue-cards/relayed-authorisation#authorisation-response)
                  example: APPROVED
                fallback:
                  type: boolean
                  description: Whether there was a fallback applied by Wise
                  example: true
    v2.0.0-12:
      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/legacy/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-12:
      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/legacy/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'
    v4.0.0-13:
      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/legacy/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: profiles#cdd-check-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: Profile resource type (always set to `profile`).
                  example: profile
                id:
                  type: integer
                  format: int64
                  description: ID of the profile.
                  example: 111
            current_state:
              type: string
              description: Current verification state of the profile (see table above).
              example: VERIFIED
            review_outcome:
              type: string
              description: |
                *Optional*

                Reason the verification review did not pass.
                Refer to the table above for reason descriptions.
              example: DOCUMENT_OUT_OF_DATE
            required_evidences:
              type: array
              items:
                type: string
              description: >
                List of required evidences for verification. See the [list of
                evidences](/guides/product/kyc/partner-kyc/supported-evidences)
                to find all possible values.
              example:
                - SOURCE_OF_INCOME
            occurred_at:
              type: string
              format: date-time
              description: When the CDD check state change occurred.
              example: '2020-01-01T12:34:56.789Z'
            source_of_income:
              type: string
              description: >
                *Optional*


                Source of income for a personal profile submitted via the
                [/upload-evidences
                endpoint](/api-reference/legacy/verification/verificationuploadevidences).

                Use this to upload the correct Source of Wealth document.
              example: INVESTMENTS
            source_of_funding:
              type: string
              description: >
                *Optional*


                Source of funding for a business profile submitted via the
                [/upload-evidences
                endpoint](/api-reference/legacy/verification/verificationuploadevidences).

                Use this to upload the correct Source of Wealth document.
              example: REVENUE
    v2.0.0-13:
      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/legacy/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: profiles#cdd-check-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: Profile resource type (always set to `profile`)
                  example: profile
                id:
                  type: integer
                  format: int64
                  description: ID of the profile
                  example: 111
            current_state:
              type: string
              description: Current verification state of the profile (see table above).
              example: VERIFIED
            review_outcome:
              type: string
              description: |
                *Optional*

                Reason the verification review did not pass.
                Refer to the table above for descriptions of these reasons.
              example: DOCUMENT_POOR_QUALITY
            required_evidences:
              type: array
              items:
                type: string
              description: >
                List of required evidences for verification. Go to the [list of
                evidences](/guides/product/kyc/partner-kyc/supported-evidences)
                to find all possible values.
              example:
                - SOURCE_OF_INCOME
            occurred_at:
              type: string
              format: date-time
              description: When the CDD check state change occurred
              example: '2020-01-01T12:34:56Z'
            source_of_income:
              type: string
              description: >
                *Optional*


                Source of income for a personal profile submitted via the
                [/upload-evidences
                API](/api-reference/legacy/verification/verificationuploadevidences).

                Use this to upload the correct Source of Wealth document.
              example: INVESTMENTS
            source_of_funding:
              type: string
              description: >
                *Optional*


                Source of funding for a business profile submitted via the
                [/upload-evidences
                API](/api-reference/legacy/verification/verificationuploadevidences).

                Use this to upload the correct Source of Wealth document.
              example: REVENUE
    v4.0.0-14:
      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/legacy/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: profiles#overdraft-limit-threshold
        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: Profile resource type (always `profile`).
                  example: profile
                id:
                  type: integer
                  format: int64
                  description: ID of the profile.
                  example: 111
            overdraft:
              type: object
              properties:
                used:
                  type: number
                  format: decimal
                  description: Overdraft limit used
                  example: 12000
                limit:
                  type: number
                  format: decimal
                  description: Overdraft limit approved
                  example: 20000
                currency:
                  type: string
                  description: Currency in which the amounts are expressed.
                  example: EUR
    v2.0.0-14:
      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/legacy/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: profiles#overdraft-limit-threshold
        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: Profile resource type (always `profile`)
                  example: profile
                id:
                  type: integer
                  format: int64
                  description: ID of the profile
                  example: 111
            overdraft:
              type: object
              properties:
                used:
                  type: number
                  format: decimal
                  description: Overdraft limit used
                  example: 12000
                limit:
                  type: number
                  format: decimal
                  description: Overdraft limit approved
                  example: 20000
                currency:
                  type: string
                  description: Currency in which the amounts are expressed in
                  example: EUR
    v4.0.0-15:
      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/legacy/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: f5b51f77-e14a-433b-9f7c-fc2834ffcff5
        event_type:
          type: string
          description: Event type identifier
          example: profiles#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:
                id:
                  type: integer
                  format: int64
                  description: ID of the profile.
                  example: 1234
                type:
                  type: string
                  description: Resource type (always `profile`).
                  example: profile
            current_state:
              type: string
              description: >
                The current state of the profile. Possible values:

                - `ACTIVE` - The profile is active.

                - `WITHDRAW_ONLY` - The profile has 90 calendar days to remove
                their money from their balance before Wise fully deactivates
                their account. This can be done through sending from their
                balance to themselves and others or spending with their card.
                They cannot receive money to their balances and fund transfers
                from external bank accounts. They can still order new cards,
                convert between balances, open and close balances, and download
                balance statements. After 90 calendar days, the profile will
                move into a `DEACTIVATED` state.

                - `VIEW_ONLY` - The profile can access and view balances and
                account activities such as transfer history and balance
                statements. However, they can no longer perform actions such as
                moving money with Wise in any way. All transfers sent to the
                account after it is set to `VIEW_ONLY` mode will also bounce
                back to the sender. Cards will also be suspended.

                - `DEACTIVATED` - The profile's account is deactivated and no
                actions can be performed on the account. The end-user tokens
                will be revoked and you will receive a `401 Unauthorized`
                response for API calls.
              example: WITHDRAW_ONLY
            occurred_at:
              type: string
              format: date-time
              description: When the profile state change occurred.
              example: '2020-01-01T12:34:56.789Z'
            requested_by_customer:
              type: boolean
              description: >-
                Whether the state change was requested by the customer. Not
                applicable for `current_state` in `ACTIVE`.
              example: false
    v2.0.0-15:
      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/legacy/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: f5b51f77-e14a-433b-9f7c-fc2834ffcff5
        event_type:
          type: string
          description: Event type identifier
          example: profiles#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:
                id:
                  type: integer
                  format: int64
                  description: ID of the profile
                  example: 1234
                type:
                  type: string
                  description: Resource type (always `profile`)
                  example: profile
            current_state:
              type: string
              description: >
                The current state of the profile. Possible values:

                - `ACTIVE` - The profile is active.

                - `WITHDRAW_ONLY` - The profile has 90 calendar days to remove
                their money from their balance before Wise fully deactivates
                their account. This can be done through sending from their
                balance to themselves and others or spending with their card.
                They will not be able to receive money to their balances and
                fund transfers from external bank accounts. They will still be
                able to order new cards, convert between balances, open and
                close balances, and download balance statements. After 90
                calendar days, the profile will move into a `DEACTIVATED` state.

                - `VIEW_ONLY` - The profile is able to access and view balances
                and account activities such as transfer history and balance
                statements. However, they can no longer perform actions such as
                moving money with Wise in any way. All transfers sent to the
                account after it is set to `VIEW_ONLY` mode will also bounce
                back to the sender. Cards will also be suspended.

                - `DEACTIVATED` - The profile's account is deactivated and no
                actions can be performed on the account. The end-user tokens
                will be revoked and you will receive a `401 Unauthorized`
                response for API calls.
              example: WITHDRAW_ONLY
            occurred_at:
              type: string
              format: date-time
              description: When the profile state change occurred
              example: 2020-01-01T12:34:567890Z
            requested_by_customer:
              type: boolean
              description: >-
                Whether the state change was requested by the customer. Not
                applicable for `current_state` in `ACTIVE`.
              example: false
    v4.0.0-16:
      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/legacy/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: profiles#verification-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 (always `profile`).
                  example: profile
                id:
                  type: integer
                  format: int64
                  description: ID of the profile.
                  example: 111
            current_state:
              type: string
              description: Current verification state of the profile.
              enum:
                - verified
                - not_verified
              example: verified
            occurred_at:
              type: string
              format: date-time
              description: When the verification state change occurred.
              example: '2020-01-01T12:34:56.789Z'
    v2.0.0-16:
      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/legacy/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: profiles#verification-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 (always `profile`)
                  example: profile
                id:
                  type: integer
                  format: int64
                  description: ID of the profile
                  example: 111
            current_state:
              type: string
              description: Current verification state of the profile
              enum:
                - verified
                - not_verified
              example: verified
            occurred_at:
              type: string
              format: date-time
              description: When the verification state change occurred
              example: '2020-01-01T12:34:56Z'
    v5.0.0-2:
      title: Schema version 5.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/legacy/webhook).
          enum:
            - 5.0.0
          example: 5.0.0
        subscription_id:
          type: string
          format: uuid
          description: ID of the webhook subscription that triggered this event.
          example: 8df95817-8085-40aa-9bda-e3bf46e7a21a
        event_type:
          type: string
          description: Event type identifier
          example: kyc-reviews#state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2024-09-03T16:29:42.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                id:
                  type: string
                  format: uuid
                  description: ID of the KYC Review.
                  example: 46e1a5c4-4a9b-4563-39d3-18174d3ac0f8
                state:
                  type: string
                  description: >
                    Status of the KYC Review. See [KYC review
                    status](/guides/product/kyc/wise-kyc/hosted-kyc/kyc-review-status.md)
                    for possible values.
                  example: WAITING_CUSTOMER_INPUT
                prevState:
                  type: string
                  description: >
                    Previous status of the KYC review. See [KYC review
                    status](/guides/product/kyc/wise-kyc/hosted-kyc/kyc-review-status.md)
                    for possible values.
                  example: WAITING_CUSTOMER_INPUT
                profileId:
                  type: integer
                  format: int64
                  description: ID of the profile KYC review belongs to.
                  example: 22016766
                requiredBy:
                  type: string
                  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.258Z'
                createdAt:
                  type: string
                  format: date-time
                  description: Timestamp marking the creation of the KYC review.
                  example: '2024-09-03T16:22:02.258Z'
                updatedAt:
                  type: string
                  format: date-time
                  description: Timestamp marking the last update of the KYC review.
                  example: '2024-09-03T16:29:41.148Z'
                triggerReferences:
                  type: array
                  description: List of trigger references for this KYC review.
                  items:
                    type: object
                    properties:
                      type:
                        type: string
                        description: >
                          Type of the underlying action/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`).
                        enum:
                          - 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` that contains a list of currencies
                          (ex: USD, SGD, EUR)

                          the bank details have been created for.


                          | `triggerReference.type` | Field       |
                          Type           |

                          |-----------------------|-------------|----------------|

                          | `QUOTE`                 | `id`          |
                          uuid           |

                          | `TRANSFER`              | `id`          |
                          long           |

                          | `ADD_MONEY`             | `id`          |
                          long           |

                          | `BANK_ACCOUNT_DETAILS`  | `currencies`  | list of
                          string |


                          This ID might be null if underlying action is a
                          process like `REPAPERING`.
                        additionalProperties: true
                        example:
                          id: ba83s43a-f623-46f0-956d-196c13e2ab01
                requirements:
                  type: array
                  description: >
                    Nested list of [KYC
                    requirement](/api-reference/legacy/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)`.


                    Please refer to the [KYC
                    requirement](/api-reference/legacy/kyc-review/kyc-requirement)
                    documentation for full examples of the schema.
                  items:
                    type: array
                    items:
                      $ref: '#/components/schemas/kyc-requirement'
                requirementChanges:
                  type: array
                  description: List of requirement changes that triggered this event.
                  items:
                    type: object
                    properties:
                      key:
                        type: string
                        description: >-
                          The
                          [key](/api-reference/legacy/kyc-review/kyc-requirement#path=key)
                          of the requirement that has changed.
                        example: ID_DOCUMENT
                      newState:
                        type: string
                        description: >-
                          The new
                          [state](/api-reference/legacy/kyc-review/kyc-requirement#path=state)
                          of the requirement that has changed.
                        example: IN_REVIEW
                      prevState:
                        type: string
                        description: >
                          *Not provided when requirement is new.*

                          The previous
                          [state](/api-reference/legacy/kyc-review/kyc-requirement#path=state)
                          of the requirement that has changed. In case only an
                          [additional
                          requirement](/api-reference/legacy/kyc-review/kyc-requirement#path=additionalRequirements)
                          has changed, this state can be equal to `newState`.
                        example: NOT_PROVIDED
                      additionalRequirements:
                        type: array
                        description: >-
                          A list of additional requirements that have changed.
                          Not shown if empty.
                        items:
                          type: object
                          properties:
                            additionalRequirementId:
                              type: string
                              format: uuid
                              description: >-
                                The
                                [UUID](/api-reference/legacy/kyc-review/kyc-requirement#path=additionalRequirements/additionalRequirementId)
                                of the additional requirement that has changed.
                              example: 8b789c45-60ae-475d-b667-c8714db9a6a4
                            newState:
                              type: string
                              description: >-
                                The new
                                [state](/api-reference/legacy/kyc-review/kyc-requirement#path=additionalRequirements/state)
                                of the additional requirement that has changed.
                              example: IN_REVIEW
                            prevState:
                              type: string
                              description: >
                                *Not provided when additional requirement is
                                new.*

                                The previous
                                [state](/api-reference/legacy/kyc-review/kyc-requirement#path=additionalRequirements/state)
                                of the additional requirement that has changed.
                              example: NOT_PROVIDED
    v4.0.0-17:
      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/legacy/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: 8df95817-8085-40aa-9bda-e3bf46e7a21a
        event_type:
          type: string
          description: Event type identifier
          example: kyc-reviews#state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2024-09-03T16:29:42.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                id:
                  type: string
                  format: uuid
                  description: ID of the KYC Review.
                  example: 46e1a5c4-4a9b-4563-39d3-18174d3ac0f8
                state:
                  type: string
                  description: >
                    Status of the KYC Review. See [KYC Review
                    Status](/guides/product/kyc/wise-kyc/hosted-kyc/kyc-review-status.md)
                    for possible values.
                  example: WAITING_CUSTOMER_INPUT
                profileId:
                  type: integer
                  format: int64
                  description: ID of the profile KYC Review belongs to.
                  example: 22016766
                requiredBy:
                  type: string
                  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.258Z'
                createdAt:
                  type: string
                  format: date-time
                  description: Timestamp marking the creation of the KYC Review.
                  example: '2024-09-03T16:22:02.258Z'
                updatedAt:
                  type: string
                  format: date-time
                  description: Timestamp marking the last update of the KYC Review.
                  example: '2024-09-03T16:29:41.148Z'
                triggerReferences:
                  type: array
                  description: List of trigger references for this KYC Review.
                  items:
                    type: object
                    properties:
                      type:
                        type: string
                        description: >
                          Type of the underlying action/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`).
                        enum:
                          - QUOTE
                          - TRANSFER
                          - PROACTIVE_SEND_MONEY
                          - ADD_MONEY
                          - CARD
                          - BANK_ACCOUNT_DETAILS
                        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 (i.e USD, SGD, EUR) that

                          the bank details have been created for.


                          | triggerReference.type | field       | type          
                          |

                          |-----------------------|-------------|----------------|

                          | `QUOTE`                 | id          |
                          uuid           |

                          | `TRANSFER`              | id          |
                          long           |

                          | `ADD_MONEY`             | id          |
                          long           |

                          | `BANK_ACCOUNT_DETAILS`  | currencies  | list of
                          string |


                          This ID might be null if underlying action is a
                          process like `REPAPERING`.
                        additionalProperties: true
                        example:
                          id: ba83s43a-f623-46f0-956d-196c13e2ab01
                requirements:
                  type: array
                  description: Nested list of KYC requirement objects.
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          description: The unique identifier of the KYC requirement.
                          example: BUSINESS_USE_CASES
                        state:
                          type: string
                          description: >
                            The status of the KYC requirement. Either


                            `NOT_PROVIDED`: requires information


                            `IN_REVIEW`: requires internal review of the
                            requirement
                          example: NOT_PROVIDED
                        apiCollectionSupported:
                          type: boolean
                          description: >
                            A boolean value to indicate if the API collection is
                            available for this evidence. To submit the evidence,
                            refer to

                            [KYC Requirement Submit
                            endpoint](/api-reference/legacy/kyc-review/kycreviewrequirementsubmit).
                          example: true
                        versions:
                          type: array
                          description: >-
                            Available versions to be submitted for the
                            requirement.
                          items:
                            type: object
                            properties:
                              version:
                                type: string
                                description: >-
                                  Available version identifier to be submitted
                                  for the requirement.
                                example: V1
                              validUntil:
                                type: string
                                description: >-
                                  An optional field that indicates a valid until
                                  date.
    v2.0.0-17:
      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/legacy/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: 8df95817-8085-40aa-9bda-e3bf46e7a21a
        event_type:
          type: string
          description: Event type identifier
          example: kyc-reviews#state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2024-09-03T16:29:42Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                id:
                  type: string
                  format: uuid
                  description: ID of the KYC Review.
                  example: 46e1a5c4-4a9b-4563-39d3-18174d3ac0f8
                state:
                  type: string
                  description: >
                    Status of the KYC Review. See [KYC Review
                    Status](/guides/product/kyc/wise-kyc/hosted-kyc/kyc-review-status.md)
                    for possible values.
                  example: WAITING_CUSTOMER_INPUT
                profileId:
                  type: integer
                  format: int64
                  description: ID of the profile KYC Review belongs to.
                  example: 22016766
                requiredBy:
                  type: string
                  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'
                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'
                triggerReferences:
                  type: array
                  description: List of trigger references for this KYC Review.
                  items:
                    type: object
                    properties:
                      type:
                        type: string
                        description: >
                          Type of the underlying action/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`).
                        enum:
                          - QUOTE
                          - TRANSFER
                          - PROACTIVE_SEND_MONEY
                          - ADD_MONEY
                          - CARD
                          - BANK_ACCOUNT_DETAILS
                        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 (i.e USD, SGD, EUR) that

                          the bank details have been created for.


                          | triggerReference.type | field       | type          
                          |

                          |-----------------------|-------------|----------------|

                          | `QUOTE`                 | id          |
                          uuid           |

                          | `TRANSFER`              | id          |
                          long           |

                          | `ADD_MONEY`             | id          |
                          long           |

                          | `BANK_ACCOUNT_DETAILS`  | currencies  | list of
                          string |


                          This ID might be null if underlying action is a
                          process like `REPAPERING`.
                        additionalProperties: true
                        example:
                          id: ba83s43a-f623-46f0-956d-196c13e2ab01
                requirements:
                  type: array
                  description: Nested list of KYC requirement objects.
                  items:
                    type: array
                    items:
                      type: object
                      properties:
                        key:
                          type: string
                          description: The unique identifier of the KYC requirement.
                          example: BUSINESS_USE_CASES
                        state:
                          type: string
                          description: >
                            The status of the KYC requirement. Either


                            `NOT_PROVIDED`: requires information


                            `IN_REVIEW`: requires internal review of the
                            requirement
                          example: NOT_PROVIDED
                        apiCollectionSupported:
                          type: boolean
                          description: >
                            A boolean value to indicate if the API collection is
                            available for this evidence. To submit the evidence,
                            refer to

                            [KYC Requirement Submit
                            endpoint](/api-reference/legacy/kyc-review/kycreviewrequirementsubmit).
                          example: true
                        versions:
                          type: array
                          description: >-
                            Available versions to be submitted for the
                            requirement.
                          items:
                            type: object
                            properties:
                              version:
                                type: string
                                description: >-
                                  Available version identifier to be submitted
                                  for the requirement.
                                example: V1
                              validUntil:
                                type: string
                                description: >-
                                  An optional field that indicates a valid until
                                  date.
    v4.0.0-18:
      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/legacy/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: f5b51f77-e14a-433b-9f7c-fc2834ffcff5
        event_type:
          type: string
          description: Event type identifier
          example: users#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:
                id:
                  type: integer
                  format: int64
                  description: ID of the user.
                  example: 1234
                type:
                  type: string
                  description: Resource type (always `user`).
                  example: user
            previous_state:
              type: string
              enum:
                - ACTIVE
                - WITHDRAW_ONLY
                - DEACTIVATED
              example: ACTIVE
            current_state:
              type: string
              description: The current state of the user.
              enum:
                - ACTIVE
                - WITHDRAW_ONLY
                - DEACTIVATED
              example: WITHDRAW_ONLY
            deactivation_type:
              type: string
              description: >-
                If the type is `ACCOUNT_SUSPENSION`, it is possible to appeal
                the deactivation by contacting Wise.
              enum:
                - ACCOUNT_SUSPENSION
                - ACCOUNT_CLOSURE
              example: ACCOUNT_SUSPENSION
            deactivation_reason:
              type: string
              description: The reason for deactivation.
              example: REQUESTED_BY_CUSTOMER_CS
            occurred_at:
              type: string
              format: date-time
              description: When the user state change occurred.
              example: '2020-01-01T12:34:56.789Z'
    v2.0.0-18:
      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/legacy/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: f5b51f77-e14a-433b-9f7c-fc2834ffcff5
        event_type:
          type: string
          description: Event type identifier
          example: users#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:
                id:
                  type: integer
                  format: int64
                  description: ID of the user
                  example: 1234
                type:
                  type: string
                  description: Resource type (always `user`)
                  example: user
            previous_state:
              type: string
              enum:
                - ACTIVE
                - WITHDRAW_ONLY
                - DEACTIVATED
              example: ACTIVE
            current_state:
              type: string
              description: The current state of the user
              enum:
                - ACTIVE
                - WITHDRAW_ONLY
                - DEACTIVATED
              example: WITHDRAW_ONLY
            deactivation_type:
              type: string
              description: >-
                If the type is `ACCOUNT_SUSPENSION`, it is possible for your
                customer support teams to appeal the deactivation by reaching
                out to Wise.
              enum:
                - ACCOUNT_SUSPENSION
                - ACCOUNT_CLOSURE
              example: ACCOUNT_SUSPENSION
            deactivation_reason:
              type: string
              description: The reason for deactivation
              example: REQUESTED_BY_CUSTOMER_CS
            occurred_at:
              type: string
              format: date-time
              description: When the user state change occurred
              example: '2020-01-01T12:34:56Z'
    v4.0.0-19:
      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/legacy/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: f2264fe5-a0f5-4dab-a1b4-6faa87761425
        event_type:
          type: string
          description: Event type identifier
          example: balances#update
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-03-08T14:55:39.456Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                type:
                  type: string
                  description: Resource type (always `balance-account`).
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account.
                  example: 2
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account.
                  example: 2
            amount:
              type: number
              format: decimal
              description: Transaction amount
              example: 70
            balance_id:
              type: integer
              format: int64
              description: ID of the balance credited or debited.
              example: 111
            channel_name:
              type: string
              description: Transfer category
              example: TRANSFER
            currency:
              type: string
              description: Currency code
              example: GBP
            occurred_at:
              type: string
              format: date-time
              description: When the transaction occurred.
              example: '2023-03-08T14:55:38.123Z'
            post_transaction_balance_amount:
              type: number
              format: decimal
              description: Available balance after current transaction.
              example: 88.93
            step_id:
              type: integer
              format: int64
              description: Unique identifier for tracking sequence of transaction events.
              example: 1234567
            transaction_type:
              type: string
              description: Either credit or debit
              example: credit
            transfer_reference:
              type: string
              description: ID of the transfer.
              example: BNK-1234567
    v3.0.0:
      title: Schema version 3.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/legacy/webhook).
          enum:
            - 3.0.0
          example: 3.0.0
        subscription_id:
          type: string
          format: uuid
          description: ID of the webhook subscription that triggered this event
          example: f2264fe5-a0f5-4dab-a1b4-6faa87761425
        event_type:
          type: string
          description: Event type identifier
          example: balances#update
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2023-03-08T15:26:07Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                type:
                  type: string
                  description: Resource type (always balance-account)
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account
                  example: 2
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account
                  example: 2
            amount:
              type: number
              format: decimal
              description: Transaction amount
              example: 9.6
            balance_id:
              type: integer
              format: int64
              description: ID of the balance credited or debited
              example: 111
            channel_name:
              type: string
              description: Transfer category
              example: TRANSFER
            currency:
              type: string
              description: Currency code
              example: GBP
            occurred_at:
              type: string
              format: date-time
              description: When the transaction occurred
              example: '2023-03-08T15:26:07Z'
            post_transaction_balance_amount:
              type: number
              format: decimal
              description: Available balance after current transaction
              example: 106.93
            step_id:
              type: integer
              format: int64
              description: Unique identifier for tracking sequence of transaction events
              example: 1234567
            transaction_type:
              type: string
              description: Either credit or debit
              example: debit
            transfer_reference:
              type: string
              description: ID of the transfer
              example: '47500002'
    v2.2.0:
      title: Schema version 2.2.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/legacy/webhook).
          enum:
            - 2.2.0
          example: 2.2.0
        subscription_id:
          type: string
          format: uuid
          description: ID of the webhook subscription that triggered this event
          example: f2264fe5-a0f5-4dab-a1b4-6faa87761425
        event_type:
          type: string
          description: Event type identifier
          example: balances#update
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2023-03-08T15:26:07Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                type:
                  type: string
                  description: Resource type (always balance-account)
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account
                  example: 2
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account
                  example: 2
            transaction_type:
              type: string
              description: Either credit or debit
              example: debit
            amount:
              type: number
              format: decimal
              description: Transaction amount
              example: 9.6
            balance_id:
              type: integer
              format: int64
              description: ID of the balance credited or debited
              example: 111
            currency:
              type: string
              description: Currency code
              example: GBP
            occurred_at:
              type: string
              format: date-time
              description: When the transaction occurred
              example: '2023-03-08T15:26:07Z'
            transfer_reference:
              type: string
              description: ID of the transfer
              example: '47500002'
            channel_name:
              type: string
              description: Transfer category
              example: TRANSFER
    v2.1.0-2:
      title: Schema version 2.1.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/legacy/webhook).
          enum:
            - 2.1.0
          example: 2.1.0
        subscription_id:
          type: string
          format: uuid
          description: ID of the webhook subscription that triggered this event
          example: f2264fe5-a0f5-4dab-a1b4-6faa87761425
        event_type:
          type: string
          description: Event type identifier
          example: balances#update
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2023-03-08T14:55:39Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                type:
                  type: string
                  description: Resource type (always balance-account)
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account
                  example: 2
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account
                  example: 2
            transaction_type:
              type: string
              description: Either credit or debit
              example: credit
            amount:
              type: number
              format: decimal
              description: Transaction amount
              example: 70
            currency:
              type: string
              description: Currency code
              example: GBP
            occurred_at:
              type: string
              format: date-time
              description: When the transaction occurred
              example: '2023-03-08T14:55:38Z'
            transfer_reference:
              type: string
              description: ID of the transfer
              example: BNK-1234567
            channel_name:
              type: string
              description: Transfer category
              example: TRANSFER
    v4.0.0-20:
      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/legacy/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: balances#account-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 (always `balance-account`).
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account.
                  example: 123
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account.
                  example: 555
                state:
                  type: string
                  description: State of the account.
                  enum:
                    - ACTIVE
                    - INACTIVE
                  example: INACTIVE
            occurred_at:
              type: string
              format: date-time
              description: Timestamp when the event occurred.
              example: '2020-01-01T12:34:56.789Z'
    v2.0.0-19:
      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/legacy/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: balances#account-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 (always `balance-account`)
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account
                  example: 123
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account
                  example: 555
                state:
                  type: string
                  description: State of the account.
                  enum:
                    - ACTIVE
                    - INACTIVE
                  example: INACTIVE
            occurred_at:
              type: string
              format: date-time
              description: Timestamp when the event occurred
              example: '2020-01-01T12:34:56Z'
    v4.0.0-21:
      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/legacy/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: balances#credit
        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 (always `balance-account`)
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account
                  example: 111
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account
                  example: 222
            transaction_type:
              type: string
              description: Always `credit`
              example: credit
            amount:
              type: number
              format: decimal
              description: Deposited amount
              example: 1.23
            currency:
              type: string
              description: Currency code
              example: EUR
            post_transaction_balance_amount:
              type: number
              format: decimal
              description: Balance after the credit was applied
              example: 2.34
            occurred_at:
              type: string
              format: date-time
              description: When the credit occurred
              example: '2020-01-01T12:34:56.789Z'
    v2.0.0-20:
      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/legacy/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: balances#credit
        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 (always `balance-account`)
                  example: balance-account
                id:
                  type: integer
                  format: int64
                  description: ID of the account
                  example: 111
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the account
                  example: 222
            transaction_type:
              type: string
              description: Always `credit`
              example: credit
            amount:
              type: number
              format: decimal
              description: Deposited amount
              example: 1.23
            currency:
              type: string
              description: Currency code
              example: EUR
            post_transaction_balance_amount:
              type: number
              format: decimal
              description: Balance after the credit was applied
              example: 2.34
            occurred_at:
              type: string
              format: date-time
              description: When the credit occurred
              example: '2020-01-01T12:34:56Z'
    v4.0.0-22:
      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/legacy/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: batch-payment-initiations#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:
                id:
                  type: integer
                  format: int64
                  description: Payment initiation ID
                  example: 12345
                batch_group_id:
                  type: string
                  description: Batch group ID
                  example: 068e186d-9632-4937-b753-af3e53f4d0b0
                profile_id:
                  type: integer
                  format: int64
                  description: The ID of the profile this payment belongs to.
                  example: 2
            previous_status:
              type: string
              description: Previous payment initiation state.
              enum:
                - NEW
                - PROCESSING
                - COMPLETED
                - FAILED
                - CHARGED_BACK
              example: NEW
            current_status:
              type: string
              description: Current payment initiation state.
              enum:
                - NEW
                - PROCESSING
                - COMPLETED
                - FAILED
                - CHARGED_BACK
              example: PROCESSING
            occurred_at:
              type: string
              format: date-time
              description: When the payment initiation state change occurred.
              example: '2021-04-13T19:51:41.423Z'
            return_code:
              type: string
              description: Return code of the underlying payment system.
              example: '200'
    v2.0.0-21:
      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/legacy/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: batch-payment-initiations#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:
                id:
                  type: integer
                  format: int64
                  description: Payment initiation ID
                  example: 12345
                batchGroupId:
                  type: string
                  description: Batch group ID
                  example: 068e186d-9632-4937-b753-af3e53f4d0b0
                profileId:
                  type: integer
                  format: int64
                  description: The ID of the profile this payment belongs to
                  example: 2
            previousStatus:
              type: string
              description: Previous payment initiation state
              enum:
                - NEW
                - PROCESSING
                - COMPLETED
                - FAILED
                - CHARGED_BACK
              example: NEW
            currentStatus:
              type: string
              description: Current payment initiation state
              enum:
                - NEW
                - PROCESSING
                - COMPLETED
                - FAILED
                - CHARGED_BACK
              example: PROCESSING
            occurredAt:
              type: string
              format: date-time
              description: When the payment initiation state change occurred
              example: '2021-04-13T19:51:41.423404Z'
            returnCode:
              type: string
              description: Return code of the underlying payment system
              example: '200'
    v4.0.0-23:
      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/legacy/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: 017631af-326c-4a69-93f3-bd1ce987a743
        event_type:
          type: string
          description: Event type identifier
          example: partner-support#case-changed
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-06-23T09:45:36.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                type:
                  type: string
                  description: >-
                    Type of resource for webhook. Will always be
                    `partner-support-case`.
                  example: partner-support-case
                case_id:
                  type: integer
                  format: int64
                  description: ID of the case.
                  example: 136
                case_type:
                  type: string
                  description: >-
                    Type of the case. Value must be `GENERAL_ENQUIRY`. More case
                    types to be added in the future.
                  example: GENERAL_ENQUIRY
                details:
                  type: object
                  properties:
                    transfer_id:
                      type:
                        - integer
                        - 'null'
                      format: int64
                      description: ID of the transfer that is associated with the case.
                      example: 12345678
                    user_id:
                      type: integer
                      format: int64
                      description: ID of the user account that is associated with the case.
                      example: 12345678
                    profile_id:
                      type: integer
                      format: int64
                      description: ID of the profile that is associated with the case.
                      example: 12345678
                status:
                  type: string
                  description: Status of the case.
                  enum:
                    - OPEN
                    - PENDING
                    - SOLVED
                    - CLOSED
                  example: PENDING
            type:
              type: string
              description: The type of the webhook being sent.
              enum:
                - STATUS_UPDATED
                - NEW_COMMENT
                - NEW_CASE
              example: NEW_CASE
            occurred_at:
              type: string
              format: date-time
              description: When the case update occurred.
              example: '2023-06-23T09:45:34.789Z'
    v2.0.0-22:
      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/legacy/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: 017631af-326c-4a69-93f3-bd1ce987a743
        event_type:
          type: string
          description: Event type identifier
          example: partner-support#case-changed
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2023-06-23T09:45:36Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                type:
                  type: string
                  description: >-
                    Type of resource for webhook. Will always be
                    `partner-support-case`
                  example: partner-support-case
                case_id:
                  type: integer
                  format: int64
                  description: ID of the case
                  example: 136
                case_type:
                  type: string
                  description: >-
                    Type of the case. Value must be `GENERAL_ENQUIRY`. More case
                    types will be added in the future.
                  example: GENERAL_ENQUIRY
                details:
                  type: object
                  properties:
                    transfer_id:
                      type:
                        - integer
                        - 'null'
                      format: int64
                      description: ID of the transfer that is associated with the case.
                      example: 12345678
                    user_id:
                      type: integer
                      format: int64
                      description: ID of the user account that is associated with the case.
                      example: 12345678
                    profile_id:
                      type: integer
                      format: int64
                      description: ID of the profile that is associated with the case.
                      example: 12345678
                status:
                  type: string
                  description: Status of the case.
                  enum:
                    - OPEN
                    - PENDING
                    - SOLVED
                    - CLOSED
                  example: PENDING
            type:
              type: string
              description: The type of the webhook being sent.
              enum:
                - STATUS_UPDATED
                - NEW_COMMENT
                - NEW_CASE
              example: NEW_CASE
            occurred_at:
              type: string
              format: date-time
              description: When the case update occurred.
              example: '2023-06-23T09:45:34Z'
    v4.0.0-24:
      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/legacy/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: swift-in#credit
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2023-08-21T12:34:58.123Z'
        data:
          type: object
          required:
            - action
            - resource
            - occurred_at
          properties:
            action:
              type: object
              required:
                - type
                - id
                - profile_id
                - account_id
              properties:
                type:
                  type: string
                  description: Type of action. Always `credit`.
                  example: credit
                id:
                  type: integer
                  format: int64
                  description: TransferID of the credit.
                  example: 12345
                profile_id:
                  type: integer
                  format: int64
                  description: ProfileID for the transfer.
                  example: 222
                account_id:
                  type: integer
                  format: int64
                  description: AccountID for the transfer.
                  example: 333
            resource:
              type: object
              required:
                - id
                - uetr
                - exchange_rate
                - settled_amount
                - transaction_time
              properties:
                id:
                  type: string
                  description: ID of the webhook.
                  example: '55555'
                uetr:
                  type: string
                  format: guid
                  description: >-
                    Unique identifier created by the scheme for each payment and
                    passed through the scheme to Wise.
                  example: f875814b-7d44-4d1b-a499-123456789abcde
                reference:
                  type: string
                  description: Reference provided by the ultimate sender for the payment.
                  minLength: 0
                  maxLength: 140
                  example: /RFB/BET072
                recipient:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Name of the ultimate recipient.
                      minLength: 1
                      maxLength: 140
                      example: JOHN SMITH
                    address:
                      type: object
                      description: Structured address of the ultimate recipient.
                      properties:
                        first_line:
                          type: string
                          description: Address first line.
                        street_name:
                          type: string
                          description: Street name.
                          example: Evergreen Ave
                        building_number:
                          type: string
                          description: Building number.
                          example: '6'
                        town_name:
                          type: string
                          description: Town (city) name.
                          example: BRUSSELS
                        postal_code:
                          type: string
                          description: Postal code.
                          example: '1000'
                        country_sub_division:
                          type: string
                          description: >-
                            Country subdivision such as a state, province, or
                            region.
                        country_code:
                          type: string
                          description: Country code. 2-letter ISO country code.
                          example: BE
                    account:
                      type: string
                      description: >-
                        This can be either an IBAN, BBAN, AccountId or a
                        Descriptor (another kind of identifier).
                      minLength: 1
                      maxLength: 36
                      example: BE1234567891234
                    bank_details:
                      type: object
                      description: Recipient bank details.
                      properties:
                        bic:
                          type: string
                          description: Recipient bank BIC.
                          example: EXMPBEBB
                        name:
                          type: string
                          description: Recipient bank name.
                          example: EXAMPLE BANK BELGIUM
                        address:
                          type: object
                          description: >-
                            Recipient bank address (same structure as
                            `recipient.address`).
                          properties:
                            first_line:
                              type: string
                              description: Address first line.
                            street_name:
                              type: string
                              description: Street name.
                              example: Rue de l'Exemple
                            building_number:
                              type: string
                              description: Building number.
                              example: '1'
                            town_name:
                              type: string
                              description: Town (city) name.
                              example: BRUSSELS
                            postal_code:
                              type: string
                              description: Postal code.
                              example: '1000'
                            country_sub_division:
                              type: string
                              description: >-
                                Country subdivision such as a state, province,
                                or region.
                            country_code:
                              type: string
                              description: Country code. 2-letter ISO country code.
                              example: BE
                sender:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Name of the ultimate sender.
                      minLength: 1
                      maxLength: 140
                      example: GEORGE SMITH
                    address:
                      type: object
                      description: Structured address of the ultimate sender.
                      properties:
                        first_line:
                          type: string
                          description: Address first line.
                        street_name:
                          type: string
                          description: Street name.
                          example: Evergreen Street
                        building_number:
                          type: string
                          description: Building number.
                          example: '10'
                        town_name:
                          type: string
                          description: Town (city) name.
                          example: BRUSSELS
                        postal_code:
                          type: string
                          description: Postal code.
                          example: '1000'
                        country_sub_division:
                          type: string
                          description: >-
                            Country subdivision such as a state, province, or
                            region.
                        country_code:
                          type: string
                          description: Country code. 2-letter ISO country code.
                          example: BE
                    account:
                      type: string
                      description: >-
                        This can be either an IBAN, BBAN, AccountId or a
                        Descriptor (another kind of identifier).
                      minLength: 1
                      maxLength: 36
                      example: EE947700771111111111
                    bank_details:
                      type: object
                      description: Sender bank details.
                      properties:
                        bic:
                          type: string
                          description: Sender bank BIC.
                          example: TESTDEFF
                        name:
                          type: string
                          description: Sender bank name.
                          example: TEST BANK AG
                        address:
                          type: object
                          description: >-
                            Sender bank address (same structure as
                            `recipient.address`).
                          properties:
                            first_line:
                              type: string
                              description: Address first line.
                            street_name:
                              type: string
                              description: Street name.
                              example: Musterstrasse
                            building_number:
                              type: string
                              description: Building number.
                              example: '99'
                            town_name:
                              type: string
                              description: Town (city) name.
                              example: FRANKFURT
                            postal_code:
                              type: string
                              description: Postal code.
                              example: '60311'
                            country_sub_division:
                              type: string
                              description: >-
                                Country subdivision such as a state, province,
                                or region.
                            country_code:
                              type: string
                              description: Country code. 2-letter ISO country code.
                              example: DE
                exchange_rate:
                  type: number
                  format: double
                  description: >
                    In case the originally instructed amount was converted by
                    Wise or any other intermediary agent, this field contains
                    the exchange rate used. If no conversion took place, the
                    exchange rate will be `1.0`.
                  example: 0.8
                instructed_amount:
                  type: object
                  description: Amount originally instructed by the ultimate sender.
                  required:
                    - value
                    - currency
                  properties:
                    value:
                      type: number
                      format: double
                      description: >-
                        Value of the amount originally instructed by the
                        ultimate sender.
                      example: 1000
                    currency:
                      type: string
                      description: >-
                        Currency of the amount originally instructed by the
                        ultimate sender. 3-letter ISO currency code.
                      example: USD
                settled_amount:
                  type: object
                  required:
                    - value
                    - currency
                  properties:
                    value:
                      type: number
                      format: double
                      description: Value of the amount settled to the balance account.
                      example: 786.54
                    currency:
                      type: string
                      description: >-
                        Currency of the amount settled to the balance account.
                        3-letter ISO currency code.
                      example: GBP
                fee:
                  type: object
                  properties:
                    wise:
                      type: array
                      description: >-
                        List of fees applied by Wise (for example, conversion
                        fees). If this list is empty, no fees were applied by
                        Wise.
                      items:
                        type: object
                        required:
                          - type
                          - value
                          - currency
                        properties:
                          type:
                            type: string
                            description: Type of fee.
                            example: conversion
                          value:
                            type: number
                            format: double
                            description: Value of fee.
                            example: 2.76
                          currency:
                            type: string
                            description: Currency of fee. 3-letter ISO currency code.
                            example: GBP
                    correspondent:
                      type: array
                      description: >-
                        List of fees declared by correspondents (for example,
                        handling fees). If this list is empty, no fees were
                        declared by correspondents.
                      items:
                        type: object
                        required:
                          - value
                          - currency
                        properties:
                          value:
                            type: number
                            format: double
                            description: Value of fee.
                            example: 4.5
                          currency:
                            type: string
                            description: Currency of fee. 3-letter ISO currency code.
                            example: USD
                transaction_time:
                  type: string
                  format: date-time
                  description: >
                    Date and time at which the associated transaction was
                    created. Time in UTC.


                    Format: `YYYY`-`MM`-`DD`T`HH`:`MM`:`SS`.`mmm`Z
                  example: '2023-08-21T12:34:56.456Z'
                previous_instructing_agents:
                  type: array
                  description: >-
                    List of previous instructing agents in the payment chain,
                    ordered from first to last.
                  items:
                    type: object
                    properties:
                      bic:
                        type: string
                        description: Previous instructing agent BIC.
                        example: SAMPUS33
                      name:
                        type: string
                        description: Previous instructing agent bank name.
                        example: SAMPLE BANK USA
                      address:
                        type: object
                        description: >-
                          Previous instructing agent bank address (same
                          structure as `recipient.address`).
                        properties:
                          first_line:
                            type: string
                            description: Address first line.
                          street_name:
                            type: string
                            description: Street name.
                            example: Fictional Avenue
                          building_number:
                            type: string
                            description: Building number.
                            example: '100'
                          town_name:
                            type: string
                            description: Town (city) name.
                            example: NEW YORK
                          postal_code:
                            type: string
                            description: Postal code.
                            example: '10001'
                          country_sub_division:
                            type: string
                            description: >-
                              Country subdivision such as a state, province, or
                              region.
                            example: NY
                          country_code:
                            type: string
                            description: Country code. 2-letter ISO country code.
                            example: US
            occurred_at:
              type: string
              format: date-time
              description: >
                Date and time at which the amount was credited to the balance
                account. Time in UTC.


                Format: `YYYY`-`MM`-`DD`T`HH`:`MM`:`SS`.`mmm`Z
              example: '2023-08-21T12:34:56.789Z'
    v3.0.0-2:
      title: Schema version 3.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/legacy/webhook).
          enum:
            - 3.0.0
          example: 3.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: swift-in#credit
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2023-08-21T12:34:58Z'
        data:
          type: object
          required:
            - action
            - resource
            - occurred_at
          properties:
            action:
              type: object
              required:
                - type
                - id
                - profile_id
                - account_id
              properties:
                type:
                  type: string
                  description: Type of action. Always `credit`.
                  example: credit
                id:
                  type: integer
                  format: int64
                  description: TransferID of the credit.
                  example: 12345
                profile_id:
                  type: integer
                  format: int64
                  description: ProfileID for the transfer.
                  example: 222
                account_id:
                  type: integer
                  format: int64
                  description: AccountID for the transfer.
                  example: 333
            resource:
              type: object
              required:
                - id
                - uetr
                - exchange_rate
                - settled_amount
                - transaction_time
              properties:
                id:
                  type: string
                  description: ID of the webhook.
                  example: '55555'
                uetr:
                  type: string
                  format: guid
                  description: >-
                    Unique identifier created by the scheme for each payment and
                    passed through the scheme to Wise.
                  example: f875814b-7d44-4d1b-a499-123456789abcde
                reference:
                  type: string
                  description: Reference provided by the ultimate sender for the payment.
                  minLength: 0
                  maxLength: 140
                  example: /RFB/BET072
                recipient:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Name of the ultimate recipient.
                      minLength: 1
                      maxLength: 140
                      example: JOHN SMITH
                    address:
                      type: string
                      description: Address of the ultimate recipient.
                      minLength: 1
                      maxLength: 140
                      example: EVERGREEN AVE, 6, BRUSSELS, BE
                    account:
                      type: string
                      description: >-
                        This can be either an IBAN, BBAN, AccountId or a
                        Descriptor (another kind of identifier).
                      minLength: 1
                      maxLength: 36
                      example: BE1234567891234
                    bank_details:
                      type: object
                      description: Recipient bank details.
                      properties:
                        bic:
                          type: string
                          description: Recipient bank BIC.
                          example: EXMPBEBB
                        name:
                          type: string
                          description: Recipient bank name.
                          example: EXAMPLE BANK BELGIUM
                        address:
                          type: string
                          description: Recipient bank address.
                          example: Rue de l'Exemple, BRUSSELS
                sender:
                  type: object
                  properties:
                    name:
                      type: string
                      description: Name of the ultimate sender.
                      minLength: 1
                      maxLength: 140
                      example: GEORGE SMITH
                    address:
                      type: string
                      description: Address of the ultimate sender.
                      minLength: 1
                      maxLength: 140
                      example: EVERGREEN STREET, 10, BRUSSELS, BE
                    account:
                      type: string
                      description: >-
                        This can be either an IBAN, BBAN, AccountId or a
                        Descriptor (another kind of identifier).
                      minLength: 1
                      maxLength: 36
                      example: EE947700771111111111
                    bank_details:
                      type: object
                      description: Sender bank details.
                      properties:
                        bic:
                          type: string
                          description: Sender bank BIC.
                          example: TESTDEFF
                        name:
                          type: string
                          description: Sender bank name.
                          example: TEST BANK AG
                        address:
                          type: string
                          description: Sender bank address.
                          example: Musterstrasse, FRANKFURT
                    bank_code:
                      type: object
                      description: Ultimate sender's bank code.
                      properties:
                        value:
                          type: string
                          description: >-
                            Value of the ultimate sender's bank code. This can
                            be either a BIC code, bank institution name,
                            clearing system member code or LEI.
                          example: ABNABE2AIDJ
                        type:
                          type: string
                          description: >-
                            Type of the ultimate sender's bank code. This can be
                            either `BIC`, `BANK_CODE` or `BANK_NAME`.
                          example: BIC
                exchange_rate:
                  type: number
                  format: double
                  description: >
                    In case the originally instructed amount was converted by
                    Wise or any other intermediary agent, this field contains
                    the exchange rate used. If no conversion took place, the
                    exchange rate will be `1.0`.
                  example: 0.8
                instructed_amount:
                  type: object
                  description: Amount originally instructed by the ultimate sender.
                  required:
                    - value
                    - currency
                  properties:
                    value:
                      type: number
                      format: double
                      description: >-
                        Value of the amount originally instructed by the
                        ultimate sender.
                      example: 1000
                    currency:
                      type: string
                      description: >-
                        Currency of the amount originally instructed by the
                        ultimate sender. 3-letter ISO currency code.
                      example: USD
                settled_amount:
                  type: object
                  required:
                    - value
                    - currency
                  properties:
                    value:
                      type: number
                      format: double
                      description: Value of the amount settled to the balance account.
                      example: 786.54
                    currency:
                      type: string
                      description: >-
                        Currency of the amount settled to the balance account.
                        3-letter ISO currency code.
                      example: GBP
                fee:
                  type: object
                  properties:
                    wise:
                      type: array
                      description: >-
                        List of fees applied by Wise (e.g., conversion fee). If
                        this list is empty, no fees were applied by Wise.
                      items:
                        type: object
                        required:
                          - type
                          - value
                          - currency
                        properties:
                          type:
                            type: string
                            description: Type of fee.
                            example: conversion
                          value:
                            type: number
                            format: double
                            description: Value of fee.
                            example: 2.76
                          currency:
                            type: string
                            description: Currency of fee. 3-letter ISO currency code.
                            example: GBP
                    correspondent:
                      type: array
                      description: >-
                        List of fees declared by correspondents (e.g., handling
                        fee). If this list is empty, no fees were declared by
                        correspondents.
                      items:
                        type: object
                        required:
                          - value
                          - currency
                        properties:
                          value:
                            type: number
                            format: double
                            description: Value of fee.
                            example: 4.5
                          currency:
                            type: string
                            description: Currency of fee. 3-letter ISO currency code.
                            example: USD
                transaction_time:
                  type: string
                  format: date-time
                  description: >
                    Date and time at which the associated transaction was
                    created. Time in UTC.

                    Format: `YYYY`-`MM`-`DD`T`HH`:`MM`:`SS`Z
                  example: '2023-08-21T12:34:56Z'
            occurred_at:
              type: string
              format: date-time
              description: >
                Date and time at which the amount was credited to the balance
                account. Time in UTC.

                Format: `YYYY`-`MM`-`DD`T`HH`:`MM`:`SS`Z
              example: '2023-08-21T12:34:56Z'
    v4.0.0-25:
      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/legacy/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: swift#message-received
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2025-10-21T12:34:58.123Z'
        data:
          type: object
          properties:
            action:
              type: object
              properties:
                id:
                  type: integer
                  format: int64
                  description: The transfer ID of the incoming payment.
                  example: 12345
                profile_id:
                  type: integer
                  format: int64
                  description: The profile ID of the incoming payment.
                  example: 222
                account_id:
                  type: integer
                  format: int64
                  description: The balance account ID where funds will be deposited.
                  example: 333
            occurred_at:
              type: string
              format: date-time
              description: >-
                Date and time at which the SWIFT message was processed by Wise.
                Time in UTC.
              example: '2025-10-21T12:34:56.789Z'
            resource:
              type: object
              properties:
                id:
                  type: string
                  description: Identifier of the SWIFT message.
                  example: a1b2c3d4e5f6
                message_type:
                  type: string
                  description: >-
                    Type of SWIFT message contained in the content field (e.g.,
                    `pacs.008.001.08`). Extensible for future message types.
                  example: pacs.008.001.08
                content:
                  type: string
                  description: >-
                    The raw SWIFT message data, encoded as specified by
                    `content_encoding`.
                  example: PD94bWwgdmVyc2lvbj0iMS4wIj8+...
                content_encoding:
                  type: string
                  description: The encoding applied to the content field. Always `base64`.
                  example: base64
    v4.0.0-26:
      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/legacy/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: 7bb32a11-74ad-43b6-9505-3f5facbc87ed
        event_type:
          type: string
          description: Event type identifier
          example: transaction-disputes#update
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2024-04-18T06:36:17.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                id:
                  type: string
                  description: Unique ID of the dispute.
                  example: 39f893e3-4b0c-4850-9c5c-8cb8f4798a43
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card.
                  example: 16605997
                transaction_id:
                  type: integer
                  format: int64
                  description: ID of the card transaction.
                  example: 4337
                type:
                  type: string
                  description: Resource type (always `transaction-dispute`).
                  example: transaction-dispute
            reason:
              type: string
              description: >-
                Dispute reason. See [dispute
                reason](/api-reference/legacy/disputes/disputereasonsget) for
                all possible values.
              example: WRONG_AMOUNT
            status:
              type: string
              description: Dispute overall status
              enum:
                - ACTIVE
                - CLOSED
              example: CLOSED
            sub_status:
              type: string
              description: >-
                Dispute detailed status. See [dispute
                sub-status](/api-reference/legacy/disputes#dispute-sub-status)
                for all possible values.
              example: WITHDRAWN
            status_message:
              type: string
              description: Explanation for `subStatus`.
              example: Withdrawn
            created_at:
              type: string
              format: date-time
              description: Time when the dispute was created.
              example: '2024-04-18T06:17:12.456Z'
            created_by:
              type: string
              description: Creator of the dispute. Currently set to the user id.
              example: '6097861'
            can_withdraw:
              type: boolean
              description: Whether the dispute can be withdrawn.
              example: false
            occurred_at:
              type: string
              format: date-time
              description: When the dispute updates occurred.
              example: '2024-04-18T06:36:15.789Z'
    v2.0.0-23:
      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/legacy/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: 7bb32a11-74ad-43b6-9505-3f5facbc87ed
        event_type:
          type: string
          description: Event type identifier
          example: transaction-disputes#update
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2024-04-18T06:36:17Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                id:
                  type: string
                  description: Unique ID of the dispute
                  example: 39f893e3-4b0c-4850-9c5c-8cb8f4798a43
                profile_id:
                  type: integer
                  format: int64
                  description: ID of the profile that owns the card
                  example: 16605997
                transaction_id:
                  type: integer
                  format: int64
                  description: ID of the card transaction
                  example: 4337
                type:
                  type: string
                  description: Resource type (always `transaction-dispute`)
                  example: transaction-dispute
            reason:
              type: string
              description: >-
                Dispute reason, you can find all the possible values
                [here](/api-reference/legacy/disputes/disputereasonsget)
              example: WRONG_AMOUNT
            status:
              type: string
              description: Dispute overall status
              enum:
                - ACTIVE
                - CLOSED
              example: CLOSED
            sub_status:
              type: string
              description: >-
                Dispute detailed status, you can find all the possible values
                [here](/api-reference/legacy/disputes#dispute-sub-status)
              example: WITHDRAWN
            status_message:
              type: string
              description: Explanation for subStatus
              example: Withdrawn
            created_at:
              type: string
              format: date-time
              description: Time when the dispute was created
              example: '2024-04-18T06:17:12Z'
            created_by:
              type: string
              description: Creator of the dispute, it is currently set to the user id
              example: '6097861'
            can_withdraw:
              type: boolean
              description: Whether the dispute can be withdrawn
              example: false
            occurred_at:
              type: string
              format: date-time
              description: When the dispute updates occurred
              example: '2024-04-18T06:36:15Z'
    v4.0.0-27:
      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/legacy/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: f5b51f77-e14a-433b-9f7c-fc2834ffcff5
        event_type:
          type: string
          description: Event type identifier
          example: bulk-settlement#payment-received
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2024-04-18T06:36:17.123Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                settlement_reference:
                  type: string
                  description: Reference on settlement journal
                  example: TPFB1111111
                source_currency:
                  type: string
                  description: Settlement currency
                  example: GBP
                source_amount:
                  type: number
                  format: decimal
                  description: The amount Wise paid out on behalf of partner.
                  example: -100.1
                target_amount:
                  type: number
                  format: decimal
                  description: Total settlement fund received for this settlement journal.
                  example: 100.1
                amount_matched:
                  type: boolean
                  description: Whether amount received matches what is expected.
                  example: true
            occurred_at:
              type: string
              format: date-time
              description: When the settlement fund was received.
              example: '2024-04-18T06:36:15.789Z'
    v3.0.0-3:
      title: Schema version 3.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/legacy/webhook).
          enum:
            - 3.0.0
          example: 3.0.0
        subscription_id:
          type: string
          format: uuid
          description: ID of the webhook subscription that triggered this event
          example: f5b51f77-e14a-433b-9f7c-fc2834ffcff5
        event_type:
          type: string
          description: Event type identifier
          example: bulk-settlement#payment-received
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2024-04-18T06:36:17Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                settlement_reference:
                  type: string
                  description: Reference on settlement journal
                  example: TPFB1111111
                source_currency:
                  type: string
                  description: Settlement currency
                  example: GBP
                source_amount:
                  type: number
                  format: decimal
                  description: The amount Wise paid out on behalf of partner
                  example: -100.1
                target_amount:
                  type: number
                  format: decimal
                  description: Total settlement fund received for this settlement journal
                  example: 100.1
                amount_matched:
                  type: boolean
                  description: Whether amount received matches what is expected
                  example: true
            occurred_at:
              type: string
              format: date-time
              description: When the settlement fund was received
              example: '2024-04-18T06:36:15Z'
    v2.0.0-24:
      title: Schema version 2.0.0
      deprecated: true
      type: object
      properties:
        schema_version:
          type: string
          description: >-
            Version of the event schema. Determined by the `schema_version` on
            your [webhook subscription](/api-reference/legacy/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: f5b51f77-e14a-433b-9f7c-fc2834ffcff5
        event_type:
          type: string
          description: Event type identifier
          example: bulk-settlement#payment-received
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent
          example: '2024-04-18T06:36:17Z'
        data:
          type: object
          properties:
            resource:
              type: object
              properties:
                settlement_reference:
                  type: string
                  description: Reference on settlement journal
                  example: TPFB1111111
                source_currency:
                  type: string
                  description: Settlement currency
                  example: GBP
                received_amount:
                  type: number
                  format: decimal
                  description: >-
                    Please be aware that this field is unreliable. Always refer
                    to the `target_amount` field for the total amount paid, and
                    check the difference between `source_amount` and
                    `target_amount` to see how much more needs to be paid.
                  example: 10.1
                source_amount:
                  type: number
                  format: decimal
                  description: The amount Wise paid out on behalf of partner
                  example: -100.1
                target_amount:
                  type: number
                  format: decimal
                  description: Total settlement fund received for this settlement journal
                  example: 100.1
                amount_matched:
                  type: boolean
                  description: Whether amount received matches what is expected
                  example: true
            occurred_at:
              type: string
              format: date-time
              description: When the settlement fund was received
              example: '2024-04-18T06:36:15Z'
    v4.0.0-28:
      title: Schema version 4.0.0
      type: object
      required:
        - schema_version
        - subscription_id
        - event_type
        - sent_at
        - data
      properties:
        schema_version:
          type: string
          description: >-
            Version of the event schema. Determined by the `schema_version` on
            your [webhook subscription](/api-reference/legacy/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: ced03af9-be76-46ac-ada8-7fe935792290
        event_type:
          type: string
          description: Event type identifier.
          enum:
            - recipients#state-change
          example: recipients#state-change
        sent_at:
          type: string
          format: date-time
          description: Timestamp when the event was sent.
          example: '2026-06-15T13:18:20.265Z'
        data:
          type: object
          required:
            - resource
          properties:
            resource:
              type: object
              required:
                - id
                - occurred_at
                - data
              properties:
                id:
                  type: string
                  description: Resource identifier for the changed recipient.
                  example: '700525176'
                occurred_at:
                  type: string
                  format: date-time
                  description: Timestamp when the recipient state change occurred.
                  example: '2026-06-15T13:18:20.265Z'
                data:
                  type: object
                  required:
                    - recipientId
                    - profileId
                    - currency
                    - state
                    - clientId
                  properties:
                    recipientId:
                      type: integer
                      format: int64
                      description: Recipient account ID.
                      example: 700525176
                    profileId:
                      type: integer
                      format: int64
                      description: Profile ID that owns the recipient.
                      example: 14966143
                    currency:
                      type: string
                      description: Recipient account currency.
                      example: EUR
                    state:
                      type: string
                      description: Recipient state that triggered the event.
                      enum:
                        - CREATE
                        - UPDATE
                        - DEACTIVATE
                        - OBFUSCATE
                        - DELETE
                      example: CREATE
                    clientId:
                      type: string
                      description: Partner client ID associated with the recipient.
                      example: hosted-kyc-test-client
  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/legacy/oauth-token/oauthtokencreate) for details.
    BasicAuth:
      type: http
      scheme: basic
      x-defaultUsername: <client_id>
      x-defaultPassword: <client_secret>
      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.
