> ## Documentation Index
> Fetch the complete documentation index at: https://docs.pushcash.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Manual withdrawal review

<div className="Goal">
  ## Goal

  Enable your team to manually review, approve, or cancel withdrawal payments before they are posted to the payment network.
</div>

## Steps

***

## Step 1: Disable automatic posting of withdrawals

<div className="What">
  <p className="bold-header">What you need to do</p>

  Configure withdrawal authorizations so approved payments are held for review instead of being automatically posted to the network.
</div>

<Note>
  Automatic posting can only be disabled for `cash_out` payments.
</Note>

#### How to do it

* Set `approval_mode` to `manual` when authorizing a withdrawal payment.

When a payment is approved with `approval_mode: manual`, the intent enters a `pending` state and is not posted to the network.

If you have enabled webhooks, you will receive an `intent.approved` webhook with the intent in a `pending` state to your webhook url.

## Step 2: Review pending payments

<div className="What">
  <p className="bold-header">What you need to do</p>

  Retrieve details about pending withdrawal intents so your team can review the payment before releasing funds.
</div>

#### How to do it

* Make a request to [get an intent](./apireference/intent/get-an-intent) and inspect the payment details.

## Step 3: Approve or cancel the payment

<div className="What">
  <p className="bold-header">What you need to do</p>

  Approve or cancel the withdrawal after completing your review.
</div>

#### How to do it

* If the withdrawal should be posted to the network, make a request to [approve-a-pending-intent](./apireference/intent/approve-a-pending-intent)
* If the withdrawal is not permitted, make a request to [cancel-an-intent](./apireference/intent/cancel-an-intent)

<Note>
  It is recommended that you always cancel or approve manual withdrawal payments so that payments enter into a terminal status and are not left in "pending" for an indefinite period.
</Note>

<RequestExample>
  ```bash Authorize Withdrawal (Manual Approval) theme={null}
  curl --request POST \
    --url https://sandbox.pushcash.com/authorize \
    --header 'Authorization: Bearer <token>' \
    --header 'Content-Type: application/json' \
    --data '
  {
    "user_id": "user_lVpbPL0K1XIiHx0DxipRbD",
    "amount": 1000,
    "currency": "USD",
    "direction": "cash_out",
    "approval_mode": "manual",
    "token": "token_mbDRHFi3dxIZEtykHsgUGC"
  }
  '
  ```

  ```bash Get Pending Intent theme={null}
  curl --request GET \
    --url https://sandbox.pushcash.com/intent/intent_5Jun2aRUEs7xGddsARCowB \
    --header 'Authorization: Bearer <token>'
  ```

  ```bash Approve Pending Intent theme={null}
  curl --request POST \
    --url https://sandbox.pushcash.com/intent/intent_5Jun2aRUEs7xGddsARCowB/approve \
    --header 'Authorization: Bearer <token>'
  ```

  ```bash Cancel Pending Intent theme={null}
  curl --request POST \
    --url https://sandbox.pushcash.com/intent/intent_5Jun2aRUEs7xGddsARCowB/cancel \
    --header 'Authorization: Bearer <token>'
  ```
</RequestExample>

<ResponseExample>
  ```json Authorize Response - Intent Approved (Pending) theme={null}
  {
    "id": "intent_5Jun2aRUEs7xGddsARCowB",
    "status": "pending",
    "direction": "cash_out",
    "amount": 1000,
    "currency": "USD",
    "created_at": "2026-01-05T22:31:02Z"
  }
  ```

  ```json Pending Intent Details theme={null}
  {
    "id": "intent_5Jun2aRUEs7xGddsARCowB",
    "created_at": "2026-01-05T22:29:51Z",
    "direction": "cash_out",
    "amount": 1000,
    "currency": "USD",
    "status": "pending",
    "rail": "card",
    "payment_credential": {
      "bank_name": "Space Coast Credit Union",
      "account": {
        "number_mask": "5978",
        "routing": "263177903"
      },
      "card": {
        "primary_account_number_mask": "6018",
        "expiration": "2026-05-01"
      }
    }
  }
  ```
</ResponseExample>

## Integration checklist

* Set `approval_mode` to `manual` for withdrawal authorizations
* Implement approve and cancel actions for reviewed payments
