Every endpoint answering
Checked every minute · last check 07:02 UTC
Endpoint · last 60 days
/v1/echo
nonce back, round trip
99.63%
/v1/stream
seeded bytes down
100.00%
/v1/sink
seeded bytes up
100.00%
phone relay
later (LIVE-PLAN §10)
not yet
answering
slow or partly down
not answering
no data
Today: 13.9 MB of the 4 GiB daily budget
Protocol Details (v1)
Small and public: anyone can run their own server, and a client in any language can use it.
| Request | Answer | Limits |
|---|---|---|
GET /v1/echo?n=<32 hex> | The nonce, as text/plain, exactly as sent (lowercase hex). | 600 a minute per address |
GET /v1/stream?seed=<32 hex>&n=<bytes> | The first n bytes of the seed's stream, application/octet-stream, with Content-Length. | 1 ≤ n ≤ 1048576; 64 MiB an hour per address |
POST /v1/sink?seed=<32 hex> + body | {"n": <bytes read>, "match": <leading bytes equal to the seed's stream>} | Content-Length required, ≤ 262144; 16 MiB an hour per address |
GET /v1/health | The counters as JSON (totals since start, bytes today), for monitoring. |
Every answer carries Cache-Control: no-store, no-transform. Stream and sink bytes count against a global 4 GiB a day (UTC) as well. Over a limit the answer is 429 with Retry-After. Behind Cloudflare (-cloudflare) the address is CF-Connecting-IP; an IPv6 address counts by its /64. Malformed requests get 400, 405, 411 or 413 with a one-line reason.
The stream
AES-128 in CTR mode, the seed as the key, a zero initial counter block (the whole 16 bytes count up as one big-endian number), over zero plaintext: the keystream itself. Standard everywhere:
head -c 32 /dev/zero | openssl enc -aes-128-ctr -K <seed> -iv 00000000000000000000000000000000
Test vectors (first 32 bytes):
| Seed | Stream |
|---|---|
00000000000000000000000000000000 | 66e94bd4ef8a2c3b884cfa59ca342b2e58e2fccefa7e3061367f1d57a4e7455a |
000102030405060708090a0b0c0d0e0f | c6a13b37878f5b826f4f8162a1c8d8797346139595c0b41e497bbde365f42d0a |