Get an account’s usage
This page needs your own installation with an Embed license.
GET/
Returns one account’s usage over a range of days.
Needs a partner key: Authorization: Bearer gre_…, from Platform › Partner keys. Call it from your server only.
Parameters
Path
accountIdRequired · stringYour ID for the customer’s account: 1 to 255 bytes of UTF-8, case-sensitive. URL-encode it: it may contain
/.
Query
fromRequired · stringThe first UTC day counted,
YYYY-MM-DD.toRequired · stringThe last UTC day counted, included. Not after today, and at most 366 days with
from.
What is counted
runs: production runs by the UTC day they started, a sub-flow’s counted with the run that called it. testRuns: the customer’s test runs. assistantTokens: the Keel tokens it used that the installation pays for.
Counts never shrink when runs are deleted. They are added up every few minutes: asOf says when.
Responses
- 200OK
The account’s usage.
fromortois missing or out of range.- 404
NOT_FOUNDYou have no account with this ID.
Something failed on the installation’s side. Try again.
Any call can also answer: 401 UNAUTHORIZED · 403 EMBED_NOT_LICENSED · 403 IP_NOT_ALLOWED · 429 RATE_LIMITED · 503 BUSY. See Errors.
Request
GORUNNER="https://automations.example.com"
GORUNNER_EMBED_KEY="YOUR_PARTNER_KEY" # gre_…
ACCOUNT_ID="acct-bakery"
URL="$GORUNNER/api/embed/v1/accounts/$ACCOUNT_ID/"
URL="${URL}usage?from=2026-10-01&to=2026-10-25"
curl "$URL" \
-H "Authorization: Bearer $GORUNNER_EMBED_KEY"const GORUNNER = "https://automations.example.com";
const KEY = process.env.GORUNNER_EMBED_KEY; // gre_…
const ACCOUNT_ID = encodeURIComponent("acct-bakery");
const res = await fetch(
`${GORUNNER}/api/embed/v1/accounts/` +
`${ACCOUNT_ID}/` +
`usage?from=2026-10-01&to=2026-10-25`,
{
headers: { Authorization: `Bearer ${KEY}` },
},
);
const { data } = await res.json();import os, requests
from urllib.parse import quote
GORUNNER = "https://automations.example.com"
KEY = os.environ["GORUNNER_EMBED_KEY"] # gre_…
ACCOUNT_ID = quote("acct-bakery", safe="")
res = requests.get(
f"{GORUNNER}/api/embed/v1/accounts/"
f"{ACCOUNT_ID}/usage",
params={
"from": "2026-10-01",
"to": "2026-10-25",
},
headers={"Authorization": f"Bearer {KEY}"},
)
data = res.json()["data"]Response · 200 OK
{
"data": {
"account": {
"id": "acct-bakery",
"name": "Bakery Ltd"
},
"from": "2026-10-01",
"to": "2026-10-25",
"runs": {
"worked": 480,
"failed": 30,
"held": 1,
"cancelled": 2,
"inProgress": 1,
"total": 514
},
"testRuns": 41,
"assistantTokens": 182300,
"asOf": "2026-10-25T08:55:00Z"
}
}Every field
It takes no body.
Response · 200 OK
dataobjectaccountobjectidstringnamestringfromstringtostringrunsobjectProduction runs by the UTC day they started.
totalis the sum of the other five.workedintegerfailedintegerheldintegercancelledintegerinProgressintegertotalintegertestRunsintegerRuns started from the editor to test, counted apart.
assistantTokensintegerAssistant tokens the installation paid for.
asOftime or nullWhen the counts were last rolled up (every 5 minutes); null until the first count after the embed license arrives has finished.