Approvals API
Cross-domain approval worklist: the pending-approvals queue and the approval decision-readiness contract.
2 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/approvals/decision-readiness-contract
request access
Approvals decision readiness.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
request | 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/approvals/decision-readiness-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. |
approvalReadinessMode | string | Required | Value of approvalReadinessMode returned in the response body. |
identityProvider | string | Required | Value of identityProvider returned in the response body. |
configuredForProduction | boolean | Required | Value of configuredForProduction returned in the response body. |
decisionQueueReadOnly | boolean | Required | Value of decisionQueueReadOnly returned in the response body. |
routeCatalogReadOnly | boolean | Required | Value of routeCatalogReadOnly returned in the response body. |
evidenceRequired | boolean | Required | Value of evidenceRequired returned in the response body. |
localMockAuthAllowed | boolean | Required | Value of localMockAuthAllowed returned in the response body. |
providerCallsAllowed | boolean | Required | Value of providerCallsAllowed returned in the response body. |
liveAuthenticationAllowed | boolean | Required | Value of liveAuthenticationAllowed returned in the response body. |
graphCallsAllowed | boolean | Required | Value of graphCallsAllowed returned in the response body. |
entraGroupLookupAllowed | boolean | Required | Value of entraGroupLookupAllowed returned in the response body. |
serviceNowApprovalMutationAllowed | boolean | Required | Value of serviceNowApprovalMutationAllowed returned in the response body. |
approvalExecutionAllowed | boolean | Required | Value of approvalExecutionAllowed returned in the response body. |
approvalQueueMutationAllowed | boolean | Required | Value of approvalQueueMutationAllowed returned in the response body. |
approvalDecisionMutationAllowed | boolean | Required | Value of approvalDecisionMutationAllowed returned in the response body. |
notificationDispatchAllowed | boolean | Required | Value of notificationDispatchAllowed returned in the response body. |
workflowMutationAllowed | boolean | Required | Value of workflowMutationAllowed returned in the response body. |
rawApproverDataAllowed | boolean | Required | Value of rawApproverDataAllowed returned in the response body. |
rawApprovalPayloadsAllowed | boolean | Required | Value of rawApprovalPayloadsAllowed returned in the response body. |
rawRequestPayloadsAllowed | boolean | Required | Value of rawRequestPayloadsAllowed returned in the response body. |
rawRecipientDataAllowed | boolean | Required | Value of rawRecipientDataAllowed returned in the response body. |
rawProviderPayloadsAllowed | boolean | Required | Value of rawProviderPayloadsAllowed returned in the response body. |
rawLogContentAllowed | boolean | Required | Value of rawLogContentAllowed returned in the response body. |
rawRowsAllowed | boolean | Required | Value of rawRowsAllowed 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. |
serviceNowIdentifiersAllowed | boolean | Required | Value of serviceNowIdentifiersAllowed returned in the response body. |
privateNetworkValuesAllowed | boolean | Required | Value of privateNetworkValuesAllowed 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. |
approvalRoutes | array<JSON value> | Required | Value of approvalRoutes returned in the response body. |
decisionStates | array<JSON value> | Required | Value of decisionStates returned in the response body. |
decisionTypes | array<JSON value> | Required | Value of decisionTypes returned in the response body. |
routeStages | array<JSON value> | Required | Value of routeStages returned in the response body. |
approvalScopes | array<JSON value> | Required | Value of approvalScopes returned in the response body. |
escalationStates | array<JSON value> | Required | Value of escalationStates 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/approvals/decision-readiness-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>",
"approvalReadinessMode": "<string>",
"identityProvider": "<string>",
"configuredForProduction": false,
"decisionQueueReadOnly": false,
"routeCatalogReadOnly": false,
"evidenceRequired": false,
"localMockAuthAllowed": false,
"providerCallsAllowed": false,
"liveAuthenticationAllowed": false,
"graphCallsAllowed": false,
"entraGroupLookupAllowed": false,
"serviceNowApprovalMutationAllowed": false,
"approvalExecutionAllowed": false,
"approvalQueueMutationAllowed": false,
"approvalDecisionMutationAllowed": false,
"notificationDispatchAllowed": false,
"workflowMutationAllowed": false,
"rawApproverDataAllowed": false,
"rawApprovalPayloadsAllowed": false,
"rawRequestPayloadsAllowed": false,
"rawRecipientDataAllowed": false,
"rawProviderPayloadsAllowed": false,
"rawLogContentAllowed": false,
"rawRowsAllowed": false,
"tenantIdentifiersAllowed": false,
"objectIdentifiersAllowed": false,
"principalIdentifiersAllowed": false,
"groupIdentifiersAllowed": false,
"serviceNowIdentifiersAllowed": false,
"privateNetworkValuesAllowed": false,
"credentialValuesAllowed": false,
"tokenValuesAllowed": false,
"approvalRoutes": [],
"decisionStates": [],
"decisionTypes": [],
"routeStages": [],
"approvalScopes": [],
"escalationStates": [],
"requiredGuards": [],
"blockedReasons": [],
"requiredEvidence": [],
"rules": []
}
GET/api/approvals/pending
approve access
Returns the list of requests pending approval by the calling approver.
A request is "pending my approval" iff ALL hold:
status = 'planned'(the only approvable from-state), AND- NO current-epoch decision exists for
(request_id, role).
NOTE: The approval_route @> containment filter is intentionally NOT applied here. The request lifecycle does not populate approval_route with canonical role constants before the approval step: new requests start with approval_route = [] and the plan transition does not push any role into it. Filtering on approval_route would therefore return nothing for real data. Per-request approver-type routing is a documented follow-up (resolve the display-vs-canonical role-string mismatch and have the lifecycle push canonical roles into approval_route per required-approver-per-type if that model is adopted). Until then, an approver's inbox = all planned requests they have not yet decided.
The role constant $1 IS used in the NOT EXISTS sub-query — that sub-query is correct because the approve/reject handlers write request_approval_decisions rows keyed on the same approval_role_for canonical constant.
CRITICAL AUTHZ NOTE: this is a GET, so the central read middleware admits any "request"/"audit" role holder through (it treats all non-sensitive GETs as ordinary reads). The approve-only requirement MUST be enforced here in the handler — exactly mirroring requests_approve and requests_reject.
Permissions
| Access class | Credential | Scoping |
|---|---|---|
approve | 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/approvals/pending
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/approvals/pending'