License API: schemas

The request and response bodies of the operations in this API.

LicenseSignatureAlgorithm

Type: one of "EdDSA"

LicenseVerificationKeyDto

PropertyTypeRequiredDescription
algLicenseSignatureAlgorithmyes
crvstringyes
kidstringyesbase64url(sha256(SPKI DER)) — derived from the key, never assigned.
ktystringyes
publicKeyPemstringyesSPKI PEM of the same key. Published alongside the JWK because the offline verifier builds its trust store from PEM, and an air-gapped installer must be able to embed it without a JWK-to-PEM conversion step.
usestringyes
xstringyesbase64url of the raw Ed25519 public key.

LicenseVerificationKeySetDto

PropertyTypeRequiredDescription
keysarray of LicenseVerificationKeyDtoyes

LicenseVerificationKeySetDtoDataEnvelope

PropertyTypeRequiredDescription
dataLicenseVerificationKeySetDtoyes

ProblemActionableBy

Who can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed.

Type: one of "user", "org-admin", "platform", "none"

ProblemDetailsDto

RFC 9457 problem document. The declared members are the reserved core; extension members are TOP-LEVEL and OPEN, owned by the refusing plane.

PropertyTypeRequiredDescription
actionableByProblemActionableBynoWho can act on this refusal: user (correct the input, sign in), org-admin (an administrator of the organisation), platform (the operators of this installation), none (nobody — it cannot succeed). ABSENT when not known; never guessed.
codestringyesSCREAMING_SNAKE_CASE. The machine-branchable refusal, and the value a policy rule, a retry predicate and a UI branch all name.
detailstringnoHuman-readable and specific to THIS occurrence.
errorsarray of ProblemFieldIssueDtonoField-level issues, when the refusal is about the request body.
instancestringnoURI reference identifying the occurrence — a request path, a run, a row.
paramsmap of string or number or booleannoSafe i18n interpolation values for the message keyed by code — typed and allowlisted per code by its declaration. Never server-authored copy, never internal diagnostics.
retryProblemRetrynoWhat a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known.
statusnumberyesThe HTTP status code, repeated in the body so a logged document is self-contained.
titlestringyesShort, human-readable, and STABLE for a given type. Never per-occurrence — that is detail.
traceIdstringnoW3C trace-context trace-id, present when the caller sent a traceparent. Omitted rather than invented when it did not.
typestringyesAbsolute URI identifying the refusal TYPE. Derived one-to-one from code, so a caller may branch on either and can never be told two different things. Never about:blank.

ProblemFieldIssueDto

PropertyTypeRequiredDescription
codestringnoSCREAMING_SNAKE_CASE code of THIS issue, for a frontend i18n key. Present when the issue was minted by a declared problem.
detailstringyesProse for logs and developers. A frontend localises from code + params instead.
paramsmap of string or number or booleannoSafe i18n interpolation values for this issue's code.
pointerstringyesRFC 6901 JSON Pointer into the request body. Root is "/".

ProblemRetry

What a retry can achieve: transient (later, unchanged), after-change (only after someone changes something), never (a defect until a fixed version ships). ABSENT when not known.

Type: one of "transient", "after-change", "never"

RegistryJwkDto

PropertyTypeRequiredDescription
algstringyes
estringyesbase64url exponent.
kidstringyesbase64url(sha256(SPKI DER)) — derived, never assigned.
ktystringyes
nstringyesbase64url modulus.
usestringyes

RegistryJwksDto

PropertyTypeRequiredDescription
keysarray of RegistryJwkDtoyes

RegistryTokenResponseDto

PropertyTypeRequiredDescription
access_tokenstringyesThe SAME JWT. Read by podman and containerd. Both keys are required — omitting either breaks a real client.
expires_innumberyesSeconds. Fixed at 300 — the TTL is the revocation SLA.
issued_atstring (date-time)yes
tokenstringyesThe RS256 JWT. Read by docker.