---
title: "Initiate withdrawal"
method: POST
path: "/transfers/withdraw"
tags: ["Transfers"]
---

# Initiate withdrawal

`POST /transfers/withdraw`

Move funds from a wallet to a linked bank account

## Headers

- `Idempotency-Key` string, required
- `X-Agent-ID` string, nullable
- `X-Instance-ID` string, nullable

## Request body

- object
  - `data` object, required
    - `attributes` object, required
      - `amount` integer, required — Amount in cents.
      - `currency` 'USD' — Three-letter currency code. Currently USD.
      - `externalAccountId` string, required — External account ID (eac_*).
      - `method` 'standard' | 'instant' — Delivery method. Defaults to standard. To request instant withdrawal access and pricing, contact hi@natural.com.
      - `walletId` string — Source wallet for the withdrawal. Defaults to your party's default wallet when omitted.
      - `description` string — Memo for the withdrawal.

## Response `200`

Successful Response

- object
  - `data` object, required
    - `type` 'transfer', required
    - `id` string, required
    - `attributes` object, required
      - `type` 'deposit' | 'withdrawal' | 'internal', required — Transfer type.
      - `amount` integer, required — Amount in cents.
      - `currency` string, required — Currency code.
      - `status` 'CREATED' | 'APPROVAL_DENIED' | 'PROCESSING' | 'IN_REVIEW' | 'COMPLETED' | 'FAILED' | 'RETURNED' | 'CANCELED', required — Transfer status.
      - `method` string, nullable, required — Requested delivery method, when available.
      - `rail` string, nullable, required — Executed transfer rail, when available.
      - `description` string, nullable, required — Transfer description.
      - `externalAccountDisplayMask` string, nullable, required — Masked external account number.
      - `expectedAvailableAt` string, nullable, required — Expected availability time, when known.
      - `failure` object, nullable, required — Failure details when this transfer failed.
        - `code` string, nullable, required — Failure code, when available.
        - `reason` string, nullable, required — Failure reason, when available.
      - `return` object, nullable, required — Return details when this transfer was returned.
        - `code` string, nullable, required — Return code, when available.
        - `reason` string, nullable, required — Return reason, when available.
        - `returnedAt` string, nullable, required — When this transfer returned.
      - `submittedAt` string, nullable, required — When this transfer was submitted.
      - `settledAt` string, nullable, required — When this transfer settled.
      - `createdAt` string, required — When this transfer was created.
      - `updatedAt` string, nullable, required — When this transfer was last updated.
    - `relationships` object, required
      - `party` object, required — Party that owns the transfer.
        - `data` object, required — Related resource identifier.
          - `type` 'party', required
          - `id` string, required
      - `wallet` object, required — Wallet for this transfer.
        - `data` object, required — Related resource identifier.
          - `type` 'wallet', required
          - `id` string, required
      - `destWallet` object — Destination wallet for internal transfers.
        - `data` object, nullable, required — Related resource identifier.
          - `type` 'wallet', required
          - `id` string, required
      - `externalAccount` object, required — External account used for this transfer, when available.
        - `data` object, nullable, required — Related resource identifier.
          - `type` 'externalAccount', required
          - `id` string, required
      - `transaction` object, required — Primary transaction for this transfer, when available.
        - `data` object, nullable, required — Related resource identifier.
          - `type` 'transaction', required
          - `id` string, required

## Other responses

- `400` — Validation Error
- `401` — Unauthorized
- `403` — Forbidden
- `404` — Not Found. Returned when the resource does not exist, or when it exists but is not accessible to your account. The two cases are intentionally indistinguishable, so that resource IDs cannot be enumerated by probing.
- `409` — Conflict
- `422` — Validation Error
- `428` — Precondition Required
- `429` — Too Many Requests
- `500` — Internal Server Error
- `501` — Not Implemented
- `502` — Bad Gateway
- `503` — Service Unavailable

---

[API](https://skmtc.net/natural/apis/natural-api.md) · [All operations](https://skmtc.net/natural/apis/natural-api/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/natural/natural-api/versions/0bb9c54b1f61/schema)
