status

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.

RequestAnswerLimits
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/healthThe 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):

SeedStream
0000000000000000000000000000000066e94bd4ef8a2c3b884cfa59ca342b2e58e2fccefa7e3061367f1d57a4e7455a
000102030405060708090a0b0c0d0e0fc6a13b37878f5b826f4f8162a1c8d8797346139595c0b41e497bbde365f42d0a