Overview figures
GET/
The figures on an embedded Overview page: workflows, runs in a window, this month, and runs at once now.
Needs an API token with the Read permission for runs (run:read).
Parameters
Query
windowOptional · string7d(the default) or30d, ending today.tzOptional · stringYour time zone, such as
Europe/Berlin. Unknown or left out: UTC. This month stays the UTC month.
What is counted
For the workspace: its workflows by state, its production runs in the window (totals, success rate, and one point a day) and its latest 8 runs. Test runs never count.
For the organization: runs this month, and its runs-at-once limit with how many runs go and wait now. thisMonth.counted is usage when the installation keeps a usage count, which never goes down; else runs, the runs it still holds.
The window can be up to 30 seconds old; the limit and the latest runs are read live. In an embed, this needs the switch overview, which starts off, and workflows or runs.
Responses
- 200OK
The figures.
- 403
FORBIDDENThe token lacks the Read permission for runs.
- 403
FEATURE_OFFIn an embedded session: the
overviewswitch is off (details.switch). The figures couldn’t be read. Try again.
Any call can also answer: 401 UNAUTHORIZED · 401 TOKEN_ENDED · 403 TOKEN_SURFACE_OFF · 403 EMBED_NOT_ALLOWED · 403 EMBED_NOT_AVAILABLE · 403 ACCOUNT_SUSPENDED · 429 RATE_LIMITED · 503 BUSY · 503 PAUSED · 503 SERVICE_UNAVAILABLE. See Errors.
Request
GORUNNER="https://api.gorunner.io"
GORUNNER_TOKEN="grt_…" # needs Read for runs
URL="$GORUNNER/api/stats/"
URL="${URL}overview?window=7d&tz=Europe/Berlin"
curl "$URL" \
-H "Authorization: Bearer $GORUNNER_TOKEN"const GORUNNER = "https://api.gorunner.io";
const TOKEN = process.env.GORUNNER_TOKEN;
const res = await fetch(
`${GORUNNER}/api/stats/` +
`overview?window=7d&tz=Europe/Berlin`,
{
headers: { Authorization: `Bearer ${TOKEN}` },
},
);
const { data } = await res.json();import os, requests
GORUNNER = "https://api.gorunner.io"
TOKEN = os.environ["GORUNNER_TOKEN"]
res = requests.get(
f"{GORUNNER}/api/stats/overview",
params={
"window": "7d",
"tz": "Europe/Berlin",
},
headers={"Authorization": f"Bearer {TOKEN}"},
)
data = res.json()["data"]Response · 200 OK, shortened
{
"data": {
"window": "7d",
"timeZone": "Europe/Berlin",
"workflows": {
"total": 8,
"active": 6,
"paused": 1,
"draft": 1
},
"runs": {
"window": {
"from": "2026-10-19",
"total": 120,
"completed": 108,
"failed": 10,
"cancelled": 2,
"successRate": 0.915
},
"thisMonth": {
"from": "2026-10-01",
"total": 512,
"completed": 480,
"failed": 30,
"asOf": "2026-10-25T09:00:00Z",
"counted": "usage",
"scope": "organization"
}
},
"limit": {
"concurrentRuns": 10,
"runningNow": 2,
"waiting": 0,
"scope": "organization"
},
"series": [
{
"day": "2026-10-25",
"completed": 14,
"failed": 1,
"cancelled": 0,
"total": 15
},
"…"
],
"recent": [
{
"id": "8f0c41d2-6b7e-4c1a-9d3f-2a5b7c9e1f04",
"workflow": {
"id": "3b1e5c2a-7d4f-4e8b-a1c6-5f2d9b0e7a31",
"name": "Order intake"
},
"status": "completed",
"trigger": "webhook",
"startedAt": "2026-10-25T08:59:58Z",
"finishedAt": "2026-10-25T09:00:00Z",
"durationMs": 1840
}
]
}
}Every field
It takes no body.
Response · 200 OK
dataobjectwindowstringOne of
7d,30d.timeZonestringThe time zone the days were counted in: the
tzasked for, orUTC.workflowsobjectThe workspace’s workflows: live (
active), switched off (paused), never published (draft).totalintegeractiveintegerpausedintegerdraftintegerrunsobjectwindowobjectThe workspace’s production runs that started in the window, by status.
fromstringThe first day counted, in
timeZone.totalintegercompletedintegerfailedintegercancelledintegersuccessRatenumber or nullCompleted ÷ (completed + failed): cancelled runs are left out. Null when nothing completed or failed. Releases up to v2026.10.5 counted cancelled runs as not worked.
thisMonthobjectThe organization’s production runs since the first of the month (UTC).
fromstringtotalintegercompletedintegerfailedintegerasOftime or nullWhen the usage counts were last brought up to date; null when the installation keeps none.
countedstringusage: Platform › Usage’s count, never lowered when runs are deleted.runs: the runs the organization holds now.One of
usage,runs.scopestringOne of
organization.limitobjectThe organization’s runs-at-once limit and its runs in the run line now. A held run is in neither count.
concurrentRunsinteger or nullThe limit in force (the organization’s own, else the installation’s default); null when there is none.
runningNowintegerwaitingintegerRuns accepted and waiting for a free slot.
scopestringOne of
organization.seriesarray of objectsOne point per day of the window in
timeZone, oldest first.daystringcompletedintegerfailedintegercancelledintegerRuns someone stopped that day: their own segment of a chart, never counted as worked or failed.
totalintegerrecentarray of objectsThe workspace’s latest 8 production runs, newest first.
idUUIDworkflowobjectidUUIDnamestringstatusstringThe run’s status, as
GET /api/runssays it.waitingForstringFor a run waiting in line (status
waiting): the limit it waits behind. Absent when it waits only for a free worker, and for every other run.One of
workflow,organization.claimedAttimeFor a
pendingrun a worker has taken: when. It is running.triggerstringstartedAttimefinishedAttime or nulldurationMsinteger or null