Admin API
Platform administration: API token and session management, approval groups, delegation boundaries, feature-flag governance, and notification dispatch-outbox introspection. Both reads and mutations under /api/admin require the admin tier.
43 routes
Response metadata: x-api-version, x-request-id, and traceresponse apply to normal routed responses and are omitted from the per-operation header tables below.
GET/api/admin/agents
admin access
Returns a list of all registered agents with their most recent jobs.
Requires admin permission — enforced in-handler as defense-in-depth regardless of RBAC middleware method handling.
Secret hygiene
token_hash and the raw public_key are NEVER included in the response. The immutable enrollment id and a SHA-256 public-key fingerprint are included so an approval can bind to the exact row/key the administrator reviewed. cryptographically_admitted is derived from the complete consumed-challenge linkage rather than from a nullable id alone.
Bounds
Agents are capped at 500 (newest first); jobs are capped at 5 000 total across all agents, then further limited to the 10 most recent per agent in Rust. capped: true in the response signals the agent list was truncated.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/agents
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/agents'
GET/api/admin/agents/dead-lettered-jobs
admin access
Lists every terminal DeadLettered agent job (poison jobs that exhausted the redispatch cap, #23) so an operator can SEE them — otherwise they are an operational black hole.
Admin-only (re-checked in-handler as defense-in-depth). Newest first, capped at 500. spec/live_context are excluded (secret hygiene).
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/agents/dead-lettered-jobs
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
dead_lettered_jobs | JSON value | Required | Value of dead_lettered_jobs returned in the response body. |
count | JSON value | Required | Number of items represented in this response. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/agents/dead-lettered-jobs'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"dead_lettered_jobs": null,
"count": null
}
POST/api/admin/agents/dead-lettered-jobs/{job_id}/requeue
admin access
Recovers a DeadLettered job: returns it to Pending with a fresh redispatch budget (delivery_attempts = 0) + cleared lease state, so the agent fleet can pick it up again.
Admin-only + audited. Guards (in the project lock order requests -> agent_jobs, which cannot deadlock since no path locks job -> request): - the job must still be DeadLettered (idempotent: a second requeue 409s); - the PARENT REQUEST must still be ACTIVE — a job whose request has concluded (failed/cancelled/rejected/completed/...) or is orphaned/unknown is REFUSED (409), so requeue can never re-dispatch stale work for a closed request.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/dead-lettered-jobs/{job_id}/requeue
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | JSON value | Required | Value of job_id returned in the response body. |
status | string | Required | Current operation or resource status. |
requeued | boolean | Required | Value of requeued returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
'https://<your-host>/api/admin/agents/dead-lettered-jobs/<job_id>/requeue'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"job_id": null,
"status": "<string>",
"requeued": false
}
POST/api/admin/agents/enrollment-challenges
admin access
Preprovisions one short-lived bootstrap grant for an exact agent identity and existing Ed25519 workload key.
The plaintext challenge is returned only in this response; the database retains its hash. Delivery to the intended workload remains a trusted, provider-neutral provisioning responsibility.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/enrollment-challenges
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: CreateEnrollmentChallengeBody.
| Name | Type | Requirement | Description |
|---|---|---|---|
agent_id | string | Required | Value of agent_id in the JSON request body. |
platform | string | Required | Value of platform in the JSON request body. |
public_key | string | Required | Value of public_key in the JSON request body. |
expires_in_seconds | integer | Optional | Value of expires_in_seconds in the JSON request body. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
200 response headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Cache-Control | string | Required | The handler directly marks this response no-store, preventing persistence or idempotency replay of the returned value. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--data '{"agent_id":"<string>","platform":"<string>","public_key":"<string>"}' \
'https://<your-host>/api/admin/agents/enrollment-challenges'
POST/api/admin/agents/jobs/{job_id}/cancel
admin access
Cancels a PENDING (not-yet-leased) agent job — one created in error or no longer wanted — instead of letting an agent lease and run it.
CASes on status = 'Pending': once Leased/Running an agent owns the job (cancelling CP-side would split-brain), and a terminal job is already done — both → 409. Admin-only, audited; emits a NON-alerting job.cancelled event. JOB-SCOPED: the parent request stays Executing, and the operator concludes it with POST /api/requests/{id}/fail (identical to the reconcile-resolve contract). A cancelled LiveApply still consumes the request's permanent LiveApply slot — there is no in-place retry; re-attempting needs a fresh request (see create_live_apply_job).
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/jobs/{job_id}/cancel
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: CancelJobBody.
| Name | Type | Requirement | Description |
|---|---|---|---|
reason | string | Required | Human-readable reason recorded with the operation and its audit trail. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{"reason":"<string>"}' \
'https://<your-host>/api/admin/agents/jobs/<job_id>/cancel'
POST/api/admin/agents/jobs/{job_id}/force-fail
admin access
Terminally fails a STUCK Leased agent job (leased to an agent that died / never acked) without waiting out the lease-expiry + dead-letter cycles.
Scoped to Leased jobs whose mode is OfflineDryRun / LivePlan — modes that NEVER touch real infrastructure, so Failed is safe and a late ack/result is rejected by the result CAS (status IN ('Leased','Running')). A Leased LiveApply is EXCLUDED (409): with out-of-order delivery the agent may have started applying real infra, so it must go through the lease-expiry path → ReconcileRequired (this endpoint never sets ReconcileRequired). Pending uses cancel; a Running job belongs on the lease-expiry/reconcile path. Admin-only, audited; emits a NON-alerting job.force_failed event. JOB-SCOPED: the parent request is left for the operator's POST /api/requests/{id}/fail (identical to the cancel/reconcile contract).
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/jobs/{job_id}/force-fail
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: ForceFailJobBody.
| Name | Type | Requirement | Description |
|---|---|---|---|
reason | string | Required | Human-readable reason recorded with the operation and its audit trail. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | JSON value | Required | Value of job_id returned in the response body. |
request_id | JSON value | Required | Request correlation or lifecycle identifier. |
status | string | Required | Current operation or resource status. |
force_failed | boolean | Required | Value of force_failed returned in the response body. |
note | string | Required | Value of note returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{"reason":"<string>"}' \
'https://<your-host>/api/admin/agents/jobs/<job_id>/force-fail'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"job_id": null,
"request_id": null,
"status": "<string>",
"force_failed": false,
"note": "<string>"
}
POST/api/admin/agents/jobs/{job_id}/priority
admin access
Re-prioritize a PENDING agent job (#15).
Admin-tier. Only a Pending (not-yet-leased) job is reprioritizable — a leased/running/ terminal job's queue priority is moot, so the UPDATE CASes on status = 'Pending'. Higher = more urgent (0..=9). Audited.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/jobs/{job_id}/priority
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: SetJobPriorityBody.
| Name | Type | Requirement | Description |
|---|---|---|---|
priority | integer | Required | Value of priority in the JSON request body. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | JSON value | Required | Value of job_id returned in the response body. |
status | JSON value | Required | Current operation or resource status. |
priority | JSON value | Required | Value of priority returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{"priority":0}' \
'https://<your-host>/api/admin/agents/jobs/<job_id>/priority'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"job_id": null,
"status": null,
"priority": null
}
POST/api/admin/agents/jobs/{job_id}/reconcile
admin access
Resolves a terminal-dead-end ReconcileRequired live-mutation job to terminal Failed once an operator has reconciled provider and state out-of-band.
Failed is the conservative truth: the CP cannot verify that an interrupted mutation reached its intended state. The operator's reconciliation is captured in the audited reason. Admin-only. A non-alerting job.reconcile_resolved domain event closes the reconcile-required alert lifecycle (it does NOT page). A LiveApply parent stays Executing for explicit operator conclusion through POST /api/requests/{id}/fail; resolving a LiveDestroy also fails its TearingDown step and parent request so rollback cannot remain wedged. There is NO in-place LiveApply retry: its request slot is permanently consumed (the no-double-apply index is all-statuses), so re-attempting requires a fresh request (see create_live_apply_job).
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/jobs/{job_id}/reconcile
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: ReconcileBody.
| Name | Type | Requirement | Description |
|---|---|---|---|
reason | string | Required | Human-readable reason recorded with the operation and its audit trail. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | JSON value | Required | Value of job_id returned in the response body. |
request_id | JSON value | Required | Request correlation or lifecycle identifier. |
status | string | Required | Current operation or resource status. |
resolved | boolean | Required | Value of resolved returned in the response body. |
note | JSON value | Required | Value of note returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{"reason":"<string>"}' \
'https://<your-host>/api/admin/agents/jobs/<job_id>/reconcile'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"job_id": null,
"request_id": null,
"status": "<string>",
"resolved": false,
"note": null
}
GET/api/admin/agents/jobs/{job_id}/result
admin access
Retrieve one agent job's SIGNED result attestation + metadata (#agent-job-result).
Admin-only. The signed_envelope is a pure cryptographic attestation (digests + signature + ids, NO raw evidence); the raw agent-submitted evidence_json is NEVER exposed. For a successful Terraform LivePlan, plan_review is reparsed server-side from the exact bytes whose digest is carried by the signed envelope and contains only an allowlisted action/placement projection. 404 if the job is unknown OR has no result yet (signed_envelope IS NULL). Scoped principals see only jobs whose parent request falls within their site/environment scope (run-5 A0).
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/agents/jobs/{job_id}/result
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | JSON value | Required | Value of job_id returned in the response body. |
result_status | JSON value | Required | Value of result_status returned in the response body. |
completed_at | JSON value | Required | Value of completed_at returned in the response body. |
result_id | JSON value | Required | Value of result_id returned in the response body. |
evidence_digest | JSON value | Required | Value of evidence_digest returned in the response body. |
raw_plan_digest | JSON value | Required | Value of raw_plan_digest returned in the response body. |
signed_envelope | JSON value | Required | Value of signed_envelope returned in the response body. |
plan_review | JSON value | Required | Value of plan_review returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/agents/jobs/<job_id>/result'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"job_id": null,
"result_status": null,
"completed_at": null,
"result_id": null,
"evidence_digest": null,
"raw_plan_digest": null,
"signed_envelope": null,
"plan_review": null
}
GET/api/admin/agents/jobs/{job_id}/state
admin access
An operator's read-only view of ONE agent job's LIFECYCLE state (status, mode, the holding agent, lease deadline, redispatch attempts), so an operator can SEE a stuck Leased/Running job before deciding to force-fail / cancel / reconcile it.
Admin-only. SECRET-SAFE: never returns spec / fencing_token / cp_nonce / live_context / raw evidence / the signed envelope (the attestation is GET .../result). The 5-segment …/state path (vs a bare 4-segment …/jobs/{job_id}) avoids shadowing …/agents/{agent_id}/approve|revoke for an agent literally named "jobs" — a bare GET there would 405 the agent's approve/revoke.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/agents/jobs/{job_id}/state
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
job_id | JSON value | Required | Value of job_id returned in the response body. |
request_id | JSON value | Required | Request correlation or lifecycle identifier. |
platform | JSON value | Required | Value of platform returned in the response body. |
mode | JSON value | Required | Value of mode returned in the response body. |
status | JSON value | Required | Current operation or resource status. |
result_status | JSON value | Required | Value of result_status returned in the response body. |
agent_id | JSON value | Required | Value of agent_id returned in the response body. |
lease_deadline | JSON value | Required | Value of lease_deadline returned in the response body. |
delivery_attempts | JSON value | Required | Value of delivery_attempts returned in the response body. |
evidence_digest | JSON value | Required | Value of evidence_digest returned in the response body. |
created_at | JSON value | Required | RFC 3339 timestamp when the resource was created. |
updated_at | JSON value | Required | RFC 3339 timestamp when the resource was last updated. |
completed_at | JSON value | Required | Value of completed_at returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/agents/jobs/<job_id>/state'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"job_id": null,
"request_id": null,
"platform": null,
"mode": null,
"status": null,
"result_status": null,
"agent_id": null,
"lease_deadline": null,
"delivery_attempts": null,
"evidence_digest": null,
"created_at": null,
"updated_at": null,
"completed_at": null
}
POST/api/admin/agents/live-apply-jobs
admin access
Disabled legacy endpoint.
Its caller-supplied platform, spec, and plan digest could bypass the request-scoped safe plan-review derivation. Live apply approval is available only through POST /api/requests/{id}/approve-live-apply, which derives every mutation-authorizing field from a successful stored LivePlan.
Auth posture
The route sits under /api/admin/ so the human RBAC middleware already enforces verified-human admin permission at the routing layer. The typed actor check below is defense-in-depth if the handler is ever re-mounted.
Returns 410 Gone for every authorized caller. No request body is accepted and no database or signing-key state is consulted.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/live-apply-jobs
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
'https://<your-host>/api/admin/agents/live-apply-jobs'
GET/api/admin/agents/liveness
admin access
?offline_after_secs=N — operational liveness of approved agents (#44).
Admin-gated; 503 with no DB. Read-only: this surfaces which approved agents have gone silent (offline detection) WITHOUT mutating the enrollment status, so it can never accidentally revoke an agent.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/agents/liveness
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
offline_after_secs | integer | Optional | Value supplied for the offline_after_secs query parameter. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/agents/liveness'
GET/api/admin/agents/queue-depth
admin access
The pending (queued) agent-job backlog per platform (#6 read slice; the pending-jobs view #15 deferred).
For each platform with pending work: the pending count, the oldest pending job's age, and the highest priority waiting. Admin-only (explicit re-check — GET routes under /api/admin/ may not be gated by the RBAC middleware). Only Pending jobs are "queued" (leased/running/terminal are excluded). Exposes ONLY aggregates + the platform name — no spec/live_context/request_id/agent ids.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/agents/queue-depth
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
queues | JSON value | Required | Value of queues returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/agents/queue-depth'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"queues": null
}
POST/api/admin/agents/{agent_id}/approve
admin access
Sets an agent's status to 'approved'.
The platform must match the consumed trusted challenge; capabilities remain administrator-authoritative and the agent's self-declared capability document is only a hint.
The request must carry enrollment_id and public_key_fingerprint from the current admin roster together with platform. Binding approval to the immutable row and reviewed key prevents a stale page from approving a later enrollment that reused the same human-readable agent id. This endpoint sits under /api/admin/ so the human RBAC middleware enforces the admin permission. The in-handler human-session gate additionally keeps agent and API-token credentials from minting a transitive workload identity.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/{agent_id}/approve
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
agent_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: ApproveBody.
| Name | Type | Requirement | Description |
|---|---|---|---|
enrollment_id | string (uuid) | Required | Immutable enrollment row reviewed by the administrator. A stale review must never approve a later enrollment that reused the same agent_id. |
public_key_fingerprint | string | Required | Non-secret SHA-256 fingerprint displayed by the admin enrollment list. Required so approval is bound to the exact reviewed public key as well as the immutable row. |
platform | string | Required | Authoritative platform selected during trusted provisioning. Required; a mismatch from the consumed challenge is rejected. |
capabilities | object (Capabilities) | Optional | Authoritative capabilities assigned by admin (overwrites self-declared). |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
agent_id | JSON value | Required | Value of agent_id returned in the response body. |
enrollment_id | JSON value | Required | Value of enrollment_id returned in the response body. |
public_key_fingerprint | JSON value | Required | Value of public_key_fingerprint returned in the response body. |
status | string | Required | Current operation or resource status. |
platform | JSON value | Required | Value of platform returned in the response body. |
capabilities_digest | JSON value | Required | Value of capabilities_digest returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{"enrollment_id":"<uuid>","public_key_fingerprint":"<string>","platform":"<string>"}' \
'https://<your-host>/api/admin/agents/<agent_id>/approve'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"agent_id": null,
"enrollment_id": null,
"public_key_fingerprint": null,
"status": "<string>",
"platform": null,
"capabilities_digest": null
}
POST/api/admin/agents/{agent_id}/revoke
admin access
Sets an agent's status to 'revoked' (from pending or approved).
Revocation is TERMINAL: authenticate_agent rejects any status other than 'approved', so the agent's token is refused on its next call, and admin_approve_agent cannot move it back. Already-leased jobs are NOT force-cancelled here — they wind down via the lease/fencing/reconcile path; this closes the door to NEW work. Admin- tier (the /api/admin/ middleware blocks agent-token auth). Idempotent: re- revoking an already-revoked agent returns 200 without a duplicate audit row. The request must carry the immutable enrollment id and reviewed public-key fingerprint from the current admin roster. A stale snapshot returns 409 and cannot revoke a replacement enrollment that reused the same agent id. 404 if the agent is unknown.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/agents/{agent_id}/revoke
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
agent_id | string | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: RevokeBody.
| Name | Type | Requirement | Description |
|---|---|---|---|
enrollment_id | string (uuid) | Required | Immutable enrollment row reviewed by the administrator. |
public_key_fingerprint | string | Required | Non-secret SHA-256 fingerprint displayed by the admin enrollment list. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
agent_id | JSON value | Required | Value of agent_id returned in the response body. |
enrollment_id | JSON value | Required | Value of enrollment_id returned in the response body. |
public_key_fingerprint | JSON value | Required | Value of public_key_fingerprint returned in the response body. |
status | string | Required | Current operation or resource status. |
already_revoked | boolean | Optional | Value of already_revoked returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{"enrollment_id":"<uuid>","public_key_fingerprint":"<string>"}' \
'https://<your-host>/api/admin/agents/<agent_id>/revoke'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"agent_id": null,
"enrollment_id": null,
"public_key_fingerprint": null,
"status": "<string>",
"already_revoked": false
}
GET/api/admin/approval-groups-contract
admin access
Admin approval groups.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/approval-groups-contract
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
source | string | Required | Origin or authority of the returned data. |
approvalGroupsMode | string | Required | Value of approvalGroupsMode returned in the response body. |
groupMappingReadOnly | boolean | Required | Value of groupMappingReadOnly returned in the response body. |
datacenterFallbackRequired | boolean | Required | Value of datacenterFallbackRequired returned in the response body. |
delegationReviewRequired | boolean | Required | Value of delegationReviewRequired returned in the response body. |
separationOfDutiesReviewRequired | boolean | Required | Value of separationOfDutiesReviewRequired returned in the response body. |
liveIdentityLookupAllowed | boolean | Required | Value of liveIdentityLookupAllowed returned in the response body. |
graphCallsAllowed | boolean | Required | Value of graphCallsAllowed returned in the response body. |
roleAssignmentMutationAllowed | boolean | Required | Value of roleAssignmentMutationAllowed returned in the response body. |
groupMembershipMutationAllowed | boolean | Required | Value of groupMembershipMutationAllowed returned in the response body. |
approvalMutationAllowed | boolean | Required | Value of approvalMutationAllowed returned in the response body. |
policyMutationAllowed | boolean | Required | Value of policyMutationAllowed returned in the response body. |
workflowMutationAllowed | boolean | Required | Value of workflowMutationAllowed returned in the response body. |
providerCallsAllowed | boolean | Required | Value of providerCallsAllowed returned in the response body. |
notificationDispatchAllowed | boolean | Required | Value of notificationDispatchAllowed returned in the response body. |
rawUserDataAllowed | boolean | Required | Value of rawUserDataAllowed returned in the response body. |
rawGroupDataAllowed | boolean | Required | Value of rawGroupDataAllowed returned in the response body. |
rawMembershipRowsAllowed | boolean | Required | Value of rawMembershipRowsAllowed returned in the response body. |
rawApprovalPayloadsAllowed | boolean | Required | Value of rawApprovalPayloadsAllowed returned in the response body. |
rawProviderPayloadsAllowed | boolean | Required | Value of rawProviderPayloadsAllowed returned in the response body. |
rawRecipientDataAllowed | boolean | Required | Value of rawRecipientDataAllowed returned in the response body. |
tenantIdentifiersAllowed | boolean | Required | Value of tenantIdentifiersAllowed returned in the response body. |
objectIdentifiersAllowed | boolean | Required | Value of objectIdentifiersAllowed returned in the response body. |
principalIdentifiersAllowed | boolean | Required | Value of principalIdentifiersAllowed returned in the response body. |
groupIdentifiersAllowed | boolean | Required | Value of groupIdentifiersAllowed returned in the response body. |
credentialValuesAllowed | boolean | Required | Value of credentialValuesAllowed returned in the response body. |
tokenValuesAllowed | boolean | Required | Value of tokenValuesAllowed returned in the response body. |
privateNetworkValuesAllowed | boolean | Required | Value of privateNetworkValuesAllowed returned in the response body. |
groupScopes | array<JSON value> | Required | Value of groupScopes returned in the response body. |
groupStates | array<JSON value> | Required | Value of groupStates returned in the response body. |
mappingDimensions | array<JSON value> | Required | Value of mappingDimensions returned in the response body. |
requiredGuards | array<JSON value> | Required | Value of requiredGuards returned in the response body. |
blockedReasons | array<JSON value> | Required | Value of blockedReasons returned in the response body. |
requiredEvidence | array<JSON value> | Required | Value of requiredEvidence returned in the response body. |
rules | array<JSON value> | Required | Value of rules returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/approval-groups-contract'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"source": "<string>",
"approvalGroupsMode": "<string>",
"groupMappingReadOnly": false,
"datacenterFallbackRequired": false,
"delegationReviewRequired": false,
"separationOfDutiesReviewRequired": false,
"liveIdentityLookupAllowed": false,
"graphCallsAllowed": false,
"roleAssignmentMutationAllowed": false,
"groupMembershipMutationAllowed": false,
"approvalMutationAllowed": false,
"policyMutationAllowed": false,
"workflowMutationAllowed": false,
"providerCallsAllowed": false,
"notificationDispatchAllowed": false,
"rawUserDataAllowed": false,
"rawGroupDataAllowed": false,
"rawMembershipRowsAllowed": false,
"rawApprovalPayloadsAllowed": false,
"rawProviderPayloadsAllowed": false,
"rawRecipientDataAllowed": false,
"tenantIdentifiersAllowed": false,
"objectIdentifiersAllowed": false,
"principalIdentifiersAllowed": false,
"groupIdentifiersAllowed": false,
"credentialValuesAllowed": false,
"tokenValuesAllowed": false,
"privateNetworkValuesAllowed": false,
"groupScopes": [],
"groupStates": [],
"mappingDimensions": [],
"requiredGuards": [],
"blockedReasons": [],
"requiredEvidence": [],
"rules": []
}
GET/api/admin/delegation-boundary-contract
admin access
Admin delegation boundary.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/delegation-boundary-contract
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
source | string | Required | Origin or authority of the returned data. |
delegationBoundaryMode | string | Required | Value of delegationBoundaryMode returned in the response body. |
siteDelegationReadOnly | boolean | Required | Value of siteDelegationReadOnly returned in the response body. |
roleScopeReadOnly | boolean | Required | Value of roleScopeReadOnly returned in the response body. |
approvalRouteReadOnly | boolean | Required | Value of approvalRouteReadOnly returned in the response body. |
breakGlassReviewOnly | boolean | Required | Value of breakGlassReviewOnly returned in the response body. |
liveDelegationChangeAllowed | boolean | Required | Value of liveDelegationChangeAllowed returned in the response body. |
roleAssignmentMutationAllowed | boolean | Required | Value of roleAssignmentMutationAllowed returned in the response body. |
approvalMutationAllowed | boolean | Required | Value of approvalMutationAllowed returned in the response body. |
policyMutationAllowed | boolean | Required | Value of policyMutationAllowed returned in the response body. |
workflowMutationAllowed | boolean | Required | Value of workflowMutationAllowed returned in the response body. |
graphCallsAllowed | boolean | Required | Value of graphCallsAllowed returned in the response body. |
providerCallsAllowed | boolean | Required | Value of providerCallsAllowed returned in the response body. |
notificationDispatchAllowed | boolean | Required | Value of notificationDispatchAllowed returned in the response body. |
rawUserDataAllowed | boolean | Required | Value of rawUserDataAllowed returned in the response body. |
rawGroupDataAllowed | boolean | Required | Value of rawGroupDataAllowed returned in the response body. |
rawDelegationRowsAllowed | boolean | Required | Value of rawDelegationRowsAllowed returned in the response body. |
rawApprovalPayloadsAllowed | boolean | Required | Value of rawApprovalPayloadsAllowed returned in the response body. |
rawProviderPayloadsAllowed | boolean | Required | Value of rawProviderPayloadsAllowed returned in the response body. |
rawRecipientDataAllowed | boolean | Required | Value of rawRecipientDataAllowed returned in the response body. |
tenantIdentifiersAllowed | boolean | Required | Value of tenantIdentifiersAllowed returned in the response body. |
objectIdentifiersAllowed | boolean | Required | Value of objectIdentifiersAllowed returned in the response body. |
principalIdentifiersAllowed | boolean | Required | Value of principalIdentifiersAllowed returned in the response body. |
groupIdentifiersAllowed | boolean | Required | Value of groupIdentifiersAllowed returned in the response body. |
credentialValuesAllowed | boolean | Required | Value of credentialValuesAllowed returned in the response body. |
tokenValuesAllowed | boolean | Required | Value of tokenValuesAllowed returned in the response body. |
privateNetworkValuesAllowed | boolean | Required | Value of privateNetworkValuesAllowed returned in the response body. |
delegationDomains | array<JSON value> | Required | Value of delegationDomains returned in the response body. |
delegationScopes | array<JSON value> | Required | Value of delegationScopes returned in the response body. |
delegationStates | array<JSON value> | Required | Value of delegationStates returned in the response body. |
requiredGuards | array<JSON value> | Required | Value of requiredGuards returned in the response body. |
blockedReasons | array<JSON value> | Required | Value of blockedReasons returned in the response body. |
requiredEvidence | array<JSON value> | Required | Value of requiredEvidence returned in the response body. |
rules | array<JSON value> | Required | Value of rules returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/delegation-boundary-contract'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"source": "<string>",
"delegationBoundaryMode": "<string>",
"siteDelegationReadOnly": false,
"roleScopeReadOnly": false,
"approvalRouteReadOnly": false,
"breakGlassReviewOnly": false,
"liveDelegationChangeAllowed": false,
"roleAssignmentMutationAllowed": false,
"approvalMutationAllowed": false,
"policyMutationAllowed": false,
"workflowMutationAllowed": false,
"graphCallsAllowed": false,
"providerCallsAllowed": false,
"notificationDispatchAllowed": false,
"rawUserDataAllowed": false,
"rawGroupDataAllowed": false,
"rawDelegationRowsAllowed": false,
"rawApprovalPayloadsAllowed": false,
"rawProviderPayloadsAllowed": false,
"rawRecipientDataAllowed": false,
"tenantIdentifiersAllowed": false,
"objectIdentifiersAllowed": false,
"principalIdentifiersAllowed": false,
"groupIdentifiersAllowed": false,
"credentialValuesAllowed": false,
"tokenValuesAllowed": false,
"privateNetworkValuesAllowed": false,
"delegationDomains": [],
"delegationScopes": [],
"delegationStates": [],
"requiredGuards": [],
"blockedReasons": [],
"requiredEvidence": [],
"rules": []
}
GET/api/admin/delegation-boundary-readiness
admin access
Dry-run admin delegation-boundary readiness.
Turns the static admin/delegation-boundary descriptor into a real decision: evaluate the boundary-review guards over a proposed delegation and return boundary-recorded (all criteria met; the live delegation change is a separately-approved step) or block. Never changes live delegation; evidence is referenced by summary only.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/delegation-boundary-readiness
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
delegate_role | string | Optional | Value supplied for the delegate_role query parameter. |
site_scope | string | Optional | Value supplied for the site_scope query parameter. |
approval_route | string | Optional | Value supplied for the approval_route query parameter. |
expiry | string | Optional | Value supplied for the expiry query parameter. |
separation_of_duties | string | Optional | Value supplied for the separation_of_duties query parameter. |
break_glass | string | Optional | Value supplied for the break_glass query parameter. |
evidence_manifest | string | Optional | Value supplied for the evidence_manifest query parameter. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/delegation-boundary-readiness'
GET/api/admin/feature-flag-governance-contract
admin access
Admin feature flag.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/feature-flag-governance-contract
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
source | string | Required | Origin or authority of the returned data. |
featureFlagGovernanceMode | string | Required | Value of featureFlagGovernanceMode returned in the response body. |
flagCatalogReadOnly | boolean | Required | Value of flagCatalogReadOnly returned in the response body. |
rolloutPlanReadOnly | boolean | Required | Value of rolloutPlanReadOnly returned in the response body. |
approvalRouteReadOnly | boolean | Required | Value of approvalRouteReadOnly returned in the response body. |
auditSummaryOnly | boolean | Required | Value of auditSummaryOnly returned in the response body. |
liveToggleAllowed | boolean | Required | Value of liveToggleAllowed returned in the response body. |
rolloutMutationAllowed | boolean | Required | Value of rolloutMutationAllowed returned in the response body. |
targetingMutationAllowed | boolean | Required | Value of targetingMutationAllowed returned in the response body. |
policyMutationAllowed | boolean | Required | Value of policyMutationAllowed returned in the response body. |
workflowMutationAllowed | boolean | Required | Value of workflowMutationAllowed returned in the response body. |
providerCallsAllowed | boolean | Required | Value of providerCallsAllowed returned in the response body. |
notificationDispatchAllowed | boolean | Required | Value of notificationDispatchAllowed returned in the response body. |
rawFlagRowsAllowed | boolean | Required | Value of rawFlagRowsAllowed returned in the response body. |
rawTargetingRowsAllowed | boolean | Required | Value of rawTargetingRowsAllowed returned in the response body. |
rawUserRowsAllowed | boolean | Required | Value of rawUserRowsAllowed returned in the response body. |
rawGroupRowsAllowed | boolean | Required | Value of rawGroupRowsAllowed returned in the response body. |
rawAuditLogsAllowed | boolean | Required | Value of rawAuditLogsAllowed returned in the response body. |
rawProviderPayloadsAllowed | boolean | Required | Value of rawProviderPayloadsAllowed returned in the response body. |
rawRecipientDataAllowed | boolean | Required | Value of rawRecipientDataAllowed returned in the response body. |
credentialValuesAllowed | boolean | Required | Value of credentialValuesAllowed returned in the response body. |
tokenValuesAllowed | boolean | Required | Value of tokenValuesAllowed returned in the response body. |
tenantIdentifiersAllowed | boolean | Required | Value of tenantIdentifiersAllowed returned in the response body. |
objectIdentifiersAllowed | boolean | Required | Value of objectIdentifiersAllowed returned in the response body. |
principalIdentifiersAllowed | boolean | Required | Value of principalIdentifiersAllowed returned in the response body. |
groupIdentifiersAllowed | boolean | Required | Value of groupIdentifiersAllowed returned in the response body. |
privateNetworkValuesAllowed | boolean | Required | Value of privateNetworkValuesAllowed returned in the response body. |
flagScopes | array<JSON value> | Required | Value of flagScopes returned in the response body. |
flagStates | array<JSON value> | Required | Value of flagStates returned in the response body. |
rolloutStrategies | array<JSON value> | Required | Value of rolloutStrategies returned in the response body. |
requiredGuards | array<JSON value> | Required | Value of requiredGuards returned in the response body. |
blockedReasons | array<JSON value> | Required | Value of blockedReasons returned in the response body. |
requiredEvidence | array<JSON value> | Required | Value of requiredEvidence returned in the response body. |
rules | array<JSON value> | Required | Value of rules returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/feature-flag-governance-contract'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"source": "<string>",
"featureFlagGovernanceMode": "<string>",
"flagCatalogReadOnly": false,
"rolloutPlanReadOnly": false,
"approvalRouteReadOnly": false,
"auditSummaryOnly": false,
"liveToggleAllowed": false,
"rolloutMutationAllowed": false,
"targetingMutationAllowed": false,
"policyMutationAllowed": false,
"workflowMutationAllowed": false,
"providerCallsAllowed": false,
"notificationDispatchAllowed": false,
"rawFlagRowsAllowed": false,
"rawTargetingRowsAllowed": false,
"rawUserRowsAllowed": false,
"rawGroupRowsAllowed": false,
"rawAuditLogsAllowed": false,
"rawProviderPayloadsAllowed": false,
"rawRecipientDataAllowed": false,
"credentialValuesAllowed": false,
"tokenValuesAllowed": false,
"tenantIdentifiersAllowed": false,
"objectIdentifiersAllowed": false,
"principalIdentifiersAllowed": false,
"groupIdentifiersAllowed": false,
"privateNetworkValuesAllowed": false,
"flagScopes": [],
"flagStates": [],
"rolloutStrategies": [],
"requiredGuards": [],
"blockedReasons": [],
"requiredEvidence": [],
"rules": []
}
GET/api/admin/feature-flag-governance-readiness
admin access
Dry-run admin feature-flag governance readiness.
Turns the static admin/feature-flag-governance descriptor into a real decision: evaluate the governance guards over a proposed feature-flag change and return governance-recorded (all criteria met; the live toggle is a separately- approved step) or block. Never toggles a flag or mutates rollout/targeting.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/feature-flag-governance-readiness
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
owner | string | Optional | Value supplied for the owner query parameter. |
approval_route | string | Optional | Value supplied for the approval_route query parameter. |
blast_radius | string | Optional | Value supplied for the blast_radius query parameter. |
rollback_plan | string | Optional | Value supplied for the rollback_plan query parameter. |
evidence_manifest | string | Optional | Value supplied for the evidence_manifest query parameter. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/feature-flag-governance-readiness'
GET/api/admin/notifications/dispatch-outbox
admin access
Admin telemetry: the dry-run notification-dispatch outbox, newest first.
Optional ?status= (validated) and ?limit= (clamped 1..=200). Returns ONLY dispatch metadata — never a notification body/recipient/target. Admin-gated by the central /api/admin prefix; an explicit check is kept as defense-in-depth. Degrades to {"source":"no-db","dispatches":[]} without a DB.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/notifications/dispatch-outbox
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
status | string | Optional | Value supplied for the status query parameter. |
limit | integer | Optional | Maximum number of results requested. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
source | JSON value | Required | Origin or authority of the returned data. |
dispatches | JSON value | Required | Value of dispatches returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/notifications/dispatch-outbox'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"source": null,
"dispatches": null
}
GET/api/admin/platform-settings
admin access
Admin platform settings.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/platform-settings
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/platform-settings'
PUT/api/admin/platform-settings
admin access
Update admin platform settings.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
PUT https://<your-host>/api/admin/platform-settings
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: PlatformConfig.
| Name | Type | Requirement | Description |
|---|---|---|---|
entra_tenant_id | string | Optional | Value of entra_tenant_id in the JSON request body. |
entra_client_id | string | Optional | Value of entra_client_id in the JSON request body. |
entra_authority | string | Optional | Value of entra_authority in the JSON request body. |
auth_mode | string | Optional | Value of auth_mode in the JSON request body. |
database_provider | string | Optional | Value of database_provider in the JSON request body. |
platform_name | string | Optional | Value of platform_name in the JSON request body. |
platform_url | string | Optional | Value of platform_url in the JSON request body. |
secret_provider | string | Optional | Value of secret_provider in the JSON request body. |
kubernetes_runtime | string | Optional | Value of kubernetes_runtime in the JSON request body. |
monitoring_provider | string | Optional | Value of monitoring_provider in the JSON request body. |
backup_provider | string | Optional | Value of backup_provider in the JSON request body. |
hypervisor_provider | string | Optional | Value of hypervisor_provider in the JSON request body. |
storage_provider | string | Optional | Value of storage_provider in the JSON request body. |
dns_provider | string | Optional | Value of dns_provider in the JSON request body. |
ipam_provider | string | Optional | Value of ipam_provider in the JSON request body. |
load_balancer_provider | string | Optional | Value of load_balancer_provider in the JSON request body. |
firewall_provider | string | Optional | Value of firewall_provider in the JSON request body. |
build_provider | string | Optional | Value of build_provider in the JSON request body. |
network_provider | string | Optional | Value of network_provider in the JSON request body. |
retention_daily_backups | integer | Optional | Value of retention_daily_backups in the JSON request body. |
retention_weekly_backups | integer | Optional | Value of retention_weekly_backups in the JSON request body. |
retention_monthly_backups | integer | Optional | Value of retention_monthly_backups in the JSON request body. |
retention_yearly_backups | integer | Optional | Value of retention_yearly_backups in the JSON request body. |
maintenance_window_day | string | Optional | Value of maintenance_window_day in the JSON request body. |
maintenance_window_start_hour | integer | Optional | Value of maintenance_window_start_hour in the JSON request body. |
maintenance_window_duration_hours | integer | Optional | Value of maintenance_window_duration_hours in the JSON request body. |
keep_alive_timeout_secs | integer | Optional | Value of keep_alive_timeout_secs in the JSON request body. |
max_concurrent_connections | integer | Optional | Value of max_concurrent_connections in the JSON request body. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request PUT \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{}' \
'https://<your-host>/api/admin/platform-settings'
GET/api/admin/platform-settings/history
admin access
The change history of platform settings (#28).
The update/reset handlers (#6) write durable, hash-chained audit_log rows (platform-settings-update / platform-settings-reset); this surfaces them as a queryable history (who changed it, when, and the recorded NON-secret detail) without needing a separate config_history table — the append-only audit_log IS the history. Admin-tier read, newest first, bounded pagination. Empty + durable:false with no DB. (Active-vs-DB drift detection — flagging when the in-memory config diverges from the persisted row — remains a separate follow-up; this closes the change-history gap.)
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/platform-settings/history
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
limit | integer | Optional | Maximum number of results requested. |
offset | integer | Optional | Number of results to skip before returning the page. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
history | JSON value | Required | Value of history returned in the response body. |
durable | boolean | Required | Value of durable returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/platform-settings/history'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"history": null,
"durable": false
}
POST/api/admin/platform-settings/reset
admin access
Reset admin platform settings.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/platform-settings/reset
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
'https://<your-host>/api/admin/platform-settings/reset'
GET/api/admin/rbac-roles
admin access
Admin rbac roles.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/rbac-roles
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/rbac-roles'
GET/api/admin/sessions
admin access
List active (non-expired) browser sessions.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/sessions
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
limit | integer | Optional | Maximum number of results requested. |
offset | integer | Optional | Number of results to skip before returning the page. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
sessions | JSON value | Required | Value of sessions returned in the response body. |
count | JSON value | Required | Number of items represented in this response. |
total | JSON value | Required | Total number of matching items before the returned page is applied. |
limit | JSON value | Required | Page-size limit applied to this response. |
offset | JSON value | Required | Number of matching items skipped before this response page. |
Returns a paginated JSON object with total/limit/offset keys. Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/sessions'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"sessions": null,
"count": null,
"total": null,
"limit": null,
"offset": null
}
DELETE/api/admin/sessions/{id}
admin access
Admin revoke of ANY session (closes the self-only gap in auth_logout).
Sessions are ephemeral, so a hard DELETE is acceptable here (unlike tokens, which are soft-revoked as evidence). 404 when absent.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
DELETE https://<your-host>/api/admin/sessions/{id}
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
id | string (uuid) | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
status | string | Required | Current operation or resource status. |
id | JSON value | Required | Identifier of the returned resource. |
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request DELETE \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
'https://<your-host>/api/admin/sessions/<id>'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"status": "<string>",
"id": null
}
GET/api/admin/sessions/{id}
admin access
Fetch a single browser session by id for inspection (#38).
Unlike the list (which shows only active sessions), this returns the row regardless of expiry so an operator can also inspect an expired session; expires_at reports its state. 404 when absent, 503 no DB.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/sessions/{id}
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
id | string (uuid) | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
id | JSON value | Required | Identifier of the returned resource. |
user_id | JSON value | Required | Value of user_id returned in the response body. |
display_name | JSON value | Required | Value of display_name returned in the response body. |
roles | JSON value | Required | Value of roles returned in the response body. |
provider | JSON value | Required | Value of provider returned in the response body. |
created_at | JSON value | Required | RFC 3339 timestamp when the resource was created. |
expires_at | JSON value | Required | RFC 3339 expiry timestamp when one applies. |
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/sessions/<id>'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"id": null,
"user_id": null,
"display_name": null,
"roles": null,
"provider": null,
"created_at": null,
"expires_at": null
}
GET/api/admin/site-registry-contract
admin access
Site registry contract.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/site-registry-contract
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
source | string | Required | Origin or authority of the returned data. |
providerCallsEnabled | boolean | Required | Value of providerCallsEnabled returned in the response body. |
liveExecutionEnabled | boolean | Required | Value of liveExecutionEnabled returned in the response body. |
description | string | Required | Value of description returned in the response body. |
recommendedCodeSystem | string | Required | Value of recommendedCodeSystem returned in the response body. |
supportedCodeSystems | array<JSON value> | Required | Value of supportedCodeSystems returned in the response body. |
customCodeFormat | string | Required | Value of customCodeFormat returned in the response body. |
referenceData | string | Required | Value of referenceData returned in the response body. |
endpoints | array<JSON value> | Required | Value of endpoints returned in the response body. |
activeSites | JSON value | Required | Value of activeSites returned in the response body. |
referenceCountryExamples | array<JSON value> | Required | Value of referenceCountryExamples returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/site-registry-contract'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"source": "<string>",
"providerCallsEnabled": false,
"liveExecutionEnabled": false,
"description": "<string>",
"recommendedCodeSystem": "<string>",
"supportedCodeSystems": [],
"customCodeFormat": "<string>",
"referenceData": "<string>",
"endpoints": [],
"activeSites": null,
"referenceCountryExamples": []
}
GET/api/admin/sites
admin access
List site registry.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/sites
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
active | boolean | Optional | Value supplied for the active query parameter. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/sites'
POST/api/admin/sites
admin access
Create site registry.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/sites
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: SiteRegistryCreateRequest.
| Name | Type | Requirement | Description |
|---|---|---|---|
code | string | Required | Value of code in the JSON request body. |
codeSystem | object (ryuki_engine::site_registry::SiteCodeSystem) | Required | Value of codeSystem in the JSON request body. |
name | string | Required | Client-supplied name for the resource or operation. |
country | string | Required | Value of country in the JSON request body. |
countryCode | string | Required | Value of countryCode in the JSON request body. |
timezone | string | Required | Value of timezone in the JSON request body. |
active | boolean | Optional | Value of active in the JSON request body. |
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Content-Type: application/json' \
--header 'Idempotency-Key: <idempotency-key>' \
--data '{"code":"<string>","codeSystem":{},"name":"<string>","country":"<string>","countryCode":"<string>","timezone":"<string>"}' \
'https://<your-host>/api/admin/sites'
GET/api/admin/sites/countries
admin access
Site registry countries.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/sites/countries
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/sites/countries'
GET/api/admin/sites/countries/{code}/cities
admin access
Site registry cities by country.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/sites/countries/{code}/cities
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
code | string | Required | Value of the code request-path segment. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/sites/countries/<code>/cities'
GET/api/admin/sites/search
admin access
Site registry search.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/sites/search
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
q | string | Required | Search text used to match results. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/sites/search?q=<q>'
GET/api/admin/sites/{code}
admin access
Get site registry.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/sites/{code}
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
code | string | Required | Value of the code request-path segment. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/sites/<code>'
POST/api/admin/sites/{code}/activate
admin access
Site registry activate.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/sites/{code}/activate
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
code | string | Required | Value of the code request-path segment. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
'https://<your-host>/api/admin/sites/<code>/activate'
POST/api/admin/sites/{code}/deactivate
admin access
Site registry deactivate.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
POST https://<your-host>/api/admin/sites/{code}/deactivate
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
code | string | Required | Value of the code request-path segment. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
'https://<your-host>/api/admin/sites/<code>/deactivate'
GET/api/admin/tokens
admin access
List token metadata with the hash REDACTED.
Reads are not gated by the central ROUTE_PERMISSIONS table this wave, so the handler enforces the admin gate explicitly (these reads expose token metadata).
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/tokens
Path parameters
This operation has no path parameters.
Query parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
limit | integer | Optional | Maximum number of results requested. |
offset | integer | Optional | Number of results to skip before returning the page. |
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
tokens | JSON value | Required | Value of tokens returned in the response body. |
count | JSON value | Required | Number of items represented in this response. |
total | JSON value | Required | Total number of matching items before the returned page is applied. |
limit | JSON value | Required | Page-size limit applied to this response. |
offset | JSON value | Required | Number of matching items skipped before this response page. |
Returns a paginated JSON object with total/limit/offset keys. Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/tokens'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"tokens": null,
"count": null,
"total": null,
"limit": null,
"offset": null
}
POST/api/admin/tokens
admin access
Mint a service-account credential.
The plaintext ryk_... token is returned EXACTLY ONCE in this response and is never persisted (only its SHA-256 hash) or logged.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An interactive administrator session or user bearer credential is required. Service API tokens (ryk_...) are rejected to prevent a token from minting another token. | The verified interactive principal must hold the admin access class. |
HTTP request
POST https://<your-host>/api/admin/tokens
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Interactive administrator credential alternative. Service API tokens (ryk_..., whose provider mode is api-token) are explicitly rejected for token minting; use an interactive rys_... session token or X-Ryuki-Session-Id. |
Content-Type | string | Required | Required by the resolved Axum Json<T> request extractor; send application/json. |
X-Ryuki-Session-Id | string | Optional | Interactive administrator session token. Despite this compatibility header name, the value is an opaque rys_... bearer, never the administrative session UUID. Service API tokens cannot call this operation. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
JSON structure: CreateTokenRequest.
| Name | Type | Requirement | Description |
|---|---|---|---|
name | string | Required | Operator-facing credential name stored with the token metadata. |
owner_principal | string | Required | Audited actor for the credential. Until a governed service-principal registry exists this must exactly equal the authenticated human subject. |
roles | array<string> | Optional | Application role names from GET /api/admin/rbac-roles; unknown names
are rejected with 400 UNKNOWN_ROLE. |
site_scope | string | Optional | Optional comma-separated site scope. Omission is Global and is admitted only when the issuing human has explicit Global site authority. |
environment_scope | string | Optional | Optional comma-separated environment scope. Omission is Global and is admitted only when the issuing human has explicit Global authority. |
expires_at | string | Optional | Optional RFC 3339 expiry timestamp. Malformed values return
400 INVALID_EXPIRES_AT; omission uses the bounded 24-hour maximum. |
Response
| Status | Description | Body |
|---|---|---|
201 | Created | Value |
201 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
id | JSON value | Required | Identifier of the returned resource. |
name | JSON value | Required | Value of name returned in the response body. |
owner_principal | JSON value | Required | Value of owner_principal returned in the response body. |
roles | JSON value | Required | Value of roles returned in the response body. |
site_scope | JSON value | Required | Value of site_scope returned in the response body. |
environment_scope | JSON value | Required | Value of environment_scope returned in the response body. |
token_valid | JSON value | Required | Value of token_valid returned in the response body. |
expires_at | JSON value | Required | RFC 3339 expiry timestamp when one applies. |
created_at | JSON value | Required | RFC 3339 timestamp when the resource was created. |
token | JSON value | Required | Value of token returned in the response body. |
201 response headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Cache-Control | string | Required | The handler directly marks this response no-store, preventing persistence or idempotency replay of the returned value. |
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request POST \
--header 'Content-Type: application/json' \
--header 'X-Ryuki-Session-Id: <session-id>' \
--data '{"name":"<string>","owner_principal":"<string>"}' \
'https://<your-host>/api/admin/tokens'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 201
{
"id": null,
"name": null,
"owner_principal": null,
"roles": null,
"site_scope": null,
"environment_scope": null,
"token_valid": null,
"expires_at": null,
"created_at": null,
"token": null
}
DELETE/api/admin/tokens/{id}
admin access
Soft-revoke (sets revoked_at).
404 when no active token by that id (already-revoked or absent are indistinguishable to the caller). Never a hard DELETE: the row survives as evidence.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
DELETE https://<your-host>/api/admin/tokens/{id}
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
id | string (uuid) | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
Idempotency-Key | string | Optional | Optional at-most-once retry key for human mutations. When omitted, the idempotency middleware passes the request through without deduplication. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
status | string | Required | Current operation or resource status. |
id | JSON value | Required | Identifier of the returned resource. |
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request DELETE \
--header 'Authorization: Bearer <token>' \
--header 'Idempotency-Key: <idempotency-key>' \
'https://<your-host>/api/admin/tokens/<id>'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"status": "<string>",
"id": null
}
GET/api/admin/tokens/{id}
admin access
One token's metadata (to inspect roles/owner/expiry before revoking).
Mirrors admin_tokens_list's secret-safe projection via the shared token_row_to_json. WHERE id = $1 only (NO revoked_at filter), so a revoked token is still readable like the list; a genuinely-absent id is 404.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/tokens/{id}
Path parameters
| Name | Type | Requirement | Description |
|---|---|---|---|
id | string (uuid) | Required | Identifier of the target resource in the request path. |
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
For 200, the known response body type is Value. Its field schema is unavailable, so no JSON shape is inferred.
Error responses use the platform ApiError body (error, message, optional detail).
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/tokens/<id>'
GET/api/admin/worker-capability-contract
admin access
Admin worker capability.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
admin | An authenticated session or API bearer token is required. | The access class is enforced first; site and environment scopes narrow resources on scoped operations. |
HTTP request
GET https://<your-host>/api/admin/worker-capability-contract
Path parameters
This operation has no path parameters.
Query parameters
This operation has no query parameters.
Request headers
| Name | Type | Requirement | Description |
|---|---|---|---|
Authorization | string | Optional | Human credential alternative: supply one Bearer rys_... session token, ryk_... API token, or validated identity-provider JWT here. Do not combine it with X-Ryuki-Session-Id or the session cookie; conflicting carriers fail closed. |
X-Ryuki-Session-Id | string | Optional | Opaque rys_... session-token carrier used by the portal for mutations. Administrative session UUIDs cannot authenticate. Supply exactly one credential carrier per request. |
traceparent | string | Optional | Optional correlation input. When the second dash-separated segment has 32 characters, Ryuki reuses it as the request correlation identifier; this is not full W3C validation. |
Request body
This operation does not accept a request body.
Response
| Status | Description | Body |
|---|---|---|
200 | OK | Value |
200 response body
Structure: Value.
| Name | Type | Requirement | Description |
|---|---|---|---|
source | string | Required | Origin or authority of the returned data. |
routingMode | string | Required | Value of routingMode returned in the response body. |
providerCallsEnabled | boolean | Required | Value of providerCallsEnabled returned in the response body. |
liveDispatchAllowed | boolean | Required | Value of liveDispatchAllowed returned in the response body. |
secretValuesAllowed | boolean | Required | Value of secretValuesAllowed returned in the response body. |
capabilityTypes | array<JSON value> | Required | Value of capabilityTypes returned in the response body. |
routingDimensions | array<JSON value> | Required | Value of routingDimensions returned in the response body. |
requiredInputs | array<JSON value> | Required | Value of requiredInputs returned in the response body. |
requiredGuards | array<JSON value> | Required | Value of requiredGuards returned in the response body. |
blockedReasons | array<JSON value> | Required | Value of blockedReasons returned in the response body. |
requiredEvidence | array<JSON value> | Required | Value of requiredEvidence returned in the response body. |
rules | array<JSON value> | Required | Value of rules returned in the response body. |
Errors
JSON failures use one of the platform error envelopes and include the request correlation metadata when routing reaches the API middleware. See Errors for the exact shapes, authentication failures, retry guidance, and transport-level exceptions.
Examples
Request
curl --silent --show-error --globoff \
--request GET \
--header 'Authorization: Bearer <token>' \
'https://<your-host>/api/admin/worker-capability-contract'
Schematic response body
Illustrative shape generated from the extracted field types, not a recorded live response. Values are placeholders; null marks a field whose type could not be resolved.
Success status: 200
{
"source": "<string>",
"routingMode": "<string>",
"providerCallsEnabled": false,
"liveDispatchAllowed": false,
"secretValuesAllowed": false,
"capabilityTypes": [],
"routingDimensions": [],
"requiredInputs": [],
"requiredGuards": [],
"blockedReasons": [],
"requiredEvidence": [],
"rules": []
}