openapi: 3.1.0 info: title: Wise Platform 3ds user-security 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: user-security x-displayName: User Security description: '{% admonition type="warning" %} These endpoints are deprecated. Please refer to [PIN](/api-reference/sca-pin), [Facemaps](/api-reference/sca-facemaps), and [Device Fingerprints](/api-reference/sca-device-fingerprints) to integrate with SCA. {% /admonition %} User security allows users to set up security-related protections over the API. ' paths: /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' /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' /v1/user/pin: post: deprecated: true operationId: userSecurityPinCreate summary: Create PIN description: 'Create PIN for a user as a form of authentication. Can be used to [verify pin](/api-reference/sca-pin/ottpinverify) when accessing a strongly protected endpoint via [One Time Token Framework](/api-reference/sca-ott). The request and response are encrypted using the JOSE framework. Please refer to the [JOSE JWE guide](/guides/developer/auth-and-security/jose-jwe) to understand how encryption and decryption work. ' tags: - user-security security: - UserToken: [] parameters: - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: "curl -X POST \\\n 'https://api.wise-sandbox.com/v1/user/pin' \\\n -H 'Authorization: Bearer ' \\\n -H 'Accept: application/jose+json' \\\n -H 'Accept-Encoding: identity' \\\n -H 'Content-Type: application/jose+json' \\\n -H 'Content-Encoding: identity' \\\n -H 'X-TW-JOSE-Method: jwe' \\\n -d 'eyJlbmMiOiJBMjU2R0NNIiwi...'\n" requestBody: required: true content: application/jose+json: schema: type: string description: 'A JWE encrypted string. The decrypted payload contains: - `pin` — A four-digit string. Payload before encryption: ```json {"pin": "1234"} ``` ' example: responses: '204': description: PIN is created successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: PIN has already been created. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/users/{userId}/pin: delete: deprecated: true operationId: userSecurityPinDelete summary: Delete PIN description: 'Remove the PIN from the user''s account. {% admonition type="warning" %} This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API. {% /admonition %} ' tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: PIN is deleted successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: PIN is not setup for this user. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string example: errors: - code: pin.not.setup message: PIN has not been setup. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/user/facemap/enrol: post: deprecated: true operationId: userSecurityFacemapEnrol summary: Enrol FaceMap description: 'Facial biometric enrolment for Strong Customer Authentication (SCA). Can be used to [verify facemap](/api-reference/sca-facemaps/ottfacemapverify) when accessing a strongly protected endpoint via [One Time Token Framework](/api-reference/sca-ott). ' tags: - user-security security: - UserToken: [] requestBody: required: true content: application/json: schema: type: object properties: faceMap: type: string description: 'Base64-encoded binary data as a string. For more details how to get this binary, please read FaceTec''s [export API](https://dev.facetec.com/api-guide#export-3d-facemap). To retrieve Wise''s FaceTec public key, please refer to our FaceTec''s [Get Public Key API](/api-reference/facetec/facetecpublickeyget). ' responses: '204': description: Enrollment is successful. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: FaceMap has already been enrolled. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' parameters: - $ref: '#/components/parameters/X-External-Correlation-Id' /v1/users/{userId}/facemap/enrol: delete: deprecated: true operationId: userSecurityFacemapDelete summary: Delete FaceMap description: 'Remove the FaceMap from the user''s account. {% admonition type="warning" %} This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API. {% /admonition %} ' tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: FaceMap is deleted successfully. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: FaceMap is not setup for this user. content: application/json: schema: type: object properties: errors: type: array items: type: object properties: code: type: string message: type: string example: errors: - code: facemap.not.setup message: FaceMap has not been setup. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/user/partner-device-fingerprints: post: deprecated: true operationId: userSecurityDeviceFingerprintCreate summary: Create Device Fingerprint description: 'A device fingerprint represents a string that identifies a unique device. This endpoint is used to register the fingerprint of the device as one of the allowed devices used during an One Time Token (OTT) challenge. This can be used to [verify device fingerprint](/api-reference/sca-device-fingerprints/ottdevicefingerprintverify) when clearing a [OTT](/api-reference/sca-ott). The request and response are encrypted using the JOSE framework. Please refer to the [JOSE JWE guide](/guides/developer/auth-and-security/jose-jwe) to understand how encryption and decryption work. ' tags: - user-security security: - UserToken: [] parameters: - name: Accept in: header required: true schema: type: string default: application/jose+json - name: Accept-Encoding in: header required: true schema: type: string default: identity - name: Content-Encoding in: header required: true schema: type: string default: identity - name: X-tw-jose-method in: header required: true schema: type: string default: jwe - $ref: '#/components/parameters/X-External-Correlation-Id' x-codeSamples: - lang: bash label: cURL source: "curl -X POST \\\n 'https://api.wise-sandbox.com/v1/user/partner-device-fingerprints' \\\n -H 'Authorization: Bearer ' \\\n -H 'Accept: application/jose+json' \\\n -H 'Accept-Encoding: identity' \\\n -H 'Content-Type: application/jose+json' \\\n -H 'Content-Encoding: identity' \\\n -H 'X-TW-JOSE-Method: jwe' \\\n -d 'eyJlbmMiOiJBMjU2R0NNIiwiYWxnIjoiUlNBLU9BRVAtMjU2In0.W0fuxaZOoyaBcx...'\n" requestBody: required: true content: application/jose+json: schema: type: string description: 'A JWE encrypted string. The decrypted payload contains: - `deviceFingerprint` — A string value used as a device fingerprint. Payload before encryption: ```json {"deviceFingerprint": "3207da22-a0d3-4b6b-a591-6297e646fe32"} ``` ' example: responses: '200': description: The device fingerprint has been successfully created. content: application/json: schema: type: object properties: deviceFingerprintId: type: string format: uuid description: Identifier of the device fingerprint. createdAt: type: string format: date-time description: Timestamp on when the device fingerprint was created. example: deviceFingerprintId: 636a5514-aa86-4719-8700-e9a9a0ae7ea7 createdAt: '2024-05-24T07:27:58.273205554Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '400': description: Maximum number of device fingerprints reached (defaulted to 3). headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '409': description: The device fingerprint has already been created. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/users/{userId}/partner-device-fingerprints: get: deprecated: true operationId: userSecurityDeviceFingerprintList summary: List Device Fingerprints description: 'Returns a list of device fingerprints created for this user. {% admonition type="warning" %} This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API. {% /admonition %} ' tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '200': description: OK content: application/json: schema: type: array items: type: object properties: deviceFingerprintId: type: string format: uuid description: Identifier of the device fingerprint. createdAt: type: string format: date-time description: Timestamp on when the device fingerprint was created. example: - deviceFingerprintId: 636a5514-aa86-4719-8700-e9a9a0ae7ea7 createdAt: '2024-05-24T07:27:58.273205554Z' headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: The user is not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' /v1/users/{userId}/partner-device-fingerprints/{deviceFingerprintId}: delete: deprecated: true operationId: userSecurityDeviceFingerprintDelete summary: Delete Device Fingerprint description: 'Remove a specific device fingerprint from the allowed devices of a user. {% admonition type="warning" %} This endpoint is restricted and requires both a client credentials token and additional access to use. Please speak with your implementation manager if you would like to use this API. {% /admonition %} ' tags: - user-security security: - ClientCredentialsToken: [] parameters: - name: userId in: path required: true description: User ID. schema: type: integer format: int64 - name: deviceFingerprintId in: path required: true description: Device fingerprint ID. schema: type: string format: uuid - $ref: '#/components/parameters/X-External-Correlation-Id' responses: '204': description: Device fingerprint has been successfully removed. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '404': description: User or deviceFingerprintId is not found. headers: X-External-Correlation-Id: $ref: '#/components/headers/X-External-Correlation-Id' x-trace-id: $ref: '#/components/headers/x-trace-id' '429': $ref: '#/components/responses/429' 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: 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 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