Skip to content

Server discovery

Stable

Generated from capsule-server/openapi.json, the OpenAPI 3.2 document capsule-server emits and mise run openapi-check-kynos keeps current. To change a description on this page, change the annotation on the handler or model it comes from and regenerate — this file is build output. The auth model, error contract, and conventions common to every endpoint are on the REST API overview.

Serve this server’s storage-attestation keys and their append-only history.

Cacheable and unauthenticated. It changes only when a key rotates, and a client that pinned a stale copy still resolves every receipt signed before it fetched — which is the property the append-only ordering buys.

Authentication: none.

StatusBodyDescription
200AttestationKeysResponse
application/json
OK.
413the request body exceeds the configured limit.

Serve the announced deprecation cutoffs.

The same announcements server-info carries, at their own path because that is the URL the Warning: header on a below-cutoff response points a human at, and because a client polling for a cutoff should not have to refetch the whole discovery record to find one.

Authentication: none.

StatusBodyDescription
200DeprecationsResponse
application/json
OK.
413the request body exceeds the configured limit.

Serve the federation capability revocation list.

Bounded by at most 24 hours of revocations, because an entry past the token’s own exp is pruned and a capability token cannot be minted to live longer than that. Public: a peer checking whether a token it holds is still good is, by construction, not yet authenticated here, and the record names no user — only opaque jtis.

Returns 503 if the revocation list cannot be read. Deliberately not an empty list: an empty list is the strongest possible claim this endpoint can make — nothing is revoked — and serving it on a storage failure would turn an outage into a silent un-revocation of every token, which is exactly what the peer-side fail-closed rule exists to prevent.

Authentication: none.

StatusBodyDescription
200RevokedJtiResponse
application/json
OK.
413the request body exceeds the configured limit.
503CodedProblem
application/problem+json
Revocation list unavailable.

Serve this server’s public, server-scoped facts.

Unauthenticated by contract: a client deciding whether it can talk to this server at all has no credential yet, and a peer resolving the key that verifies a capability token must not need one from the server whose claims it is checking.

Authentication: none.

StatusBodyDescription
200ServerInfoResponse
application/json
OK.
413the request body exceeds the configured limit.

The models these endpoints carry. A field whose type names another model links to it when this page documents that model, which it does when some path from an operation reaches it within 4 references. A model only ever reached deeper than that is named without being expanded.

The .well-known/capsule/attestation-keys record.

FieldTypeDescription
server_idstringRequired. This server’s canonical origin — the other half of the binding that refuses a cross-server replay.
keysPublishedKeyResponse[]Required. Every key this server has signed with, oldest first, the active one last.

The auth ceremony’s endpoints.

FieldTypeDescription
loginstringRequired. Where a session is opened.
refreshstringRequired. Where an access token is rotated.
logoutstringRequired. Where a session is ended.

An RFC 9457 problem detail.

FieldTypeDescription
typestringRequired.
titlestring
statusintegerRequired.
detailstring
instancestring
codestringRequired. The stable error.* catalog code. The client localizes this; detail stays English. Present on every problem this server renders.

One announced deprecation cutoff.

FieldTypeDescription
min_protocol_versionstringRequired. The lowest protocol_version that remains accepted after the cutoff.
announced_atstringRequired. When the announcement was first published, RFC 3339.
cutoffstringRequired. When versions below min_protocol_version stop being accepted, RFC 3339.
detail_urlstring | nullWhere a human reads what to do about it.

The .well-known/capsule/deprecation record.

FieldTypeDescription
announcementsDeprecationResponse[]Required. Every announced cutoff, in announcement order.

The accepted protocol_version range.

FieldTypeDescription
minstringRequired. The oldest version still accepted for writes.
maxstringRequired. The newest version this server speaks.

One published attestation key.

FieldTypeDescription
key_idstringRequired. The fingerprint a receipt’s server_key_id selects on, lowercase hex.
publicstringRequired. The hybrid public key, base64 (Ed25519ML-DSA-65).
algorithmstringRequired. The signature algorithm this key is used with.
active_fromstringRequired. When it began signing, RFC 3339.
active_tostring | nullWhen it stopped, or absent while it is the active key.

The .well-known/capsule/revoked-jti record.

FieldTypeDescription
generated_atstringRequired. When this snapshot was taken, RFC 3339. Part of the record rather than left to an HTTP Date, because the staleness rule a peer applies is a property of the list’s content — a verifier reasoning from a transport header would be trusting a cache to be honest about its own age.
max_staleness_secondsintegerRequired. How stale a cached copy of this list may be before it stops being usable, in seconds. Published so the rule is discoverable rather than a constant every peer implementation has to have read the same document to know.
revokedRevokedTokenResponse[]Required. Every revoked jti not yet past its own expiry, soonest expiry first.

One revoked capability token.

FieldTypeDescription
jtistringRequired. The token’s jti claim.
expires_atstringRequired. The token’s own exp, RFC 3339. After this the entry is pruned.

The .well-known/capsule/server-info record.

Server-scoped facts only. The registry’s rule — never a user list — is structural here: this type holds no user-shaped field, so there is nothing for a future edit to leak through.

FieldTypeDescription
server_idstringRequired. This server’s canonical origin.
api_base_urlstringRequired. Where the versioned API lives.
authAuthEndpointsResponseRequired. Where a client performs the auth ceremony.
federation_urlstring | nullWhere federated peers talk to this server. Absent when it does not federate.
protocol_versionProtocolWindowResponseRequired. The protocol_version range accepted for writes today, both ends inclusive.
signing_keystringRequired. The raw Ed25519 public key this server’s tokens verify under, base64.
signing_algorithmstringRequired. The signature algorithm that key is used with.
deprecationsDeprecationResponse[]Required. Announced deprecation cutoffs, in announcement order. Empty when none is pending.