Skip to main content

Documentation Index

Fetch the complete documentation index at: https://supahooks.ar27111994.dev/llms.txt

Use this file to discover all available pages before exploring further.

GET /log-stream opens a persistent Server-Sent Events (SSE) connection that delivers webhook capture events as they are ingested. This lets you watch live traffic without polling /logs. Authentication: Required when authKey is configured.

Connection behavior

  • Compression is disabled on this route to ensure SSE frames are flushed immediately.
  • The server enforces a maximum of 100 concurrent SSE clients. When this limit is reached, new connection attempts receive 503 Service Unavailable.
  • There is no server-side webhookId filter. All events from all active webhooks are streamed to every connected client. Filter by webhookId in your client code.

Wire format

The stream uses standard SSE data: frames for event payloads and SSE comment frames (: ...) for connection and keepalive traffic. There is no named event: field in the current implementation.
: connected

data: {"id":"evt_123","webhookId":"wh_abc123","method":"POST","statusCode":200}

: heartbeat
  • : connected — sent immediately after the connection is established.
  • data: {...} — a JSON object containing the live ingestion event.
  • : heartbeat — sent every 30 seconds as a keepalive comment to prevent proxy and load balancer timeouts.
The streamed event shape is the live ingestion payload produced by the middleware, not the paginated DuckDB response shape returned by GET /logs.

Examples

curl -N \
  -H "Authorization: Bearer your-shared-secret" \
  "https://<run-id>.runs.apify.net/log-stream"

503 when client limit is reached

{
  "status": 503,
  "error": "Service Unavailable",
  "message": "Maximum concurrent SSE client limit reached"
}