---
title: "Approve or reject a renter withdrawal held by the automatic payout path (Admin + TOTP step-up). approve releases the hold (the worker re-runs every correctness check); reject fails the unsigned request and releases its locked balance"
method: POST
path: "/api/v1/admin/withdrawals/{id}/review"
tags: ["admin"]
---

# Approve or reject a renter withdrawal held by the automatic payout path (Admin + TOTP step-up). approve releases the hold (the worker re-runs every correctness check); reject fails the unsigned request and releases its locked balance

`POST /api/v1/admin/withdrawals/{id}/review`

## Request

- Base URL: `https://amplerun-api.spiry.org`
- URL: `https://amplerun-api.spiry.org/api/v1/admin/withdrawals/{id}/review`
- Auth: HTTP bearer

## Path parameters

- `id` string, uuid, required

## Headers

- `Idempotency-Key` string, uuid, required

## Request body

- object
  - `decision` 'approve' | 'reject', required
  - `reason` string, required

## Response `202`

Decision recorded (audited with the admin and reason).

- object
  - `id` string, uuid, required
  - `kind` 'payout' | 'withdrawal', required
  - `decision` 'approve' | 'reject', required
  - `state` 'INTENT' | 'FAILED', required

## Other responses

- `409`: The request is no longer unsigned (a nonce is pinned); it cannot be reviewed.
- `default`: Error envelope. 401 unauthenticated, 403/404 forbidden, 409 conflict, 422 invalid input, 429 rate limited (code UNAVAILABLE, retryable:true, no Retry-After header), 503 unavailable money/provider state with retryable:true.

---

[API](https://skmtc.dev/amplerun/apis/amplerun-business-api.md) · [All operations](https://skmtc.dev/amplerun/apis/amplerun-business-api/llms.txt) · [OpenAPI document](https://skmtc.dev/amplerun/apis/amplerun-business-api/revisions/40944687fa52?raw)
