Skip to content

How much the deployment was used since a time

View as Markdown
GET
/v1/license/usage
curl --request GET \
--url 'https://example.com/v1/license/usage?since=2026-04-15T12%3A00%3A00Z' \
--header 'Authorization: Bearer <token>'

What a free license key’s renewal carries (kindgi license renew --runtime): the runs started since since (not dry runs, replays, evals or child runs), the distinct people who started runs or decided approvals (counted in each tenant and summed, so a person in two tenants counts twice), the projects in production when the runtime can put projects in production (PUT /v1/projects/{projectId}/production), and the runtime’s version. Counts only: no content, names or ids. Only the deployment’s own token (KINDGI_API_TOKEN), or a system key holding system:license, reads it; anyone else is refused (license-operator-only), and the refusal recorded, before since is read. A deployment that doesn’t report it answers 404.

since
required
string format: date-time

The period’s start (ISO 8601, with a zone): kindgi license renew sends when the current key was issued. Up to five minutes ahead of the runtime’s clock is taken as now, since clocks differ; further ahead is refused.

The counts.

Media typeapplication/json
object
since
required

The period’s start, as asked.

string format: date-time
until
required

When they were counted.

string format: date-time
runtimeVersion
required

The runtime’s version.

string
runs
required

Runs started in the period: not dry runs, replays, evals or child runs.

integer
people
required

Distinct people who started runs or decided approvals in the period, counted in each tenant and summed.

integer
projectsInProduction

Projects in production at until; absent when the runtime has no such setting.

integer
Examplegenerated
{
"since": "2026-04-15T12:00:00Z",
"until": "2026-04-15T12:00:00Z",
"runtimeVersion": "example",
"runs": 1,
"people": 1,
"projectsInProduction": 1
}

since is missing, not a time with a zone, or more than five minutes ahead of the runtime’s clock (bad-input).

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Missing / malformed / expired / revoked bearer token.

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

Not the deployment’s own token or a system key holding system:license (license-operator-only).

Media typeapplication/json
object
error
required
object
code
required

Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).

string
message
required
string
details

Optional, kind-specific.

object
key
additional properties
any
requestId
required

Server-assigned request id; also echoed via X-Request-Id header.

string
Examplegenerated
{
"error": {
"code": "example",
"message": "example",
"details": {},
"requestId": "example"
}
}

See also