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

# Verify KYC

> Synchronize the user's KYC status against Persona and pick up the result.

<Note>
  Requires `Authorization: Bearer <user-access-token>` — the token from [Verify login code](/api-reference/users/verify-otp). No `X-Api-Key`/`X-Api-Secret` needed; this is a post-login endpoint.
</Note>

Re-synchronizes the user's KYC verification against Persona and returns the current result. Use this after the user completes the Persona flow to pick up the approved status without waiting for the automatic webhook.

If `inquiryId` is omitted, the most recent KYC verification for the user is used.

## Request

```http theme={null}
POST /api/v1/auth/kyc/verify
Authorization: Bearer <user-access-token>
Content-Type: application/json
```

### Body parameters

| Parameter   | Type   | Required | Description                                                                                    |
| ----------- | ------ | -------- | ---------------------------------------------------------------------------------------------- |
| `inquiryId` | string | No       | Persona inquiry ID to check. Defaults to the user's most recent KYC verification when omitted. |

```json theme={null}
{
  "inquiryId": "inq_abc123"
}
```

## Response

**200 OK** — KYC state refreshed from Persona.

```json theme={null}
{
  "success": true,
  "data": {
    "verification": {
      "id": "ver-uuid",
      "status": "approved",
      "providerVerificationId": "inq_abc123",
      "verificationLevel": "standard",
      "riskScore": null,
      "riskLevel": null,
      "submittedAt": "2026-01-01T00:00:00.000Z",
      "reviewedAt": null,
      "approvedAt": "2026-01-15T00:00:00.000Z",
      "createdAt": "2026-01-01T00:00:00.000Z",
      "updatedAt": "2026-01-15T00:00:00.000Z"
    },
    "personaStatus": {
      "inquiryId": "inq_abc123",
      "status": "approved",
      "referenceId": null,
      "createdAt": null,
      "completedAt": null
    },
    "statusChanged": true,
    "userUpdated": true,
    "message": "KYC status updated to approved"
  }
}
```

| Field                      | Type    | Description                                                        |
| -------------------------- | ------- | ------------------------------------------------------------------ |
| `data.verification`        | object  | Latest stored KYC verification for the user                        |
| `data.verification.status` | string  | See status values in [KYC status](/api-reference/users/kyc-status) |
| `data.personaStatus`       | object  | Raw status returned by Persona for the inquiry                     |
| `data.statusChanged`       | boolean | `true` if the stored status was updated as a result of this call   |
| `data.userUpdated`         | boolean | `true` if the user record was updated (e.g. `approvedAt` set)      |
| `data.message`             | string  | Human-readable summary of the outcome                              |

## Errors

| HTTP status | Error              | Cause                                   |
| ----------- | ------------------ | --------------------------------------- |
| `400`       | `VALIDATION_ERROR` | `inquiryId` is not a string             |
| `401`       | `UNAUTHORIZED`     | Missing or invalid token                |
| `404`       | `NOT_FOUND`        | No KYC verification exists for the user |
