Operations & Observability
What Supero records, where each kind of record is read from, how to follow one request across the whole platform, what to check when something fails — and, stated plainly, which observability surfaces do not exist so you can plan to build them yourself.
Overview
ℹ️ The shape of the answer
What Is Recorded, and Where You Read It
| Surface | How you read it | How far back |
|---|---|---|
| Audit trail — auth attempts, admin actions, schema changes, CRUD operations | The audit_log object type, through the ordinary read and list endpoints | 90 days by default |
| Recent platform activity — request, response, auth, session, database and system log lines | GET /api/v1/logs | A rolling recent window. Not an archive — see below. |
| One request across services | GET /api/v1/logs/trace/{correlation_id} | Same rolling window as above |
| Workflow runs and per-step detail | The wf:workflow_instance and wf:workflow_step_log object types, through CRUD | As long as you keep the records |
| Connector runs, stats and recent executions | GET /api/v1/connectors/{connector_id}/status, and the Run History tab | The last 50 executions in the console |
| Deployment progress and outcome | The poll URL returned by a launch or publish call | Current state per lane |
| Container logs for a published app | The Cloud Deploy Logs page in the dashboard | Up to 24 hours back, 500 lines per request |
| AI call outcomes | The correlation_id on the response envelope | Only as long as you keep it |
Tracing One Request End to End
Set your own, or read the one you were given
{
"error": "Internal server error",
"correlation_id": "a1b2c3d4"
}⚠️ Two limits on adopting your own value
💡 Set it from your own request id
Pull the trace
curl "https://api.supero.dev/api/v1/logs/trace/a1b2c3d4" \
-H "Authorization: Bearer $ACCESS_TOKEN"Querying Platform Logs
# The last 200 errors and warnings in your domain
curl "https://api.supero.dev/api/v1/logs?levels=error,warning&limit=200" \
-H "Authorization: Bearer $ACCESS_TOKEN"
# Only authentication activity
curl "https://api.supero.dev/api/v1/logs?categories=auth,session" \
-H "Authorization: Bearer $ACCESS_TOKEN"
# Everything since a point you already reached
curl "https://api.supero.dev/api/v1/logs?since_seq=48211&limit=500" \
-H "Authorization: Bearer $ACCESS_TOKEN"| Parameter | Accepts |
|---|---|
| levels | Comma-separated: debug, info, warning, error |
| categories | Comma-separated: request, response, operation, auth, session, db, system |
| correlation_id | A single correlation id — the same filter the trace endpoint applies |
| services | Comma-separated service names. The trace store aggregates three — platform-core, api-server and ai-service — so a name outside that set (a connector or tenant-service line, say) matches nothing, and a trace can stop at that boundary. |
| tenant_name / project_name | Narrow within your domain |
| since_seq | A sequence number from a previous response — returns only what is newer |
| since_timestamp | An ISO-8601 timestamp |
| limit | Number of entries to return. Defaults to 100 and is capped at 500 — ask for more and you get 500. |
{
"logs": [
{
"seq": 48214,
"timestamp": "2026-08-26T09:14:07Z",
"level": "error",
"category": "operation",
"service": "...",
"message": "...",
"correlation_id": "a1b2c3d4",
"domain_name": "acme-corp",
"project_name": "storefront",
"tenant_name": null
}
],
"last_seq": 48214,
"total_in_buffer": 9873
}⚠️ This is a recent-activity window, not a log archive
- •Authentication is a user JWT only. This endpoint does not accept an API key, so a background job that authenticates with X-API-Key cannot read it — log in and use the access token instead.
- •Scope is your domain, enforced server-side. Asking for another domain returns 403; asking for nothing returns your own domain. Platform-level operator roles see more; every role you assign sees your domain only. See Roles & Permissions Reference.
- •It is rate limited per domain and returns 429 with a retry_after value in the body when you exceed it. Poll on an interval, not in a loop.
- •The statistics endpoint at GET /api/v1/logs/stats is restricted to platform operator roles and returns 403 for everyone else. It is not part of your surface.
- •These routes are not available on every deployment. Where the backing store is not configured, they are not registered at all and return 404 rather than an empty result. Confirm the endpoint answers on your target environment before you build a triage tool on it — particularly on a self-hosted install.
The Audit Trail
curl "https://api.supero.dev/api/v1/crud/acme-corp/audit_log?limit=100" \
-H "Authorization: Bearer $ACCESS_TOKEN"⚠️ An audit read can answer 200 with nothing rather than 403
⚠️ The audit trail is not a backup
Workflow Runs
# Every failed run
curl -X POST https://api.supero.dev/api/v1/crud/acme-corp/query \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "wf:workflow_instance",
"filters": { "status": "failed" },
"limit": 100
}'
# The step-by-step trail for one run
curl -X POST https://api.supero.dev/api/v1/crud/acme-corp/query \
-H "Authorization: Bearer $ACCESS_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"type": "wf:workflow_step_log",
"filters": { "instance_uuid": "9c1e2a30-..." }
}'⚠️ Filter with POST /query, not a query string
💡 This is where a failure alarm is cheapest to build
⚠️ Read the run record, not the status operation
Connector Runs
curl "https://api.supero.dev/api/v1/connectors/{connector_id}/status?limit=10" \
-H "Authorization: Bearer $ACCESS_TOKEN"⚠️ Confirm a scheduled run actually happened
ℹ️ What you cannot see
Deployments and App Logs
⚠️ Poll the URL you were handed, not the bare project path
- •200 lines by default, up to 500 per request.
- •One hour of lookback by default, up to 24 hours.
- •Filterable by severity. A severity value that is not recognised is ignored rather than rejected, so a typo silently widens your filter instead of erroring.
- •Responses are cached briefly and queries are rate limited per domain; a burst past that returns 429 with a Retry-After header. Auto-refresh is off by default for the same reason.
- •Each line carries a correlation id alongside the message, the request method, the endpoint, the status code and the duration — so a failing request seen in your app’s logs can be carried straight back to the platform trace.
ℹ️ App logs are a Supero Cloud surface only
Triage by Layer
| Layer | First thing to check | Where |
|---|---|---|
| The request itself | The status code and the raw body, before parsing anything. A JSON parse error on the error path usually means a 405 from a mistyped URL or an empty path segment built from an unset variable. | Errors & Status Codes |
| A 200 that lied | Success and the created/updated/failed counts on a write; body.success on a services call. An empty read can be a denial or a scope clamp rather than an empty table. | Errors & Status Codes |
| The credential | The domain, project, tenant and role actually in force. Assumed scope is wrong more often than assumed permissions. | GET /api/v1/auth/session |
| Authorization | Whether it is a policy rather than a role. A 403 with an unhelpful message is usually an access rule. | Access Policies |
| The platform | The trace for the correlation id on the failing response. | GET /api/v1/logs/trace/{correlation_id} |
| A workflow | The run record and its step log — which step, what input it sent, what came back, how many retries. | Workflow Engine Reference |
| A connector | last_run_at and the recent executions. A source that is reachable but returning nothing looks identical to a healthy run with zero rows. | Connectors Overview |
| A published app | Deployment status first, then the container logs. A URL that returns 200 is not proof the app is working. | Publish Your App |
| Who changed what | The audit trail for the window around the change. | Security |
💡 What to send when you escalate
What Is Not Provided
| Not available | What this means for you |
|---|---|
| No metrics endpoint | There is nothing to scrape. No Prometheus endpoint, no StatsD emission, no OpenTelemetry export you can point a collector at. Request rates, latencies and error rates are not exposed as numbers anywhere. If you want them, measure at your own client and record them yourself. |
| No log streaming or tailing | Every log surface here is a bounded read you poll. There is no websocket, no server-sent-event stream, and no follow mode. The closest approximation is polling with since_seq, which is fine on an interval and abusive in a loop. |
| No alerting and no failure webhooks | Nothing pushes to you when something breaks. Webhooks on Supero are inbound only — external systems delivering events in, not Supero calling out on an event. Failure detection is something you build. Note also that the SDK build API accepts a callback URL and a notification email; neither is dispatched to, so a build that finishes or fails will not tell you. |
| No status page and no uptime commitment | There is no public status page to check during an incident, and no uptime SLA is published in this documentation. See Compliance & Trust. |
| No log export or long-term retention | The recent-activity window evicts as it fills and audit entries default to 90 days. There is no archive, no cold storage and no bulk log export. Anything you need later, you pull and keep. |
| No pre-built dashboards | There is no operations console beyond the deployment and connector pages. There is nothing to configure, and equally nothing you have to learn. |
Building the missing piece
- •Query wf:workflow_instance for runs whose status is failed, partial or compensation_failed since your last check.
- •Query each connector's status endpoint and compare failure_count and last_run_at against what you saw last time.
- •Query audit_log for authentication failures and rate-limit events above whatever rate is normal for you.
- •Read the health endpoint of each registered plugin and alert on an open circuit breaker or a falling success rate.
- •Poll GET /api/v1/logs with levels=error and a since_seq you carry forward, if the endpoint is available on your deployment.
- •Send the result somewhere you actually read — your own mail or chat integration, or a workflow whose steps do it for you. See Workflows & Automation.
Health checks you can point a monitor at
| Endpoint | Auth | What it tells you |
|---|---|---|
| GET /health on the API host | None | Whether the platform is answering. Treat a 200 as up and nothing more — the body is diagnostic and its shape is not a stable contract, so do not parse it. |
| GET /health or /healthz on your own published app | None | Whether your app came up correctly. Worth reading carefully — see the note below. |
| GET /api/v1/plugins/{plugin_uuid}/health | Plugin read permission | Per-plugin health for endpoints you registered: a health state, success and failure counts, success rate, average latency, last invocation, and whether the circuit breaker has opened. |
⚠️ Your app’s health endpoint reports degraded two different ways
ℹ️ What a liveness probe does not tell you
ℹ️ One surface that may report itself unavailable
How This Differs on Self-Hosted
| Surface | On a self-hosted deployment |
|---|---|
| Workflow runs and connector runs | Identical — they are records in your own data. |
| Audit trail | Not on by default. Audit logging is a deployment setting rather than something the product turns on for you, and its retention window is configurable. Confirm you can actually read your domain’s trail before you rely on it — an empty read looks the same whether nothing happened or nothing is being recorded. |
| GET /api/v1/logs and the trace endpoint | Available only where the backing store is configured. Where it is not, the routes are absent and return 404. Verify before relying on them. |
| Cloud Deploy Logs | Not applicable. Your apps are not on Supero Cloud. |
| Service logs | Yours, on the host. The platform CLI exposes them directly — see below. |
| Metrics, alerting, retention, backups | Yours to provide. Nothing changes about what the platform does not do, but now nobody else is doing it either. |
sudo supero status # what is running
sudo supero health # health check across services
sudo supero logs <service> 200 # recent lines; supero logs --help lists services⚠️ supero health reports reachability, not health
⚠️ Two operational defaults to check on day one
Next Steps
- •Errors & Status Codes — the error envelope, the status-code catalog, and the failures that do not look like failures.
- •Debugging & Troubleshooting — symptom-first: which of several look-alike responses you are actually seeing, and the one check that tells them apart.
- •Workflow Engine Reference — run and step records in full, including compensation.
- •Connectors Overview — the status endpoint, Run History, and the connector API surface.
- •Publish Your App — deployment status, the poll contract, and the deploy log reader.
- •Security — the audit trail fields and retention.
- •Rate Limits & Quotas — what is throttled and how to back off.
- •On-Premise Deployment — running and operating the platform yourself.
On this page