---
title: "Replay public whale-trade intelligence events"
method: GET
path: "/api/v1/events/feed/since"
tags: ["Events"]
---

# Replay public whale-trade intelligence events

`GET /api/v1/events/feed/since`

Returns durable public whale-trade intelligence events strictly after an opaque cursor backed by whale_alerts.id. This is a separate API-key contract from the browser/session /api/events/feed stream: browser-only and private alert, following, radar, and position patch events are excluded until they have a durable public outbox.

## Query parameters

- `cursor` string
- `limit` integer

## Response `200`

Public event replay window

- object
  - `object` 'event_replay', required
  - `data` EventReplayEvent[], required
    - `id` string, required — Opaque event ID; currently identical to cursor for the whale_alerts.id sequence.
    - `type` 'whale_trades_inserted', required
    - `cursor` string, required — Cursor positioned at this event.
    - `sequence` integer, required — Global whale_alerts.id sequence.
    - `published_at` string, date-time, required
    - `payload` object, required
    - `source` EventReplaySource, required
      - `kind` 'local_durable_replay', required
      - `producer_family` 'whale_trades', required
      - `owner` 'whale_alerts', required
      - `provider_fetch_at_request_time` false, required
    - `freshness` EventReplayFreshness, required
      - `status` 'observed', required
      - `observed_at` string, date-time, required
  - `has_more` boolean, required
  - `next_cursor` string, required
  - `meta` EventReplayMeta, required
    - `request_id` string, required — Unique request ID (req_ prefix).
    - `cached` boolean, required
    - `cache_age_s` integer, nullable
    - `cost` integer, required — Advisory request weight (relative compute cost). 1 for simple reads; higher for heavier endpoints. Not a credit/price.
    - `replay` object, required
      - `from_cursor` string, required
      - `to_cursor` string, required
      - `from_sequence` integer, required
      - `to_sequence` integer, required
      - `ordering` 'whale_alerts_id_asc', required
    - `retention` object, required
      - `status` 'durable_database', required
      - `retained_events` integer, required
      - `cursor_expired` false, required
    - `completeness` object, required
      - `status` 'complete' | 'caught_up', required
      - `reason` string, required

## Other responses

- `400` — Invalid request parameter
- `401` — Missing or invalid API key
- `402` — Active Pro subscription required
- `403` — Account access denied
- `408` — Request exceeded the server's 30-second transport timeout. The timeout response has an empty body because it is generated before handler-level JSON error shaping.
- `423` — Account is locked
- `429` — Rate limit exceeded. Two independent budgets. (1) 100 requests/minute per user (sliding window), on every authenticated route. (2) On the BATCH routes only: 2500 batch item units/minute per user, reserved before any item is executed. A batch with N requested items costs N item units, including duplicate and invalid items. 2500 = 100 requests x 25 items per batch, which is the most item work a key can buy through the request limiter at all: a caller may spend their entire 100-request minute on full 25-item batches without the item budget being what stops them. The REQUEST budget is the effective ceiling, and batching is never the more expensive choice. The item budget can still deny at a sliding-window boundary (both counters carry the previous window forward with a floor, and the item counter runs 25x the request counter), so honor a 429 from either. Over-quota batches return 429 with Retry-After before any item work is done.
- `503` — Redis-backed authenticated rate limiter unavailable; retry after the per-process outage cooldown

---

[API](https://skmtc.net/0xinsider/apis/0xinsider-api.md) · [All operations](https://skmtc.net/0xinsider/apis/0xinsider-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/0xinsider/0xinsider-api/versions/918e082b045a/schema)
