OpenSequence
DocsAPI referenceSDKs and CLIReference
Self-hosting

Observability

Logs, the health endpoints, alerts worth setting, needs_review runs, and what is not there yet.

Edit on GitHub
curl
curl $SEQ/v1/admin/engine/health -H "Authorization: Bearer $SEQ_ADMIN_TOKEN"
# {"paused":false,"disabled_channels":[],"queues":[{"queue":"seq_email","depth":3,…},…],"jobs":[{"job":"plan","lastRunAt":"…"},…]}
curl $SEQ/v1/engine/health -H "Authorization: Bearer $ADMIN_KEY"
# {"flags":[…],"queues":[…],"jobs":[…],"paused":false}

Logs

Pino JSON on stdout (pretty-printed when NODE_ENV is not production), level SEQ_LOG_LEVEL. Every request line carries reqId (the req_… returned in meta.request_id); every engine line carries the ids it touched (projectId, enrollmentId, runId, contactId, senderId, channel, nodeId, deliveryId, endpointId) so one grep follows a contact through the system. Every scheduler tick logs a one-line summary of counts (claimed, advanced, events, requeuedRuns, …). Secrets are never logged.

Health

WhereWhat
GET /healthzliveness
GET /readyzdatabase reachable, migrations applied, and for workers a scheduler job in the last 2 minutes
GET /v1/admin/engine/healthplatform-wide: paused, disabled_channels, queues (depth per queue), jobs (last run per job)
GET /v1/engine/healththe same for a project, plus its flags
oseq healththe queues and jobs from the CLI

Alerts worth setting

SignalWhy
/readyz failing on a workerthe scheduler stopped
a queue's depth growing for ten minutesthe worker is behind, or a provider is failing
the plan job's last run older than a minuteno planner is running
run.needs_review webhooks, or runs in needs_review in the journeyan SMS with an unknown outcome waits for a human
run.failed and enrollment.paused with step_faileda step ran out of retries with no failed branch wired
endpoint.disabledyour own receiver has been down for three days
sender.channel_status with credentials_neededa sender must reconnect Google
5xx rate on the API, INTERNAL_ERROR in responsessearch the logs by request_id

needs_review

A text whose outcome Allo could not confirm is recorded as needs_review and the enrollment stops at that step. Today you resolve it by hand: check in Allo whether the text left, then either exit the enrollment or complete the step's flow by exiting and re-enrolling. The GET /v1/engine/needs-review and resolve endpoints described in the architecture document are not implemented yet.

Not there yet

SEQ_METRICS is accepted but no Prometheus /metrics endpoint is served; there is no per-channel circuit breaker, and an incoming X-Request-Id is not propagated. Use the health endpoints and the logs.

On this page