All bodies are JSON unless noted. CORS is open. Relayers do not log request IPs or bodies. The
interactive version of this page is in the API Reference tab.
Relayer
GET /v1/info
issuer and issuerUrl are present when tokens are required; ohttpKey when OHTTP is on.
POST /v1/records
Queue a sealed record.
u64 and u256 attribute values are decimal strings. token is required when the relayer requires
tokens; minAnonymity and maxHoldMs are optional.
Returns 202 { "id": "<uuid>" }.
GET /v1/records/:id
position (queued only) is the number of requests ahead. 404 for an unknown id. Statuses are
kept for an hour after they finish.
POST /v1/ohttp
An Oblivious HTTP encapsulated request (message/ohttp-req, up to 128 KB) carrying any of the
requests above; the response is message/ohttp-res. 404 when OHTTP is off, 400 when the request
cannot be opened. See the protocol reference.
GET /healthz
Token issuer
Served by a relayer started with ISSUER=on.
GET /v1/issuer/key
Query: app, epoch (today’s UTC day number). Publishes today’s key on Arkiv if needed:
Clients read the key itself from Arkiv, never from this response. 400 if epoch is not today.
POST /v1/tokens/issue
walletSignature is the wallet’s personal_sign of the issuance message (see the
protocol). attestation only when the issuer requires codes.
403 with { "error": … } for: epoch not today, 0 or more than 20 tokens asked for, timestamp more
than 5 minutes off, wrong wallet signature, missing or used attestation code, quota exceeded.
OHTTP relay
Last modified on October 12, 2026