---
title: "Withdraw to an address (code; a new address is confirmed by an email link)"
method: POST
path: "/api/v1/withdrawals"
tags: ["billing"]
---

# Withdraw to an address (code; a new address is confirmed by an email link)

`POST /api/v1/withdrawals`

## Request

- Base URL: `https://amplerun-api.spiry.org`
- URL: `https://amplerun-api.spiry.org/api/v1/withdrawals`
- Auth: HTTP bearer

Locked withdrawal intent to a saved address, or, for an address this account never used, a parked request that the emailed link (30 min) queues unchanged. New addresses are refused for 24 h after a password, 2FA or email change. API keys reach saved addresses only, without a code. No spendable credit while a transfer is pending.

## Headers

- `Idempotency-Key` string, uuid, required

## Request body

- TransferRequest: A withdrawal or host payout to a typed address. Sessions confirm with `code`: the authenticator code when the account has 2FA, else the 6-digit code from POST /api/v1/withdrawals/code. A wallet-only account (no email) sends `siwe_message` + `signature` (a step-up challenge from its sign-in wallet) instead. API keys send no code and reach saved (CONFIRMED) addresses only.
  - `network` 'base': Defaults to base.
  - `address` string, required
  - `amount_micro` string, required: Unsigned base-10 integer as string; never a float.
  - `asset` 'USDC' | 'USDT': Defaults to USDC.
  - `label` string: Saved with a new address.
  - `code` string
  - `siwe_message` string
  - `signature` string

## Response `202`

Queued, or waiting for the email link.

- TransferAccepted: INTENT: queued to a saved address (withdrawal_id or payout_id set). AWAITING_EMAIL_CONFIRMATION: a new address; nothing is locked until the emailed link (30 min) is opened, which queues exactly this request.
  - `state` 'INTENT' | 'AWAITING_EMAIL_CONFIRMATION', required
  - `withdrawal_id` string, uuid
  - `payout_id` string, uuid
  - `confirmation_id` string, uuid
  - `address_id` string, uuid, required
  - `expires_at` string, date-time
  - `asset` 'USDC' | 'USDT', required

## Other responses

- `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)
