Sixteen endpoints. One shape.
All bodies are JSON, all field names camelCase, all DIDs URL-encoded. Authentication is via Arsenal ACT bearer token; rate limits are per-token, returned in X-RateLimit-Remaining headers.
base · https://api.mars.glass
- GET
/v1/healthHealth probe.
body: —→ { status, version, registryDid } - POST
/v1/entriesCreate a new registry entry. Body MUST be a fully signed Entry.
body: Entry→ Entry (with sequence) - GET
/v1/entries/:didResolve latest version.
body: —→ Entry - GET
/v1/entries/:did/versionsVersion history.
body: —→ { versions: Entry[] } - PUT
/v1/entries/:didPublish a new version. New entry MUST reference its parent.
body: Entry→ Entry - DELETE
/v1/entries/:didRevoke entry, slash bond. Requires reason and signed revocation receipt.
body: { reason, signature }→ { revokedAt, sigilTx } - POST
/v1/discoverStructured discover query.
body: { entryType?, conditions[], limit? }→ { entries, total } - POST
/v1/discover/marsqlMARS-QL string query.
body: { query }→ { entries, total } - GET
/v1/lineage/:didLineage chain back to HMR.
body: —→ { chain: [...] } - POST
/v1/transfer/:didInitiate ownership transfer. Requires both signatures to settle.
body: { newOwnerDid, signature }→ { pendingTransferId } - POST
/v1/attestationsIssue an attestation against an entry.
body: { entryDid, attestation }→ { id, anchoredAt } - GET
/v1/attestations/:didList attestations for an entry.
body: —→ { attestations: [...] } - POST
/v1/reportReport abuse. May trigger investigation and bond slash.
body: { entryDid, reason, evidence? }→ { caseId } - GET
/v1/registriesList federated peers.
body: —→ { registries: [...] } - POST
/v1/federate/handshakeInitiate federation handshake with a peer.
body: { fromRegistry, endpoint, publicKey, scope }→ { syncToken } - POST
/v1/federate/syncPage through entries since cursor.
body: { syncToken, limit, cursor? }→ { entries, nextCursor } - WS
/v1/eventsWebSocket subscription stream.
body: subscribe frame→ MarsEvent stream