> For the complete documentation index, see [llms.txt](https://partner.doc.bunq.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://partner.doc.bunq.com/documentation/bunq-as-a-service/chapter-2-onboarding/complete-identity-verification-with-sdk.md).

# Complete Identity Verification with SDK

## Step 1: Request an Identity Verification model

**Endpoint:**

```http
POST /v1/user/{user_id}/identity-verification-session

{
    "purpose": "VERIFICATION",
    "provider": "INCODE"
}
```

**Response:**

```json
{
    "Response": [
        {
            "Id": {
                "id": 36
            }
        }
    ]
}
```

## Step 2: Obtain the session-token that SDK requires to launch

**Endpoint:**

```http
GET /v1/user/{user_id}/identity-verification-session/36
```

**Response:**

```json
{
    "Response": [
        {
            "IdentityVerificationSessionIncode": {
                "id": 36,
                "created": "2025-10-31 16:38:53.872547",
                "updated": "2025-10-31 16:38:53.872547",
                "purpose": "VERIFICATION",
                "applicant_identifier_external": null,
                "session_identifier_external": "incode_token",
                "country": "NL",
                "status": "CREATED",
                "token": "token_value_123",
                "url_api": "https://demo-api.incodesmile.com/0/",
                "should_record_session": true,
                "result": null
            }
        }
    ]
}
```

## Step 3: Pass the information to the SDK

Here, the token should be passed to the SDK in order for the session to start. User will then interact with it and they will apply facial verification and ID check. After it is done, your app will obtain a confirmation from the SDK, then you need to inform bunq using the following endpoint.

**Endpoint:**

```html
PUT /v1/user/{user_api_key_id}/identity-verification-session/36
```

**Request Body:**

```json
{
    "status": "SUBMITTED"
}
```

**Response:**

```json
{
    "Response": [
        {
            "Id": {
                "id": 36
            }
        }
    ]
}
```

## Step 4: Keep polling until the result is completed

**Endpoint:**

```http
GET /v1/user/{user_api_key_id}/identity-verification-session/36
```

**Response:**

```json
{
    "Response": [
        {
            "IdentityVerificationSessionIncode": {
                "id": 65541,
                "created": "2026-02-11 17:27:05.919648",
                "updated": "2026-02-11 17:32:16.341035",
                "purpose": "VERIFICATION",
                "applicant_identifier_external": null,
                "session_identifier_external": "698cbbe9e7347373266069e7",
                "country": "PL",
                "status": "PROCESSED",
                "token": "token_value_123",
                "url_api": "https://demo-api.incodesmile.com/0/",
                "should_record_session": true,
                "result": {
                    "id": 74332,
                    "created": "2026-02-11 17:32:28.153774",
                    "updated": "2026-02-11 17:32:28.153774",
                    "user_id": 3576870,
                    "purpose": "VERIFICATION",
                    "provider": "INCODE",
                    "result": "APPROVED",
                    "identity_verification_session_id": 65541,
                    "all_attachment": [
                        "AttachmentUser" {
                        ......
                        }
                    ],
                    "all_fail_reason": []
                }
            }
        }
    ]
}
```

Now, user identity verification is completed and user is Approved, you can continue with finalizing the rest of the fulfillments.
