---
title: "Approve or deny an exact provider request"
method: POST
path: "/v2/provider-actions/{id}/approval"
tags: ["Provider Authority"]
---

# Approve or deny an exact provider request

`POST /v2/provider-actions/{id}/approval`

Requires an eligible human session with recent MFA.

## Headers

- `X-Steward-Request-Timestamp` string
- `X-Steward-Request-Expires-At` string
- `X-Steward-Signature` string
- `X-Steward-Signing-Key-Id` string
- `Idempotency-Key` string

## Request body

- object
  - `decision` 'approve' | 'deny', required
  - `expectedVersion` integer, required
  - `expectedRequestHash` string, required
  - `expectedActionDigest` string, required
  - `reasonCode` 'approver_manual_approve' | 'approver_manual_deny' | 'approver_risk_deny' | 'approver_scope_deny' | 'approver_duplicate_deny' | 'approver_other'
  - `reason` string
  - `idempotencyKey` string, required

## Response `200`

JSON response

- object
  - `id` string, required
  - `status` 'denied' | 'pending_approval' | 'allowed_stub' | 'stub_succeeded' | 'stub_failed' | 'approved' | 'execution_ready' | 'approval_denied' | 'approval_expired' | 'approval_stale' | 'executing' | 'succeeded' | 'failed' | 'outcome_unknown', required
  - `version` integer, required
  - `requestHash` string, required
  - `actionDigest` string, required
  - `replayed` boolean
  - `resumeAttemptId` string

## Other responses

- `400` — JSON response
- `401` — JSON response
- `403` — JSON response
- `404` — JSON response
- `408` — JSON response
- `409` — JSON response

## Changes

- **2026-08-17** `261a7c8070b2` — 1 info
  - endpoint added

[Change history](https://skmtc.dev/steward-fi/apis/steward-api/changes/v2/provider-actions/:id/approval/post.md)

---

[API](https://skmtc.dev/steward-fi/apis/steward-api.md) · [All operations](https://skmtc.dev/steward-fi/apis/steward-api/llms.txt) · [OpenAPI document](https://skmtc-service-production.skmtc.workers.dev/v1/apis/steward-fi/steward-api/revisions/b88b4b97a664/schema)
