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

# Stream Session Status (SSE)

> Real-time session status updates via Server-Sent Events

Stream real-time status updates for a verification session using Server-Sent Events (SSE).

<Warning>
  The SSE endpoint requires your API key. Since browsers' `EventSource` API doesn't support custom headers, you must create a backend proxy. See the [Integration Guide](/v2/identity/integration) for implementation examples.
</Warning>

<Tabs>
  <Tab title="Individual (KYC)">
    #### Request

    ```bash cURL theme={null}
    curl -N "https://api.identity.predicate.io/api/v1/status/realtime/individual/550e8400-e29b-41d4-a716-446655440000" \
      -H "Authorization: Bearer $PREDICATE_KYC_API_KEY"
    ```
  </Tab>

  <Tab title="Business (KYB)">
    #### Request

    ```bash cURL theme={null}
    curl -N "https://api.identity.predicate.io/api/v1/status/realtime/business/550e8400-e29b-41d4-a716-446655440000" \
      -H "Authorization: Bearer $PREDICATE_KYC_API_KEY"
    ```
  </Tab>
</Tabs>

#### Event Stream

```
data: {"sessionId":"550e8400-e29b-41d4-a716-446655440000","status":"pending","verifiedWallets":[],"unverifiedWallets":[{"id":"wallet-uuid","address":"0x1234...","chain":"ethereum"}]}

: keep-alive

data: {"sessionId":"550e8400-e29b-41d4-a716-446655440000","status":"completed","userId":"user-uuid-here","completedAt":"2025-01-21T10:30:00Z","verifiedWallets":[{"id":"wallet-uuid-1","address":"0x1234...","chain":"ethereum"}],"unverifiedWallets":[]}
```

## Endpoint

```
GET https://api.identity.predicate.io/api/v1/status/realtime/{type}/{sessionId}
```

## Path Parameters

<ParamField path="type" type="string" required>
  Verification type: `individual` or `business`
</ParamField>

<ParamField path="sessionId" type="string" required>
  The session ID from the registration response (UUID format)
</ParamField>

## Event Format

Events are sent as `data:` lines with JSON payloads. The server also sends periodic `: keep-alive` comments to maintain the connection.

<ResponseField name="sessionId" type="string" required>
  The session ID
</ResponseField>

<ResponseField name="status" type="string" required>
  Current status: `pending`, `submitted`, `completed`, `rejected`, or `retry`
</ResponseField>

<ResponseField name="userId" type="string">
  User ID (present when session has an identity)
</ResponseField>

<ResponseField name="completedAt" type="string">
  ISO 8601 timestamp (only present when `completed`)
</ResponseField>

<ResponseField name="verifiedWallets" type="array">
  Wallets connected to this session. Only populated when session status is `completed`.
</ResponseField>

<ResponseField name="unverifiedWallets" type="array">
  Wallets connected to this session. Populated when session is not yet `completed`.
</ResponseField>

## Status Values

| Status      | Description                                           |
| ----------- | ----------------------------------------------------- |
| `pending`   | Session created, user in verification process         |
| `submitted` | Documents submitted, awaiting manual operator review  |
| `completed` | Verification successful, user is verified             |
| `rejected`  | Verification permanently failed (fraud, sanctions)    |
| `retry`     | Fixable issue (e.g., blurry document), user can retry |

<Warning>
  **Important:** A `submitted` status means documents are under manual review. The wallet is **not** verified until status becomes `completed`.
</Warning>

## Authentication

```
Authorization: Bearer YOUR_API_KEY
```
