# Simulate Withdrawal Completion

> Complete a pending sandbox withdrawal without broadcasting a transaction and verify payout webhooks end to end.

`POST /v1/sandbox/withdrawals/:withdrawal_id/simulate-completion`

:::endpoint
POST /v1/sandbox/withdrawals/:withdrawal_id/simulate-completion
:::

**API key:** `Payout` · **Environment:** Sandbox only

Marks an eligible sandbox withdrawal as `completed` without signing or broadcasting an on-chain transaction. The method has no request body.

The withdrawal must belong to the authenticated merchant, exist in Sandbox, and be in a state accepted by the withdrawal state machine. Invalid state returns a conflict instead of forcing a transition.

## Response (200 OK)

Returns the updated withdrawal and emits the same `withdrawal.completed` webhook used by real payouts. See [Get Withdrawal](/docs/withdrawals/get.md) for the response fields.

## Errors

A Payment (`pk_`) key is rejected with `403 payout_key_required`. See [Error Codes](/docs/errors/codes.md) for the full catalogue. The `type` URI in every error response deep-links to the matching row.

