> ## Documentation Index
> Fetch the complete documentation index at: https://docs.inklink.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Quickstart

> Create a KYC inquiry, send users to IDV, and handle the return URL

## Prerequisites

* Server-side **API key** from the InkLink dashboard (`secret_live_xxx`).
* Send the **`api-key`** header on every request (never from a public client).

## 1. Create an inquiry

The simplest path is to create the inquiry with your stable user key, a return URL, and the verification level you need. Start with **`level`** `1` unless you need the extra checks in higher levels.

<CodeGroup>
  ```bash curl theme={"dark"}
  curl -X POST "https://platform.inklink.com/api/v1/kyc/inquiry" \
    --header "api-key: $INKLINK_API_KEY" \
    --header "Content-Type: application/json" \
    --data '{
      "subject_id": "user_123",
      "return_url": "https://your-app.com/kyc/complete",
      "level": 1
    }'
  ```

  ```python Python theme={"dark"}
  import os
  import requests

  url = "https://platform.inklink.com/api/v1/kyc/inquiry"
  headers = {
      "api-key": os.environ["INKLINK_API_KEY"],
      "Content-Type": "application/json",
  }
  body = {
      "subject_id": "user_123",
      "return_url": "https://your-app.com/kyc/complete",
      "level": 1,
  }
  r = requests.post(url, headers=headers, json=body)
  print(r.json())
  ```

  ```typescript TypeScript theme={"dark"}
  const r = await fetch("https://platform.inklink.com/api/v1/kyc/inquiry", {
    method: "POST",
    headers: {
      "api-key": process.env.INKLINK_API_KEY!,
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      subject_id: "user_123",
      return_url: "https://your-app.com/kyc/complete",
      level: 1,
    }),
  });
  console.log(await r.json());
  ```
</CodeGroup>

Save the **`id`** from the response (e.g. `kyc_iq_…`).

<Note>
  Higher verification levels add more checks. Use **`level`** `2` for address verification, or **`level`** `3` for PEP, AML, and adverse media screening.
</Note>

## 2. Send the user to hosted IDV

Redirect or deep-link:

`https://idv.inklink.com?inquiry_id=<id>`

The hosted app completes verification and sends the user's browser back to your **`return_url`**.

## 3. Read `status` on your return URL

When the flow finishes, IDV redirects to the **`return_url`** you set at create time, with two query parameters added:

| Parameter        | Description                                                          |
| ---------------- | -------------------------------------------------------------------- |
| **`status`**     | `pending`, `manual_review`, `approved`, or `rejected`                |
| **`inquiry_id`** | The same inquiry **`id`** from the create response (e.g. `kyc_iq_…`) |

Example:

`https://your-app.com/kyc/complete?status=approved&inquiry_id=kyc_iq_xxx`

Use that landing route to decide what to show next.

### Optional: full result JSON

If you need extra fields (timestamps, etc.) beyond **`status`**, call the result endpoint from your server:

`GET https://platform.inklink.com/api/v1/kyc/inquiry/<inquiry_id>/result`

<CodeGroup>
  ```bash curl theme={"dark"}
  curl "https://platform.inklink.com/api/v1/kyc/inquiry/kyc_iq_xxx/result" \
    --header "api-key: $INKLINK_API_KEY"
  ```
</CodeGroup>

The response includes **`status`** and other metadata, but not raw document or evidence payloads. Use the dashboard for those.

See [Error handling](/error-handling) and the [OpenAPI reference](/api-reference/endpoint/kyc-inquiry-result).
