Take the data. No key, no signup.

Freeze proposals are public on chain — we only got there first and put them in order. Public ledger tables are available as JSON, as an Atom feed, and as CSV. Address-risk queries and address-filtered exports require Telegram sign-in and paid-query confirmation. General ledger feeds remain public.

Events indexed
17,845
Addresses
4,831
Auth
none
Rate limit
30/min

One request, to see the shape

$ curl -s https://ualert.example/api/v1/proposals?status=pending | jq '.data[0]'
{
  "id": 10469,
  "action": "add",
  "target_address": "TCCBhcmEeaX7...bFHP1D",
  "submitted_at": { "iso": "2026-08-14T09:49:39Z", "ms": 1786734579000 },
  "executed_at": null,
  "window_seconds": null,
  "status": "pending",
  "url": "/p/10469"
}

Every response carries a ledger block with the head block and the newest event we hold. Judge freshness from that rather than from us calling it “live”.

Endpoints

/api/v1/health

Ledger head, per-stream collector cursors, and the build actually running (version, commit, uptime).

/api/v1/proposals

Freeze-type proposals, newest first.

status
pending · executed · stale
action
add · remove · destroy
range
24h · 7d · 30d · 90d · 6m · 1y · all
page, per
per is capped at 200

/api/v1/proposals/{id}

One proposal with its on-chain events, its batch, and where its window sits against every executed freeze we have.

/api/v1/events

Raw ledger events.

kind
add · remove · destroy · propose
address
T… (34 chars)
block
block height
range, page, per

/api/v1/addresses

Addresses the ledger has seen, ranked.

sort
recent · events · value
range, page, per

/api/v1/addresses/{address}

Everything the ledger holds for one address. No balance, no verdict — those need a chain call and subscribers' alerts own that quota.

/api/v1/batches

Freezes arrive in batches. This lists them as objects, which no other tracker does.

min_size
only batches this large or larger
range, page, per

/api/v1/batches/{id}

One batch and every proposal in it.

/api/v1/stats

Aggregates behind the data page.

range

/feed.xml

Atom feed of proposals — for readers, Slack, n8n, anything that speaks RSS.

action
add (default) · remove · destroy

/scan.csv · /scan/proposals.csv · /scan/addresses.csv · /scan/batches.csv

The current table, with the filters in the URL applied.

limit
capped at 5000 rows
Two things this API deliberately does not do. It never returns a balance or a risk verdict — those need a live chain call, and that quota belongs to subscribers' alerts before it belongs to anonymous traffic. And it keeps no record of who called: no key, no account, no log. The cost of both is that limits stay modest. If you need more than 30 requests a minute, tell us what you're building rather than rotating addresses.

Prefer a feed?

/feed.xml is an Atom feed of freeze proposals. It works in any reader, and in Slack, n8n or Zapier without a line of code — useful if you want the warnings but not another chat bot.

↑↓ move ↵ open ↵ look it up esc close Nothing you type here is stored or sent anywhere but this lookup.