Skip to main content
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