Operations
Get Platform Metrics
Operator-only snapshot across all tenants: signups, activation, expiring trials, plan and billing breakdowns, recent signups and the Recurso Cloud charge dry-run.
GET
Founder-only cross-tenant funnel metrics
A cross-tenant funnel snapshot for whoever operates the Recurso instance:
how many workspaces exist, how many signed up in the last 7 and 30 days, how
many have activated (created at least one customer), how many trials expire
in the next 7 days, tenant counts by
billing_status and plan_tier, the
15 most recent signups, and a money-free dry-run of what each tenant would be
charged for Recurso Cloud this month.
This is the only cross-tenant surface in the API and it sits deliberately
outside tenant authentication. It is gated by the FOUNDER_TOKEN environment
variable: the request must carry that value as a bearer token, and when the
variable is unset the route answers 404 as if it did not exist, so no
tenant login or API key can ever reach it. For per-tenant reporting use
Analytics; for process-level telemetry
use Get Prometheus Metrics.
The spec entry for this operation does not declare
security: [], so the
playground on this page inherits the document-level bearerAuth scheme and
shows a tenant-API-key box. Ignore it: the handler compares the header
against FOUNDER_TOKEN only, and a tenant API key is rejected with 401.Example Request
Response
Returned bare — nodata envelope. Money fields are minor units in
cloud_charge_currency. Array fields are Go nil slices when there is
nothing to list, so they serialise as null, not [] — see the Fields
table and the note below.
Fields
The cloud-charge section is best-effort. If the preview query fails the
funnel metrics are still returned with
200, and the charge fields are
left at their zero values — "cloud_charges": null,
"cloud_charge_total_minor": 0, "cloud_charge_currency": "" — rather
than the whole response failing. A successful query with no readings for
the month also yields "cloud_charges": null (the repository returns no
rows), but with cloud_charge_currency populated. Treat null and []
the same when consuming this field.Errors
Only the
500 carries the standard envelope — see Errors.
The 401 and 404 are intentionally bodiless so the route’s existence is
not confirmed to unauthenticated callers.Authorizations
Tenant API key obtained from POST /auth/register or POST /v1/developer/keys.
Response
Cross-tenant platform metrics.
The response is of type object.