# Profile Creation

## Getting started with Wise profiles 

Once a Wise user has connected their profile to your application, your system can start interacting with
that profile's Wise Platform API resources.
The Wise Platform API can be used to generate quotes for money transfers, set up recipients for payments, set up
money transfers, and so on as described in our full API documentation.

Once you acquire an API access token for a profile you can immediately start using the API on the customer's behalf.
However, there are some considerations that are important to avoid problems when working with Wise profiles.

### Profile extensions

Some regions demand more profile data due to local regulations, in order to be compliant the extra data has to be provided. This is required based on jurisdiction of operation and customer demographics of your bank or other financial institution, please discuss with your implementation team to see if it is necessary to include the following behaviour. To collect this data please use our [User Profile Extensions](/api-reference/profile/profileextensionrequirementsget) dynamic form endpoint.

### Verification status

Wise is obliged to verify the identity of personal and business profiles as part of our *Know Your Customer* policy. We must be satisfied that we know our customers well enough before conducting financial transactions with them.

*Verification* involves the Wise customer submitting various forms of evidence to us for our consideration.  *Evidence* can include official documents, for example. We may accept or reject such evidence, or consider some evidence as being superior to other forms of evidence.

What evidence we have verified for a profile can affect how successful or how quickly money transfers can be made. For certain values of transfer, or certain currency routes, we may require a certain level of verification. If we do not consider that a profile has been sufficient verified for a particular money transfer, we might delay the processing of the transfer while we seek further information from the customer.

For more information on verification: [How does Wise verify my identity](https://wise.com/help/20/verification/2949801/how-does-transferwise-verify-my-identity)

If you intend to use the Wise Platform API to set up money transfers, then it is desirable for you to know whether such verification issues might delay or prevent transfers from succeeding.  This is particularly relevant for profiles that have just been created as part of linking your application to Wise: new profiles may not yet be verified, and money transfers may be delayed while this process happens,
leading to a bad experience for our customers.

Wise exposes the *verification status* of a profile to help connected applications understand when money transfers are able to be created without such verification issues (but see below for an important caveat).

*Verification status* is a simple indicator of the current level of verification that has been made for a profile to some particular level of confidence: a level that is likely to allow money transfers to occur without being delayed by verification-related issues.

*Verification status* is exposed as a property of a profile: i.e. a profile is *verified* or *not verified*. It is useful to have such a property as a "gate" in the connected application's system that prevents transfers from being created before they are likely to be processed without delays.

Connected applications can query the verification status of a profile using the Wise Platform API.  Wise can also asynchronously notify connected applications about the change in a profile's verification status using a webhook notification.

### Verification status integration strategy

The following strategy may be useful for your integration with respect to profile verification:

1. At some point before going live to your customers, you set up an "application" webhook subscription for verification status change events. This is a single subscription that will allow you to receive verification status events related to any profile that links to your application in the future. (See [webhooks](/guides/developer/webhooks) for more information.)
2. After going live, a user connects their profile to your application using the OAuth authorization flow. (Note that the profile might be an existing, verified profile, or a brand new, unverified profile).
3. During the authorization flow, your system receives an authorization code and Wise profile ID in a request to your callback endpoint (see [User Authorization](/api-reference/oauth-token/oauthtokencreate)). Once API tokens have been acquired using the authorization code, you now have API tokens and the related profile ID: you can now access the profile's API resources.
4. The verification status of the profile is queried using the Wise Platform API. If the response indicates the profile is "verified", you can proceed with transfer operations. If the response indicates "not verified", then transfers are likely to be delayed: you should wait to receive a webhook notification for the customer. However in some cases, users might be allowed to make payments up to a certain limit even though their profile is "not_verified" (see "Bank Transfer Verification Check Result" below).
5. If a profile is unverified, the verification process takes place. Later, when verification completes successfully, you will receive a webhook notification informing you that the profile has become verified: you may then allow transfer creation. (Alternatively, you can continue to poll the API again, but this is not recommended.)


Although we expose verification status as a profile-level property, there are implicit limits to which any VERIFIED status applies.  A VERIFIED status applies to some reasonable limits that customer should not normally reach.  However, it is possible for individual transfers to require additional verification to be performed, even after we have give the profile a verification status of VERIFIED.  Therefore, connected applications should be prepared for verification issues to affect money transfers regardless of the reported VERIFICATION STATUS, althouogh this is not generally expected

### Checking verification status using the API

You can check the verification status of a profile using the following API.
This is a profile-specific API resource which should be accessed using an access token acquired for the profile.

#### Request

**`POST https://api.wise-sandbox.com/v3/profiles/{profileId}/verification-status/bank-transfer?source_currencies=GBP,USD,EUR`**

| Field | Description | Format |
|  --- | --- | --- |
| profileId | Profile ID | Integer |
| source_currencies | List of source currency codes (ISO 4217) | Text |


#### Response

| Field | Description | Format |
|  --- | --- | --- |
| request_id | Unique identifier of the request. | Text |
| routes | List of verification check results for each provided source currency. | Bank Transfer Verification Check Result (see below) |


Example Request
```shell
    curl -X POST 'https://api.wise-sandbox.com/v3/profiles/{{profileId}}/verification-status/bank-transfer?source_currencies=GBP,USD,EUR' \
         -H "Authorization: Bearer <your api token>"
```

Example Response
```json
{
  "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"
}
```

### Bank Transfer Verification Check Result

Represents the verification status of a profile when funding with a bank transfer.

### Schema

| Field | Description | Format |
|  --- | --- | --- |
| source_currency | ISO 4217 currency code. | Text |
| current_status | Current verification status | Verification status code (see below) |
| maximum_entitled_amount | Maximum entitled amount that can be transferred with the user's given verification state. | Decimal |


### Guide on how to process the API response:

| current_status | maximum_entitled_amount | How to process |
|  --- | --- | --- |
| verified | any value | Profile is verified. `maximum_entitled_amount` field can be ignored (note that some regional limits may still apply). |
| not_verified | 0 | Profile is not verified. Any payments from the user will be delayed by verification. |
| not_verified | > 0 | Profile is not verified yet but the user is allowed to make payments up to a certain limit. Once the limit is reached, following payments might be delayed because of additional verification requirements. Please note that the limit is cumulative and not per transfer. This state might allow some users to experience the product immediately even if the verification process isn't complete yet. |


| Verification status code | Description |
|  --- | --- |
| `verified` | The profile is sufficiently verified to start making payments (note that some regional limits may still apply) |
| `not_verified` | The profile is currently awaiting verification or there are pending issues with the verification process |


Please note that we do not expose any finer details of customer verification.

### Verification State Change webhook

You can subscribe to [Webhooks - Verification State Change](/api-reference/webhook-event/eventprofilesverificationstatechange) event type to be
notified when the user is ready to use Wise.

## Create a personal profile

```shell curl
curl -i -X POST \
  https://api.wise.com/v2/profiles/personal-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 '{
    "firstName": "Oliver",
    "lastName": "Wilson",
    "preferredName": "Olivia",
    "firstNameInKana": null,
    "lastNameInKana": null,
    "address": {
      "addressFirstLine": "50 Sunflower Ave",
      "city": "Phoenix",
      "countryIso3Code": "usa",
      "postCode": "10025",
      "stateCode": "AZ"
    },
    "nationality": "usa",
    "dateOfBirth": "1977-07-01",
    "externalCustomerId": "12345-oliver-wilson",
    "contactDetails": {
      "email": "o.wilson@example.com",
      "phoneNumber": "+3725064992"
    },
    "occupations": [
      {
        "code": "Software Engineer",
        "format": "FREE_FORM"
      }
    ]
  }'
```

For request/response details, see the [API reference](/api-reference/profile/profilepersonalcreate).

## Create a business profile

```shell curl
curl -i -X POST \
  https://api.wise.com/v2/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",
      "stateCode": "string"
    },
    "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",
        "stateCode": "string"
      }
    ],
    "webpage": "https://abc-logistics.com"
  }'
```

For request/response details, see the [API reference](/api-reference/profile/profilebusinesscreate).

## Update a personal profile

```shell curl
curl -i -X PUT \
  'https://api.wise.com/v2/profiles/{profileId}/personal-profile' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
  -d '{
    "firstName": "Oliver",
    "lastName": "Wilson",
    "preferredName": "Olivia",
    "firstNameInKana": null,
    "lastNameInKana": null,
    "address": {
      "addressFirstLine": "50 Sunflower Ave",
      "city": "Phoenix",
      "countryIso3Code": "usa",
      "postCode": "10025",
      "stateCode": "AZ"
    },
    "nationality": "usa",
    "dateOfBirth": "1977-07-01",
    "contactDetails": {
      "email": "o.wilson@example.com",
      "phoneNumber": "+3725064992"
    },
    "externalCustomerId": "12345-oliver-wilson",
    "occupations": [
      {
        "code": "Software Engineer",
        "format": "FREE_FORM"
      }
    ]
  }'
```

For request/response details, see the [API reference](/api-reference/profile/profilepersonalupdate).

## Update a business profile

```shell curl
curl -i -X PUT \
  'https://api.wise.com/v2/profiles/{profileId}/business-profile' \
  -H 'Authorization: Bearer <YOUR_JWT_HERE>' \
  -H 'Content-Type: application/json' \
  -H 'X-External-Correlation-Id: f47ac10b-58cc-4372-a567-0e02b2c3d479' \
  -d '{
    "id": 14599371,
    "businessName": "ABC Logistics Ltd",
    "businessNameInKatakana": null,
    "businessFreeFormDescription": "Biz free form desc",
    "registrationNumber": "12144939",
    "acn": null,
    "abn": null,
    "arbn": null,
    "companyType": "LIMITED",
    "address": {
      "addressFirstLine": "1 A road",
      "city": "London",
      "countryIso2Code": "gb",
      "countryIso3Code": "gbr",
      "postCode": "11111",
      "stateCode": "strin"
    },
    "companyRole": "OWNER",
    "externalCustomerId": "67890-biz-acct",
    "firstLevelCategory": "CONSULTING_IT_BUSINESS_SERVICES",
    "secondLevelCategory": "DESIGN",
    "operationalAddresses": [
      {
        "addressFirstLine": "1 A road",
        "city": "London",
        "countryIso2Code": "gb",
        "countryIso3Code": "gbr",
        "postCode": "11111",
        "stateCode": "strin"
      }
    ],
    "webpage": "https://abc-logistics.com"
  }'
```

For request/response details, see the [API reference](/api-reference/profile/profilebusinessupdate).