---
title: "Stream asset verification events (SSE)"
method: GET
path: "/api/v1/verify/request/{id}/assets/{assetIndex}/events"
tags: ["Verify"]
---

# Stream asset verification events (SSE)

`GET /api/v1/verify/request/{id}/assets/{assetIndex}/events`

## Request

- Base URL: `https://api.proof.holdings`
- URL: `https://api.proof.holdings/api/v1/verify/request/{id}/assets/{assetIndex}/events`
- Auth: none declared

Subscribe to real-time per-asset verification status updates via Server-Sent Events. Public endpoint (optional JWT for owner identification). Sends a `connected` event on open — `{request_id, asset_index, status, request_status}` — then `update` events `{status, timestamp}` as the asset changes.

An `update` whose `status` is `verified`, `cancelled` or `expired` is the last one: the server closes the stream after it. `cancelled` and `expired` come from the request (the asset itself stays `pending`) and carry `request_status`. `failed` does not close the stream, since a failed asset can be started again. When the request is already closed at connect time — cancelled, expired, or this asset verified — the stream is `connected`, one such `update`, and the close.

Rate limited: 10 connections per minute per IP. Includes heartbeat to keep connection alive through Cloudflare.

## Path parameters

- `id` string, required: MongoDB ObjectId
- `assetIndex` string, required: Asset index (0-based)

## Response `200`

SSE event stream

## Other responses

- `404`: Request or asset not found
- `429`: Rate limit exceeded or too many concurrent SSE connections
- `503`: Server SSE capacity exhausted

---

[API](https://skmtc.dev/proof/apis/proof-holdings-api.md) · [All operations](https://skmtc.dev/proof/apis/proof-holdings-api/llms.txt) · [OpenAPI document](https://skmtc.dev/proof/apis/proof-holdings-api/revisions/b15f506de696?raw)
