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

# Sessions

> One verification run for a developer's user. Idempotent on (workflow_id, vendor_data) while active.

A **session** is a single verification run for one of your users against a chosen workflow.

```bash theme={null}
curl -X POST https://identity.contra.id/v1/sessions \
  -H "x-api-key: $CONTRA_KEY" -H "Content-Type: application/json" \
  -d '{
    "workflow_id":  "enhanced_kyc",
    "vendor_data":  "user-abc-123",
    "callback":     "https://yourapp.com/webhook"
  }'
```

## Statuses

`pending → in_progress → in_review | declined | approved` (+ `expired`).

## Idempotency

Posting twice with the same `(workflow_id, vendor_data)` while a session is still **active** returns the existing one — never two parallel sessions for the same user.

## Webhooks

Set `callback` on the session (or one global webhook destination) and Contra POSTs `{ session_id, status, vendor_data, decision }` on every status transition.

See [webhooks](/integrate/webhooks).
