SSE streams with replay
One HTTP stream. Start from any checkpoint your plan allows, then continue live with no gap and no duplicate.
Open a stream
curl -N "https://api.tide.ad/v1/stream?topic=transactions&accounts=0xYOUR_ADDRESS&view=enhanced" \
-H "x-api-key: YOUR_API_KEY"The server sends a heartbeat every 15 seconds so proxies keep the connection open.
const url = "https://api.tide.ad/v1/stream?topic=transactions&accounts=0xYOUR_ADDRESS&view=enhanced&api-key=" + process.env.TIDE_API_KEY;
const es = new EventSource(url);
// each topic has its own event name: transaction, event, checkpoint, balance or object
es.addEventListener("transaction", (e) => console.log(JSON.parse(e.data)));Parameters
| Parameter | Meaning |
|---|---|
| topic | transactions, events, checkpoints, balances or objects. |
| view | ids, raw or enhanced. |
| fromCheckpoint | Replay from this checkpoint, then continue live. |
| cursor | Resume after this cursor. Same as the Last-Event-ID header. |
| pending | checkpoints topic only: true adds each checkpoint before it is certified, as event: pending. |
| early | exec adds event: exec for matching transactions that a validator has executed but that are not yet in a checkpoint. Transactions and objects topics, see below. |
| accounts, coinTypes, eventTypes, packages, objectIds | Filters. Lists are OR within one filter and AND across filters. |
Every filter and view is described in Topics and filters.
Replay
With fromCheckpoint the server reads the index in order at up to 50,000 checkpoints a minute, then joins the live tail at a checkpoint boundary. Your plan sets how far back you can start: 7 days on Free, 90 days on Developer, since genesis on Business and above.
GET /v0/stream/replay-info returns the earliest checkpoint your key may use.
curl "https://api.tide.ad/v0/stream/replay-info" -H "x-api-key: YOUR_API_KEY"Resume
Each message has an id equal to its cursor. A browser EventSource sends it back as Last-Event-ID when it reconnects, and the stream continues from the next message. With curl, send the header yourself.
The heartbeat and the end of each replay chunk also set the id, to the last checkpoint fully delivered. A quiet filter therefore resumes where the scan stopped, not at its last match.
event: reconnect means the server is restarting. An EventSource reconnects on its own and continues with no gap. Other clients reconnect with Last-Event-ID.
Pending checkpoints
On the checkpoints topic, pending=true sends each checkpoint as event: pending before validators certify it, about 100 ms earlier. It is marked pending: true and has no id. The certified checkpoint event with the same number follows. If its digest differs, trust the certified one.
Early exec events
early=exec adds event: exec for a matching transaction as soon as a validator has executed it, usually 100 to 200 ms before its checkpoint is certified. These events are executed, not yet in a checkpoint: consensus has ordered the transaction and one validator reports the result. They have no id, so a resume never points at one, and the certified transaction or object event follows as usual.
curl -N "https://api.tide.ad/v1/stream?topic=objects&objectIds=0xPOOL_ID&early=exec" \
-H "x-api-key: YOUR_API_KEY"| Topic | Filter needed |
|---|---|
| transactions | objectIds. One exec event per transaction that wrote or deleted one of them. |
| objects | objectIds or types. One exec event per matching object the transaction wrote. |
status narrows them as usual. Other filters (accounts, coinTypes, eventTypes, packages, balanceAddresses, transaction types) need the certified transaction, so a stream with one of them and early=exec is refused; open a second stream for those. Only transactions that write one of about 200 busy objects produce exec events: the most traded DEX pools and the 0x6 clock.
{
"status": "executed",
"note": "executed, not yet in a checkpoint",
"digest": "C3YpDHth...",
"effectsDigest": "FUPYE45E...",
"sender": "0x0feb...",
"success": true,
"epoch": 1303,
"receivedAt": "2026-11-06T07:07:55.056Z",
"objectId": "0xe05d...",
"version": 1074909503,
"type": "0x2c8d...::pool::Pool<...>",
"kind": "mutated",
"owner": "shared"
}| Field | Meaning |
|---|---|
| status | executed. Later checkpointed, once the transaction is in a certified checkpoint. |
| note | Always executed, not yet in a checkpoint, on executed events. |
| receivedAt | When tide received the validator's result. |
| objects | transactions topic: every object the transaction wrote or deleted (objectId, version, type, kind, owner), with matched.objects for the ones you named. |
| objectId, version, type, kind, owner | objects topic: the object as the transaction left it. kind is created, mutated or deleted. |
| bcs | view=raw only: the object's BCS, base64. |
| checkpoint, match | checkpointed events: the checkpoint that holds the transaction, and whether its certified effects are the ones executed. If match is false, use the certified event. |
Events for one object can arrive out of order. Keep the highest version. Exec events are live only: they are not replayed and are not sent to webhooks. They count as delivered events for credits.
One credit covers 10 delivered events, replayed events included.