1. Create a stream
Sign in at lasso.sh and open Streams. Choose a chain, enter your contract addresses, select events, and choose a starting block. Leave From block blank to start at the latest block, or enter0 for genesis.
Save the stream, then copy its read URL with your account RPC key.
Store the URL privately. This example selects all logs at one contract on Base:
&. For a URL without filters, such as
.../base/blocks, add the first one with ? instead.
If you use the copied dashboard URL, keep its filters. The examples below set
from themselves; remove an existing from query parameter before appending it.
2. Open an SSE connection
items holds matching logs, ordered by block number then log index. A quiet
filter can produce an empty page. Stop curl with Ctrl-C.
To backfill, replace from=latest with your starting block number.
Curl displays pages but does not persist them. In an app, apply each page and save
next in one transaction. After a disconnect,
resume from that saved value:
Last-Event-ID wins over from. Set SAVED_NEXT to your last committed cursor,
not merely the last frame received.
3. Try polling
For cron, serverless or batch jobs, omit the SSE header. Each request returns one JSON page and waits up to 20 seconds at the tip:wait=0 to drain available pages in a scheduled job; stop when next stays
unchanged. A 503 response means retry the same position after Retry-After.
Positions
from is required. Use a decimal block number, latest, or the opaque next
from a page. Never reuse a cursor with a changed chain, source or filter.