---
title: "Resolve a held authorization"
method: POST
path: "/api/v1/authorizations/{authorization_id}/review"
tags: ["canonical"]
---

# Resolve a held authorization

`POST /api/v1/authorizations/{authorization_id}/review`

## Request

- Base URL: `https://app.graypass.org` (the document declares no server; this is the origin it was published from)
- URL: `https://app.graypass.org/api/v1/authorizations/{authorization_id}/review`
- Auth: HTTP bearer

Record an attributed administrator approve/reject resolution for manual review.

## Path parameters

- `authorization_id` string, required

## Request body

- ManualReviewRequest: Record an attributed resolution for a held authorization.
  - `note` string, nullable: Optional review note; retained as a digest rather than a free-text business record. Keep your review evidence in your own authorized system.
  - `resolution` 'approve' | 'reject', required: Attributed manual review result: approve or reject. Approval still requires a fresh verified child decision.

## Response `200`

Reject returns an outcome receipt; approve returns a fresh child decision that may still refuse execution.

- union
  - ReviewApprovedReceipt: Approved review receipt with a newly evaluated child decision. Inspect that decision and complete its required verification before execution.
    - `authorization` string, required: Authorization identifier associated with this receipt. Resolve it on the backend and verify the bound proof before execution.
    - `decision` AuthorizeResponse, required: Immediate policy result. Only an enforce-mode allow can include a compact Proof of Agency.
      - `action` string, required: Registered action key, such as payout.destination.change.
      - `action_hash` string, required: SHA-256 digest binding the canonical authorization material. Compare it with the hash computed from the original server-held request.
      - `assurance` AssuranceProfile, required: Server assessment of available evidence for one subject and session. It contains no calibrated confidence score.
        - `active_seconds` number: Duration of accepted active evidence in seconds.
        - `assessed_at` string, required: Assessment time as an ISO 8601 timestamp.
        - `claims` AssuranceClaim[], required: Individual assurance claims with their own status and limitations.
          - `claim` string, required: Claim name, such as operator_continuity or human_presence. Capability availability is separately reported by metadata.
          - `coverage` 'none' | 'sparse' | 'partial' | 'sufficient', required: Evidence-coverage category: none, sparse, partial or sufficient. Describes the amount and variety of accepted evidence.
          - `evidence_refs` string[]: Opaque references to the evidence supporting this claim.
          - `freshness_ms` integer, nullable: Age of the relevant evidence in milliseconds; null when freshness cannot be established.
          - `limitations` string[]: Applicable limitations that must accompany interpretation of the result.
          - `reason_codes` string[]: Stable reason identifiers explaining acceptance, limitations or a decision; resolve them in the reason-code catalog.
          - `status` 'confirmed' | 'likely' | 'uncertain' | 'not_confirmed' | 'detected' | 'not_detected' | 'not_present' | 'insufficient_evidence' | 'unsupported', required: Permitted statuses for a named assurance claim. Read the status with the claim definition, coverage, freshness, and assessment context.
        - `coverage` 'none' | 'sparse' | 'partial' | 'sufficient', required: Evidence-coverage category: none, sparse, partial or sufficient. Describes the amount and variety of accepted evidence.
        - `evidence_windows` integer: Number of accepted, non-overlapping evidence windows accounted for in this session or profile.
        - `feature_schema_version` string, required: Version identifier for the feature representation used by the session or assessment.
        - `freshness_ms` integer, nullable: Age of the relevant evidence in milliseconds; null when freshness cannot be established.
        - `id` string, required: Identifier of this record. Treat it as opaque and retain it for subsequent operations.
        - `insufficient_evidence` boolean, required: True when evidence is insufficient for the assessment’s supported claims.
        - `limitations` string[]: Applicable limitations that must accompany interpretation of the result.
        - `modalities_present` string[]: Names of observed evidence modalities included in coverage accounting.
        - `model_version` string, required: Version identifier for the model used in this assessment. Retain it when comparing assessment results.
        - `rule_version` string, required: Version identifier for the assurance rules used in this assessment.
        - `session` string, nullable: Observation or enrollment session identifier, as required by the operation.
        - `subject` string, required: Pseudonymous subject identifier in the authenticated tenant and environment.
      - `challenge` ChallengeDescriptor: Challenge offered by an authorization decision, including methods and expiry.
        - `expires_at` string, required: Expiry time as an ISO 8601 timestamp. Use the capability before this time; obtain a fresh one afterward.
        - `id` string, required: Identifier of this record. Treat it as opaque and retain it for subsequent operations.
        - `methods` string[], required: Permitted challenge methods. sandbox_confirm is a simulated ceremony restricted to the sandbox.
      - `decided_at` string, required: Decision time as an ISO 8601 timestamp.
      - `decision` 'allow' | 'challenge' | 'hold' | 'deny', required: Policy result: allow, challenge, hold or deny. Inspect mode and proof requirements before performing any business mutation.
      - `environment` string, required: Environment identifier that scopes this record; sandbox and live resources are separate.
      - `human_readable` HumanReadable, required: Customer-display wording explaining a decision; stable reason codes carry the programmatic meaning.
        - `detail` string, required: Human-readable explanation. Use stable codes and typed decision fields for application branching.
        - `status` string, required: Short display label for the decision; use reason codes for stable programmatic behavior.
      - `id` string, required: Identifier of this record. Treat it as opaque and retain it for subsequent operations.
      - `latency_ms` integer, required: Server-recorded decision latency in milliseconds.
      - `mode` 'test' | 'shadow' | 'enforce', required: Action evaluation mode. Test and shadow return decisions without enforceable proofs. An eligible enforce-mode allow can carry a proof.
      - `policy_version` integer, required: Immutable policy version number evaluated for this decision.
      - `proof` string, nullable: Compact signed JWS, or null. Require enforce-mode allow, trusted binding checks and successful online consumption before execution.
      - `proof_id` string, nullable: Proof identifier (jti), or null when no proof was issued.
      - `reason_codes` string[], required: Stable reason identifiers explaining acceptance, limitations or a decision; resolve them in the reason-code catalog.
      - `trace_id` string, required: Identifier to retain for authorization trace lookup and operational diagnosis.
    - `resolution` 'approve', required: Attributed manual review result: approve or reject. Approval still requires a fresh verified child decision.
  - ReviewRejectedReceipt: Rejected manual-review receipt and its recorded rejection outcome.
    - `authorization` string, required: Authorization identifier associated with this receipt. Resolve it on the backend and verify the bound proof before execution.
    - `outcome` OutcomeReceipt, required: Acknowledgment of the customer’s recorded business-outcome label.
      - `authorization` string, required: Authorization identifier associated with this receipt. Resolve it on the backend and verify the bound proof before execution.
      - `outcome` string, required: Business outcome reported by the customer application, with supporting evidence maintained by the customer.
      - `reported_at` string, required: Time the outcome was recorded, as an ISO 8601 timestamp.
    - `resolution` 'reject', required: Attributed manual review result: approve or reject. Approval still requires a fresh verified child decision.

## Other responses

- `422`: The canonical handler returns a Problem for invalid input; correct the request before retrying.

---

[API](https://skmtc.dev/graypass/apis/graypass-api.md) - [All operations](https://skmtc.dev/graypass/apis/graypass-api/llms.txt) - [OpenAPI document](https://skmtc.dev/graypass/apis/graypass-api/revisions/5f9ab64fdfdb?raw)
