openapi: 3.1.0
info:
title: Wise Platform 3ds bank-account-details API
version: ''
description: "The Wise Platform API is a REST-based interface that enables programmatic access to Wise's payment infrastructure. All endpoints return JSON-formatted responses and use standard HTTP methods and status codes.\n{% admonition type=\"success\" name=\"New to wise?\" %}\n We strongly recommend first reading our **[Getting Started Guide](/guides/developer/index.md)** to help you set up credentials and make your first call.\n{% /admonition %}\n\nBefore you begin {% .title-2 .m-t-5 %}\n\nTo use this API reference effectively, you should have:\n\n- Received Valid [API credentials from Wise](/guides/developer/auth-and-security/index.md) (Client ID and Client Secret)\n- Understand OAuth 2.0 authentication\n- Be familiar with RESTful API concepts\n\nCore API resources {% .title-2 .m-t-5 .m-b-0 %}\n\n| Resource | Purpose |\n|----------|---------|\n| **[Quote](/api-reference/quote)** | Exchange rate and fee calculations |\n| **[Recipient](/api-reference/recipient)** | Beneficiary account management |\n| **[Transfer](/api-reference/transfer)** | Payment creation and execution |\n| **[Balance](/api-reference/balance)** | Multi-currency account operations |\n| **[Profile](/api-reference/profile)** | Account ownership details |\n| **[Rate](/api-reference/rate)** | Current and historical exchange rates |\n\n**Not sure which workflow to build?**
\nStart with our [Integration Guides](/guides/product/send-money/use-cases/index.md) for step-by-step implementation examples.{% .m-t-3 .m-b-5 %}\n"
servers:
- url: https://api.wise.com
description: Production Environment
- url: https://api.wise-sandbox.com
description: Sandbox Environment
tags:
- 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.
'
paths:
/v1/profiles/{profileId}/account-details-orders:
post:
tags:
- bank-account-details
summary: Create bank account details order
operationId: bankAccountDetailsOrderCreate
security:
- UserToken: []
- PersonalToken: []
description: 'Creates an order which will issue account details. It should use the same currency as the balance previously created. Fulfilling all the requirements will complete the order, reaching status `DONE`.
The possible values for a requirement status are:
- `PENDING_USER`: The requirement has some pending action from the user.
- `PENDING_TW`: The requirement has some pending action from Wise.
- `DONE`: The requirement is completed.
The more common requirements are:
- `VERIFICATION`: The user needs to be fully verified before completing this requirement.
- `TOP_UP`: A fee will be charged and must be paid through wise.com before completing this requirement.
'
parameters:
- name: profileId
in: path
required: true
schema:
type: integer
format: int64
example: 12345678
description: The ID of the profile to create the bank account details order for.
- $ref: '#/components/parameters/X-External-Correlation-Id'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- currency
properties:
currency:
type: string
description: Balance currency (ISO 4217 Alphabetic Code).
example: EUR
responses:
'200':
description: Bank account details order created.
content:
application/json:
schema:
type: object
properties:
status:
type: string
description: Order status.
enum:
- PENDING_USER
- PENDING_TW
- DONE
example: PENDING_USER
currency:
type: string
description: Currency code (ISO 4217 Alphabetic Code).
example: EUR
requirements:
type: array
description: List of requirements to fulfill the order.
items:
type: object
properties:
type:
type: string
description: Requirement type.
enum:
- VERIFICATION
- TOP_UP
example: VERIFICATION
status:
type: string
description: Requirement status.
enum:
- PENDING_USER
- PENDING_TW
- DONE
example: PENDING_USER
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'429':
$ref: '#/components/responses/429'
get:
tags:
- bank-account-details
summary: List bank account detail orders (v1)
operationId: bankAccountDetailsOrdersListV1
deprecated: true
security:
- UserToken: []
- PersonalToken: []
description: 'Returns the bank account assignment requests for a profile and multi-currency account.
{% admonition type="warning" %}
This endpoint is deprecated. Please use the [v3 endpoint](/api-reference/bank-account-details/bankaccountdetailsorderslist) instead.
{% /admonition %}
'
parameters:
- name: profileId
in: path
required: true
schema:
type: integer
format: int64
example: 12345678
description: The ID of the profile to list bank account detail orders for.
- $ref: '#/components/parameters/X-External-Correlation-Id'
responses:
'200':
description: A list of bank account detail orders.
content:
application/json:
schema:
type: array
items:
type: object
properties:
status:
type: string
description: Order status.
enum:
- PENDING_USER
- PENDING_TW
- DONE
example: PENDING_USER
currency:
type: string
description: Currency code (ISO 4217 Alphabetic Code).
example: EUR
requirements:
type: array
description: List of requirements for the order.
items:
type: object
properties:
type:
type: string
description: Requirement type.
enum:
- VERIFICATION
- TOP_UP
example: TOP_UP
status:
type: string
description: Requirement status.
enum:
- PENDING_USER
- PENDING_TW
- DONE
example: PENDING_USER
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'429':
$ref: '#/components/responses/429'
/v3/profiles/{profileId}/bank-details:
post:
tags:
- bank-account-details
summary: Create multiple bank account details
operationId: bankAccountDetailsBankDetailsCreate
security:
- UserToken: []
description: 'Creates and assigns a pair of local account details and international account details (where available) that are linked to the target balance specified in the request.
{% admonition type="warning" %}
Please reach out to our Support Team for access to this endpoint.
{% /admonition %}
'
parameters:
- name: profileId
in: path
required: true
schema:
type: integer
format: int64
example: 12345678
description: The ID of the profile to create bank account details for.
- $ref: '#/components/parameters/X-External-Correlation-Id'
requestBody:
required: true
content:
application/json:
schema:
type: object
required:
- targetAccountId
properties:
targetAccountId:
type: integer
format: int64
description: ID of the currency balance to create account details on.
example: 123456
responses:
'200':
description: Bank account details created.
content:
application/json:
schema:
type: object
properties:
id:
type: string
description: Account detail ID.
example: '2'
currency:
type: string
description: Account detail currency (ISO 4217 Alphabetic Code).
example: GBP
active:
type: boolean
description: Status of the account detail.
example: true
localDetails:
type: object
description: Local bank account details.
properties:
bankName:
type: string
description: Name of the bank.
example: Wise
bankAddress:
type: string
description: Address of the bank.
example: TEA BUILDING, FLOOR 6, SHOREDITCH HIGH STREET
sortCode:
type: string
description: Sort code of the bank.
example: '231370'
accountNumber:
type: string
description: Bank account number.
example: '00000001'
type:
type: string
description: Type of account detail.
example: UK_ACCOUNT
internationalDetails:
type:
- object
- 'null'
description: International bank account details. Only returned if SWIFT payments are supported for that currency.
properties:
bankName:
type: string
description: Name of the bank.
example: Wise
bankAddress:
type: string
description: Address of the bank.
example: TEA BUILDING, FLOOR 6, SHOREDITCH HIGH STREET
swiftCode:
type: string
description: Bank SWIFT code.
example: TRWIGB22XXX
iban:
type: string
description: IBAN.
example: GB123450000000001
type:
type: string
description: Type of account detail.
example: IBAN
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'429':
$ref: '#/components/responses/429'
/v1/profiles/{profileId}/account-details:
get:
tags:
- bank-account-details
summary: Retrieve bank account details
operationId: bankAccountDetailsGet
security:
- UserToken: []
- PersonalToken: []
description: 'Returns a list with all the `AVAILABLE` and `ACTIVE` account details for the given profile, including examples. Account receive options can also include local and international details to receive money on the currency balance.
Example bank account details are returned for any currency where bank account details have not been requested and issued. Examples will always include an `id` of `null`.
'
parameters:
- name: profileId
in: path
required: true
schema:
type: integer
format: int64
example: 12345678
description: The ID of the profile to retrieve bank account details for.
- $ref: '#/components/parameters/X-External-Correlation-Id'
responses:
'200':
description: A list of bank account details.
content:
application/json:
schema:
type: array
items:
$ref: '#/components/schemas/BankAccountDetails'
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'429':
$ref: '#/components/responses/429'
/v3/profiles/{profileId}/account-details-orders:
get:
tags:
- bank-account-details
summary: List bank account detail orders
operationId: bankAccountDetailsOrdersList
security:
- UserToken: []
- PersonalToken: []
description: 'Returns the bank account assignment requests for a profile and multi-currency account.
The response includes bank-details orders in the following statuses: `PENDING_USER`, `PENDING_TW`, `REQUIREMENTS_FULFILLED`, `DONE`.
'
parameters:
- name: profileId
in: path
required: true
schema:
type: integer
format: int64
example: 12345678
description: The ID of the profile to list bank account detail orders for.
- name: currency
in: query
required: true
schema:
type: string
example: GBP
description: Currency code (ISO 4217 Alphabetic Code).
- $ref: '#/components/parameters/X-External-Correlation-Id'
responses:
'200':
description: A list of bank account detail orders.
content:
application/json:
schema:
type: array
items:
type: object
properties:
status:
type: string
description: Order status.
enum:
- PENDING_USER
- PENDING_TW
- REQUIREMENTS_FULFILLED
- DONE
example: DONE
currency:
type: string
description: Currency code (ISO 4217 Alphabetic Code).
example: EUR
requirements:
type: array
description: List of requirements for the order.
items:
type: object
properties:
type:
type: string
description: Requirement type.
enum:
- VERIFICATION
- TOP_UP
example: TOP_UP
status:
type: string
description: Requirement status.
enum:
- PENDING_USER
- PENDING_TW
- DONE
example: DONE
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'429':
$ref: '#/components/responses/429'
/v1/profiles/{profileId}/account-details/payments/{paymentId}/returns:
post:
tags:
- bank-account-details
summary: Create payment return
operationId: bankAccountDetailsReturnsCreate
security:
- UserToken: []
description: 'Creates a return for a payment received to bank account details.
When you create a return, you must provide the ID of the payment you wish to return as well as the ID of the profile that received the payment. In addition, you can provide a `reason` for the return in the request body. When returning SWIFT payments, `reason` is a required field.
'
parameters:
- name: profileId
in: path
required: true
schema:
type: integer
format: int64
example: 12345678
description: The ID of the profile that received the payment.
- name: paymentId
in: path
required: true
schema:
type: integer
format: int64
example: 987654321
description: The ID of the payment to return.
- $ref: '#/components/parameters/X-External-Correlation-Id'
requestBody:
required: false
content:
application/json:
schema:
type: object
properties:
reason:
type: string
description: 'Reason for the return. Required when returning SWIFT payments.
'
enum:
- INCORRECT_ACCOUNT_NUMBER
- CLOSED_ACCOUNT
- BLOCKED_ACCOUNT
- CANCELLATION_REQUEST
- REGULATORY
- CUSTOMER_REQUEST
example: CLOSED_ACCOUNT
responses:
'201':
description: Payment return created.
content:
application/json:
schema:
type: object
properties:
id:
type: string
format: uuid
description: ID of the return created.
example: 4cc39f2b-3513-453d-8792-9ccc22e513c3
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'400':
description: Invalid request.
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
description: Error code.
example: error.payment-return.invalid
message:
type: string
description: Error message.
example: A valid reason is required to return a Swift payment
arguments:
type: array
description: Additional context values related to the error.
items: {}
example:
- 987654321
- 123456789
- null
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'404':
description: Payment not found.
content:
application/json:
schema:
type: object
properties:
errors:
type: array
items:
type: object
properties:
code:
type: string
description: Error code.
example: error.payment.not-found
message:
type: string
description: Error message.
example: No payment found with id [123456789] for profile id [987654321]
arguments:
type: array
description: Additional context values related to the error.
items: {}
example:
- 987654321
- 123456789
- null
headers:
X-External-Correlation-Id:
$ref: '#/components/headers/X-External-Correlation-Id'
x-trace-id:
$ref: '#/components/headers/x-trace-id'
'429':
$ref: '#/components/responses/429'
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
schemas:
BankAccountDetails:
type: object
title: Bank Account Details
x-tags:
- bank-account-details
description: Bank account details for receiving money into a Wise Multi-Currency Account.
properties:
id:
type:
- integer
- 'null'
format: int64
description: Bank account details ID. Returns `null` for preview account details that have not yet been issued.
example: 14000001
currency:
type: object
description: Currency information for the bank account details.
properties:
code:
type: string
description: Currency code (ISO 4217 Alphabetic Code).
example: EUR
name:
type: string
description: Currency name.
example: Euro
title:
type: string
description: Account title.
example: Your EUR account details
subtitle:
type: string
description: Account subtitle.
example: IBAN, SWIFT/BIC
status:
type: string
description: 'Account details status:
- `AVAILABLE`: Account details do not exist for the user but may be created
- `ACTIVE`: Account details are ready to be used by this user
'
enum:
- AVAILABLE
- ACTIVE
example: ACTIVE
deprecated:
type: boolean
description: When `true`, Wise has issued new account details for the same currency. Users should not use the deprecated account but may still have external references to it.
example: false
receiveOptions:
type: array
description: 'Available receive options for the given currency:
- `LOCAL`: Local bank details to receive money in the account currency
- `INTERNATIONAL`: SWIFT bank details to receive money internationally
'
items:
type: object
properties:
type:
type: string
description: Receive option type.
enum:
- LOCAL
- INTERNATIONAL
example: LOCAL
title:
type: string
description: Display title for this receive option.
example: Local
description:
type:
- object
- 'null'
description: Description for this receive option.
properties:
title:
type: string
description: Description title.
example: Your EUR account details
body:
type: string
description: Description body text.
example: Receive from a bank in the Eurozone
cta:
type:
- object
- 'null'
description: Call-to-action details.
properties:
label:
type: string
description: CTA label.
example: IBAN
content:
type: string
description: CTA content.
example: BE12 3456 7890 1234
details:
type: array
description: 'Account details to display to users. This array varies by currency.
For example, EUR returns `ACCOUNT_HOLDER`, `SWIFT_CODE`, `IBAN` and `BANK_NAME_AND_ADDRESS`.
'
items:
type: object
properties:
type:
type: string
description: Account detail type.
example: IBAN
title:
type: string
description: Label to display in the UI.
example: IBAN
body:
type: string
description: Value to display in the UI.
example: BE12 3456 7890 1234
description:
type:
- object
- 'null'
description: Tooltip/popup hint content when present.
properties:
title:
type: string
description: Description title.
example: What is an IBAN?
body:
type: string
description: Description body (may contain HTML).
example:
IBAN stands for International Bank Account Number.
cta: type: - object - 'null' description: Call-to-action details. properties: label: type: string description: CTA label. example: IBAN content: type: string description: CTA content. example: BE12 3456 7890 1234 hidden: type: boolean description: Whether the field should be hidden in the UI. example: false bankFeatures: type: array description: Features enabled on the account. items: type: object properties: key: type: string description: Feature identifier. example: LOCAL_RECEIVE title: type: string description: Human-readable feature name. example: Receive locally supported: type: boolean description: Whether the feature is supported. example: true headers: X-External-Correlation-Id: x-global: true description: Echoed back when `X-External-Correlation-Id` was included in the request. [Learn more](/guides/developer/headers/correlation-id). schema: type: string format: uuid maxLength: 36 example: f47ac10b-58cc-4372-a567-0e02b2c3d479 x-trace-id: x-global: true description: Unique trace identifier assigned by Wise. Useful when contacting support about a specific request. schema: type: string example: fba501b6d453b96789f52338f019341f responses: '429': x-global: true description: Rate limit exceeded. Retry after the number of seconds specified in the `Retry-After` header. headers: Retry-After: description: Number of seconds to wait before retrying the request. schema: type: integer example: 5 X-Rate-Limited-By: description: Identifies the rate limiter that triggered the 429 response. schema: type: string example: wise-public-api X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' content: application/json: schema: type: object securitySchemes: UserToken: type: http scheme: bearer bearerFormat: JWT description: 'User Access Token for making API calls on behalf of a Wise user. Can be obtained via two OAuth 2.0 flows: - **registration_code grant**: For partners creating users via API - **authorization_code grant**: For partners using Wise''s authorization page Access tokens are valid for 12 hours and can be refreshed using a refresh token. ' PersonalToken: type: http scheme: bearer bearerFormat: JWT description: 'Personal API Token for individual personal or small business users. Generated from Wise.com > Settings > Connect and manage apps > API tokens. Has limited API access compared to OAuth tokens (PSD2 restrictions apply for EU/UK users). ' ClientCredentialsToken: type: http scheme: bearer bearerFormat: JWT description: 'Application-level token for partner operations that don''t require a specific user context, such as bulk settlement and card spend controls. Obtained via `POST /oauth/token` with Basic Authentication (client-id:client-secret) and `grant_type=client_credentials`. Valid for 12 hours. No refresh token — fetch a new token when expired. See [create an OAuth token](/api-reference/oauth-token/oauthtokencreate) for details. ' BasicAuth: type: http scheme: basic description: 'Basic Authentication using your Client ID and Client Secret as the username and password. Client credentials are provided by Wise when your partnership begins. See [Getting Started](/guides/developer) for details. ' x-tagGroups: - name: Authentication tags: - oauth-token - name: Enhanced Security tags: - jose - name: Users tags: - user - claim-account - name: Profiles tags: - profile - activity - address - name: Verification tags: - kyc-review - verification - facetec - name: Strong Customer Authentication tags: - sca-ott - sca-sessions - sca-pin - sca-facemaps - sca-device-fingerprints - sca-otp - user-security - name: Balances tags: - balance - balance-statement - bank-account-details - multi-currency-account - name: Cards tags: - card - card-sensitive-details - 3ds - card-kiosk-collection - card-order - card-transaction - spend-limits - spend-controls - digital-wallet - disputes - name: Quotes tags: - quote - rate - comparison - name: Recipients tags: - recipient - contact - name: Transfers tags: - transfer - delivery-estimate - currencies - batch-group - name: Funding tags: - payin-deposit-detail - direct-debit-account - bulk-settlement - payins - name: Webhooks tags: - webhook - webhook-event - name: Simulations tags: - simulation - name: Partner Support tags: - case