| Field | Value |
|---|
| Source spec | issuer-directory/openapi/v1.json |
| OpenAPI version | 3.1.1 |
| API version | 1.0.0 |
| Operations | 24 |
| Path filter | All paths |
API alias for /buildinfo.json (same payload).
| Property | Value |
|---|
| Operation ID | StellaOpsBuildInfoApi |
| Tags | StellaOps.IssuerDirectory.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Image build provenance (module, gitSha, gitCommitTime, imageBuiltAt, branch) for drift detection.
| Property | Value |
|---|
| Operation ID | StellaOpsBuildInfoFile |
| Tags | StellaOps.IssuerDirectory.WebService |
| Auth | Not declared |
| Request body | - |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Lists all issuers registered in the directory for the tenant, with an option to include globally shared issuers. Returns an array of issuer records.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_ListIssuers |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
includeGlobal | query | no | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Registers a new issuer in the directory with the provided ID, display name, slug, contact details, and discovery endpoints. Returns 201 Created with the new issuer record.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_CreateIssuer |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Returns the full issuer record for a specific issuer ID including metadata, contact information, discovery endpoints, and tags. Returns 404 if not found.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_GetIssuer |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
id | path | yes | |
includeGlobal | query | no | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Replaces the mutable fields of an existing issuer record. The route ID must match the body ID. Returns 200 with the updated record.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_UpdateIssuer |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|
id | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Permanently removes an issuer and all associated keys and trust records from the directory. Requires Admin authorization. Returns 204 No Content.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_DeleteIssuer |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
id | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Lists all cryptographic keys registered for the specified issuer, optionally including globally shared keys. Returns an array of key records with type, format, and expiry.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_ListIssuerKeys |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
includeGlobal | query | no | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Adds a new cryptographic key to the specified issuer. Supported key types include Ed25519PublicKey, X509Certificate, and DssePublicKey. Returns 201 Created with the new key record.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_CreateIssuerKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Permanently revokes a cryptographic key from the issuer directory. Requires Admin authorization. Returns 204 No Content.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_RevokeIssuerKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
keyId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Replaces an existing issuer key with a new key of the specified type and material, retiring the previous key. Returns 200 with the updated key record.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_RotateIssuerKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
keyId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Returns the current trust configuration for the specified issuer including weight, effective trust factors, and any inherited global trust settings.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_GetTrust |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
includeGlobal | query | no | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Creates or updates the trust weight assigned to an issuer for use in VEX consensus calculations. Returns 200 with the updated trust view including effective weight.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_SetTrust |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Removes the tenant-specific trust override for the specified issuer, reverting to global defaults if present. Requires Admin authorization. Returns 204 No Content.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_DeleteTrust |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Admin coverage read model for operator decision-signing (ADR-025 / OSK-P4): groups the tenant’s decision-signing key history by operator subject and derives each operator’s enrolment state (pending | enrolled | re_enroll_required). Admin-scoped; a projection over append-only history that returns no key material.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_GetOperatorSigningCoverage |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Admin-initiated operator enrolment invite: returns a deep-link (and QR payload) to the enrolment ceremony pre-filled with the tenant’s issuer namespace and active compliance provider (ADR-025 / OSK-P3). Non-custodial — the link starts a client-side enrol ceremony; no key is minted server-side.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_GetOperatorEnrollInvite |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
subjectId | query | no | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Lists the authenticated operator’s decision-signing keys for the issuer, returning public verification material and lifecycle status. Requires a fresh step-up and the authority:signing-keys.enroll scope.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_ListOperatorSigningKeys |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Enrols an operator decision-signing public key (ADR-025), binding it to the caller’s subject from the token. Non-custodial: only the public key is accepted; private-key material is rejected. Requires a fresh step-up and the authority:signing-keys.enroll scope. Returns 201 with the key record (pending if dual-control is enabled).
| Property | Value |
|---|
| Operation ID | IssuerDirectory_EnrollOperatorSigningKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
List the public decision-signing keys enrolled for one operator subject. Intended for authenticated service-side key-presence checks; private key material is never returned.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_ListSubjectOperatorSigningKeys |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
subjectId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Returns one decision-signing key for service verification, including public verification material and lifecycle status. Requires the IssuerDirectory read policy and returns 404 for missing or non-decision-signing keys.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_GetOperatorSigningKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
keyId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Revokes an operator decision-signing key. The revoked key stays resolvable for verifying past decisions. Requires a fresh step-up and the authority:signing-keys.enroll scope. Returns 204 No Content.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_RevokeOperatorSigningKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
keyId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Dual-control approval: a second approver (authority:signing-keys.admin) promotes a pending operator decision-signing key to active. The approver must differ from the enroller. Returns 200 with the now-active key record.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_ApproveOperatorSigningKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | - |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
keyId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Rotates the caller’s operator decision-signing key, retiring the previous key and binding the replacement to the same subject. Requires a fresh step-up and the authority:signing-keys.enroll scope. Returns 200 with the new key record.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_RotateOperatorSigningKey |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
keyId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | - |
Retires active, provider-incompatible DecisionSigning keys for Authority-resolved exception-granting subjects. Retained public keys remain historically resolvable; the configured provider-change grace cutoff controls new-decision verification. A stable operationId returns the original immutable receipt on replay.
| Property | Value |
|---|
| Operation ID | IssuerDirectory_SupersedeOperatorKeysForProviderChange |
| Tags | Issuer Directory |
| Auth | Not declared |
| Request body | application/json |
Parameters:
| Name | In | Required | Description |
|---|
issuerId | path | yes | |
Responses:
| Status | Description | Content types |
|---|
200 | OK | application/json |
400 | Bad Request | application/problem+json |
409 | Conflict | application/problem+json |