Skip to content

Ops HTTP endpoints

This page lists every endpoint on the operator HTTP listener, from internal/opsapi and internal/opsview.

Property Value
Protocol Plain HTTP over TCP, separate from the libp2p protocols
Default bind 127.0.0.1:9090 (ops.bind, ops.port)
Enabled ops.enabled, default true; a bind failure fails startup
Started After the P2P stack and services, so /readyz answers only once the server can serve
Methods GET and HEAD only; any other method gets 405 with Allow: GET, HEAD
Authentication None; the /ops/* views name peer IDs, so keep the listener on loopback or behind an authenticating proxy
Server timeouts Read header 5 s, write 2 min, idle 60 s
Path Mounted when Content type Purpose
/ Always text/plain Index: ricochet operator surface, then every mounted path, one per line
/healthz Always JSON Liveness; touches no dependency
/readyz Always JSON Readiness; pings PostgreSQL, unready while draining
/metrics features.enable_metrics Prometheus text Metrics from the server’s own registry
/debug/pprof/ ops.enable_pprof Go pprof Profiles; also serves /debug/pprof/cmdline, /profile, /symbol, /trace
/ops/mailboxes/top Storage initialised JSON Fullest mailboxes across every owner
/ops/mailboxes Storage initialised JSON One owner’s mailboxes
/ops/storage Storage initialised JSON Per-owner totals and the sampled server-wide figures
/ops/limits Storage initialised JSON Effective admission, rate-limit and storage limits

Always 200.

Field Type Meaning
status string ok
uptimeSeconds float Seconds since the listener was built

200 when ready, 503 when a check fails or the server is draining. Checks are bounded by ops.readiness_timeout (default 2 s).

Field Type Meaning
ready bool The verdict
draining bool, optional Present and true once shutdown has begun
checks object {"postgres": {"ok": <bool>, "error": <string, optional>}}
details object Diagnostics that do not affect the verdict (below)
details key Content
uptimeSeconds Seconds since the server started
admission enabled, maxInFlight, maxPerPeer, inFlight, admittedTotal, shedTotal, waitedTotal, acquireTimeout; only {"enabled": false} when admission control is off
mailboxCache size, capacity
postgresPool totalConns, idleConns, acquiredConns, maxConns, emptyAcquireCount, canceledAcquire
Query parameter Default Meaning
n 20 Page size; at most 500
limit none Same as n; wins when both are given
offset 0 Rows to skip
sort fill fill (closest to its cap first) or count (most messages first)

Response: sort, limit, offset, count, mailboxes. Each mailbox: id, owner, folderPath, messageCount, maxMessages, fillRatio, full, messageBytes, lastMessageAt (optional).

Query parameter Default Meaning
owner required Peer ID; a missing or malformed one gets 400
limit 20 Page size; at most 500
offset 0 Rows to skip

Response: as /ops/mailboxes/top, plus owner, sorted by fill.

Query parameter Default Meaning
limit 20 Owners per page; at most 500
offset 0 Owners to skip
Field Content
server null until the first capacity sample, then sampledAt, ageSeconds, mailboxes, messages, messageBytes, databaseBytes, maxStorageBytes, availableBytes, mailboxesNearCapacity, nearCapacityRatio, depth ([{label, min, max, mailboxes}])
note Present when server is null, saying why
limit, offset The page
owners [{owner, mailboxes, messages, messageBytes}], live

No parameters. Every value is the effective one after defaults and derivations.

Field Content
admission enabled, maxInFlight, maxInFlightDerivedFromPoolSize, databasePoolSize, maxInFlightPerPeer, acquireTimeout
rateLimits window, enabledProtocols, protocols: for each of msa, msa_batch, maa, mma, sda, sfa, sca, mta, the buckets requests, read, write, each {rate, burst, enabled, per}
storage maxStorageBytes, maxMessagesPerMailbox, maxMailboxes, retentionPolicy
Status When Body
400 Bad query parameter (not an integer, negative, bad sort, bad owner) {"error": <string>}
404 Unknown path Plain text
405 Method other than GET or HEAD Plain text
500 Query failed; detail in the server log {"error": "<query> failed; see server log"}
504 Query exceeded ops.query_timeout (default 10 s) {"error": "<query> timed out"}

See Health & readiness and Metrics & the ops view.