Securely create an account and profiles via API
When using the API to create an account and its related profiles, you perform the following basic steps:
- Generate a client credentials token.
- Create a user account with a registration code.
- Retrieve user access tokens with the registration code.
- Create the business profile.
- Add directors and UBOs to the business profile.
Wise reviews the profiles and may request additional verification documents, if necessary.
Send a create OAuth token request to generate the client credentials token.
The Content-Type must be sent as x-www-form-urlencoded and grant_type set to client_credentials.
- Production Environmenthttps://api.wise.com/2026Q3/oauth/token
- Sandbox Environmenthttps://api.wise-sandbox.com/2026Q3/oauth/token
curl -i -X POST \
-u '<client_id>:<client_secret>' \
https://api.wise.com/2026Q3/oauth/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-d grant_type=client_credentialsThe access_token value in the response is your client credentials token, which is valid for 12 hours. You’ll use this token in the authorization header of the create user account request, as well as other application-level requests like subscribing to webhooks.
| Error | Cause | Resolution |
|---|---|---|
401 {"error": "invalid_client", "error_description": "..."} | The client ID or secret is incorrect. | Verify your client ID and secret and try again. |
User accounts serve as the primary entity that holds the profile created in a later step. Send a create user with registration code request to create a new Wise user resource.
- Production Environmenthttps://api.wise.com/2026Q3/user/signup/registration_code
- Sandbox Environmenthttps://api.wise-sandbox.com/2026Q3/user/signup/registration_code
curl -i -X POST \
https://api.wise.com/2026Q3/user/signup/registration_code \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-d '{
"email": "user@email.com",
"registrationCode": "a]#Et6(yLW@mq4Ky_+EAjXxpHGq7*&lr",
"language": "EN"
}'Required request body fields:
| Field | Description |
|---|---|
email | The email address of the user (acts as the unique identifier for a user resource). Correspondent partners use the dummy email Wise provides, in the format <unique-identifier>@partner.wise.com. |
registrationCode | Generate a secure, random string of at least 32 characters. This code acts as the single point of access for the Wise account. Wise does not have access to this code. |
Should the need to generate a new refresh token arise, you must have the registration code used to create the user resource. Without it, you must contact Wise support to assist with generating a new refresh token, which can result in disruption to your integration.
| HTTP status | Error code | Cause and resolution |
|---|---|---|
400 | NotNull | The email or registrationCode field is missing from the request body. Ensure both fields are provided in every request. |
400 | Size | The registration code is shorter than 32 characters. Generate a registration code that is at least 32 characters long. |
409 | NOT_UNIQUE | The email address is already associated with an existing account. Use a different email address, or use the authorisation code flow to access the existing account. |
422 | ERROR | The email address is poorly formatted. Provide a valid email address. |
The user access token allows your application to make requests to the Wise Platform API on behalf of the user you just created, including the next step of creating a profile.
Send a create OAuth token request with the registration_code grant type to exchange the registration code for the tokens.
curl -i -X POST \
-u <client_id>:<client_secret> \
https://api.wise.com/oauth/token \
-H 'Content-Type: application/x-www-form-urlencoded' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-d grant_type=registration_code \
-d client_id=string \
-d email=user@example.com \
-d registration_code=stringRequired data for this request:
client_idandclient_secretgrant_typeis alwaysregistration_codeemailregistration_codeis the same registration code value generated for the create user account request.
The response includes:
| Field | Description |
|---|---|
access_token | The user access token, valid for 12 hours by default. |
refresh_token | A long-lived token, valid for 20 years by default, used to generate new user access tokens. |
Store the refresh token securely and ensure it is never visible to a human. Using a vault service is generally good practice to ensure token security as well as accessibility throughout your systems.
You can now use the user access token to create a business profile.
| HTTP status | Error | Cause and resolution |
|---|---|---|
401 | invalid_grant or "Invalid user credentials." | The registration code is incorrect, or the user has reclaimed the account. Verify the registration code. If the account was reclaimed, contact Wise. |
400 | invalid_request or "Missing grant type" | The grant_type parameter is missing from the request body. Include grant_type=registration_code in the request. |
The business profile and its authorised representative are created together in a single request, so there is no need to create a separate personal profile first. Once you create the business profile, you must then add at least one director and ultimate beneficial owner (UBO) to it.
Send the Create business profile request with the required properties.
Guidance:
- Use the registered business name when creating the profile.
- Provide the authorised signatory's details (name, date of birth, address, and contact details) in the
businessRepresentativeobject. - Date of birth and phone number are used for verification only.
- To reuse a representative already created for another business, pass their
businessRepresentativeIdinstead of the full details. - You can use the optional
X-idempotence-uuidheader (unique per profile creation) to safely handle retries. If omitted and a matching profile already exists, the request returns a409.
- Production Environmenthttps://api.wise.com/2026Q3/profiles/business-profile
- Sandbox Environmenthttps://api.wise-sandbox.com/2026Q3/profiles/business-profile
curl -i -X POST \
https://api.wise.com/2026Q3/profiles/business-profile \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-H 'X-idempotence-uuid: 497f6eca-6276-4993-bfeb-53cbbbba6f08' \
-d '{
"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",
"industryCategories": [
"SOFTWARE_DEVELOPMENT_PUBLISHING",
"IT_CONSULTANCY_TECHNICAL_SUPPORT_SERVICES"
],
"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"
}
}
}'Send a Create director request to add at least one director to the business profile.
- Production Environmenthttps://api.wise.com/2026Q3/profiles/{profileId}/directors
- Sandbox Environmenthttps://api.wise-sandbox.com/2026Q3/profiles/{profileId}/directors
curl -i -X POST \
'https://api.wise.com/2026Q3/profiles/{profileId}/directors' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-d '[
{
"firstName": "John",
"lastName": "Doe",
"dateOfBirth": "1982-05-20",
"countryOfResidenceIso3Code": "usa"
},
{
"firstName": "Jane",
"lastName": "Doe",
"dateOfBirth": "1981-12-07",
"countryOfResidenceIso3Code": "usa"
}
]'Send a Create UBO request to add at least one ultimate beneficial owner (UBO) to the business profile.
All the shareholders that have at least 25% ownership should be submitted via this request. If ownershipPercentage is not required, pass null as the value.
- Production Environmenthttps://api.wise.com/2026Q3/profiles/{profileId}/ubos
- Sandbox Environmenthttps://api.wise-sandbox.com/2026Q3/profiles/{profileId}/ubos
curl -i -X POST \
'https://api.wise.com/2026Q3/profiles/{profileId}/ubos' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-d '[
{
"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
}
]'Wise reviews the profiles and informs you when the account is fully verified and ready for use.
In some cases, Wise may request additional verification documents for enhanced due diligence (EDD). If additional verification is requested, use the upload evidences endpoint to send the requested data, and use the upload documentation endpoint to send related documentation.
Do not use the account until Wise notifies you that verification is complete.
Note that the request bodies vary depending on whether the evidence is for a personal or business profile.
- Production Environmenthttps://api.wise.com/2026Q3/profiles/{profileId}/additional-verification/upload-evidences
- Sandbox Environmenthttps://api.wise-sandbox.com/2026Q3/profiles/{profileId}/additional-verification/upload-evidences
curl -i -X POST \
'https://api.wise.com/2026Q3/profiles/{profileId}/additional-verification/upload-evidences' \
-H 'Authorization: Bearer <YOUR_JWT_HERE>' \
-H 'Content-Type: application/json' \
-H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
-d '{
"accountPurpose": "MOVING_SAVINGS",
"intendedCountries": [
"deu",
"esp"
],
"yearlyAnticipatedVolume": "0_2350",
"mainSourceOfIncome": "SALARY",
"annualIncome": "0_11500"
}'