veil

Read the directory’s log state

Identify the active log and read the checkpoint and witness state seen by the server.

GET/v1/log
Access
Public; API key optional
Client
Browser fetch supported

Request examples#

cURL
curl -fsS 'https://veil.rip/v1/log'
javascript
const response = await fetch("https://veil.rip/v1/log");
const result = await response.json();

Try the request#

Response#

HTTP 200application/json

origin, size, root, checkpoint, witnesses, quorum, quorumMet, freshness and consistency information. These are the server’s checks.

FieldTypeMeaning
originstringLog origin.
sizeintegerCurrent tree size.
rootstringSigned root hash in base64.
logSignatureOkbooleanServer check of the log signature.
rootOkbooleanServer check of checkpoint consistency.
quorumintegerRequired witness signatures.
signedintegerValid witness signatures on the current size.
ofintegerNumber of configured witnesses.
quorumMetbooleanWhether the current checkpoint meets the quorum.
witnessesarray<object>Each row has id, name, size, signedAt (Unix seconds or null), ok, current, error, operator, kind, logo and initials.
checkpointstringFull signed note.
checkedAtstringServer check time in ISO 8601 UTC.
newestCosignatureAtinteger | nullNewest valid cosignature time in Unix seconds.
freshbooleanWhether the checkpoint is within freshSeconds.
freshSecondsintegerFreshness threshold in seconds.
consistencyobjectfrom, fromRoot, proof, ok, firstUse, behind and error describe comparison with the accepted checkpoint.
acceptedobject | nullLast accepted size, root and at, plus firstSize and firstAt where its chain began.
formatinteger | optionalThe log’s format when it is not 1: 2 for labels, bodies and the index.
staffOrgstring | optionalFormat 2: the token of the Veil organisation, the parameter of the index. Absent in format 1 and while the server has no Veil organisation. A browser refuses a format 2 log that does not give it.

Response headers#

HeaderValueMeaning
Content-Typeapplication/jsonUse the declared media type before choosing a parser.
DateHTTP dateServer time. Compare it with your clock when signing requests.
Retry-Afterinteger seconds, on rate_limited or busyWait at least this long before retrying. Other 429/503 codes do not necessarily include it.

What to verify#

Pin the expected log and witness policy for independent verification. A different log is not an interchangeable history.

Errors#

API errors return an error object. Use error.code for program logic; error.message is English text for people and can change. Response and error guide

HTTPCodeMeaning and next step
503log_unavailable

The public log cannot currently be read, verified or used for publication.

For reads, keep the result unverified and try later. Before retrying a write, read the card to check whether publication completed.

When using an optional API key
HTTPCodeMeaning and next step
401invalid_api_key

The bearer credential is malformed, unknown, expired or revoked.

Use an active key. To use anonymous public access, remove Authorization entirely. Invalid credentials never fall back automatically.

403api_key_scope

The API key lacks read or verify scope, or the endpoint does not accept bearer keys.

Use the correct scope. Identity writes and key management still require a device signature.

403api_key_suspended

This API key is suspended.

Ask staff to restore it; another key cannot lift an account suspension.

403developer_suspended

The owner’s API account is suspended or the owner card is unavailable.

Check the owner account and any staff restriction. Creating another key does not bypass suspension.

Shared request errors
HTTPCodeMeaning and next step
429rate_limited

An anonymous, signed-request or API-key allowance was exceeded.

Wait at least Retry-After seconds. Share a queue and retry budget across your workers.

500internal_error

An unexpected server error occurred. Internal details are not returned.

Retry reads with bounded backoff. Check write results before sending a new signed operation.

503busy

The application has reached a temporary concurrency or database limit.

Wait Retry-After seconds and retry with bounded backoff.