Where the deployment's license key stands
const url = 'https://example.com/v1/license';const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
try { const response = await fetch(url, options); const data = await response.json(); console.log(data);} catch (error) { console.error(error);}curl --request GET \ --url https://example.com/v1/license \ --header 'Authorization: Bearer <token>'Whose key, which use, until when and how many days are left, and from 30 days before it expires how to get the next one, as the runtime’s startup banner says it. Never the key itself. mode: development when the runtime runs with KINDGI_DEV and needs no key. The license is the deployment’s: its own token (KINDGI_API_TOKEN), or a system key holding system:license (the renewal job’s), reads all of it, renew with where the deployment keeps its key included. Where the deployment serves exactly one tenant, that tenant’s admins read the countdown only (mode, standing, expiresAt, startsUntil, daysLeft, renewBy): never whose key it is or where it’s kept. Anyone else is refused. A deployment that doesn’t report it answers 404.
Authorizations
Section titled “Authorizations”Responses
Section titled “Responses”The license status.
object
development: no key needed (KINDGI_DEV); the key’s fields are absent, and preview may be present.
Whose key: the name the banner prints.
Until when the runtime starts with this key: expiresAt plus the 14-day grace.
Whole days until it expires; negative once it has.
expiring: 30 days or fewer left. grace: expired, and the runtime still starts with it (for 14 days). expired: past the grace too: this server runs on, but won’t start with it again.
Which way to the next key applies: command, a key this deployment renews itself (kindgi license renew); contact, a key Kindgi issued (write to Kindgi).
How to get the next key, as the banner says it, with where the deployment keeps its key and renewer. Present from 30 days before the key expires, and only to the deployment’s own token.
This build’s own expiry, before Kindgi 1.0: a preview release stops starting 90 days after it was released, in every mode, unless a production key exempts it. Absent when nothing expires: a 1.0 or later release, a build from source, or a production key.
object
This build’s release, 0.1.8.
From then on, it no longer starts: releasedAt plus 90 days.
Whole days until then; negative once it has passed.
expiring: 30 days or fewer left. expired: past it: this server runs on, but won’t start again; run a newer release.
Example
{ "mode": "development", "use": "production", "standing": "valid", "renewBy": "command", "preview": { "standing": "valid" }}Missing / malformed / expired / revoked bearer token.
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}Not the deployment’s own token, a system key holding system:license, or an admin of the one tenant it serves (license-operator-only). On a runtime serving one tenant, a system key holding anything but system:license (system-key-scope-not-served).
object
object
Stable machine-readable discriminant. Values match domain error codes (see docs/API-ROUTE-CONVENTIONS.md §4.3).
Optional, kind-specific.
object
Server-assigned request id; also echoed via X-Request-Id header.
Examplegenerated
{ "error": { "code": "example", "message": "example", "details": {}, "requestId": "example" }}