---
title: "Create Scheduled Wire Transfer"
method: POST
path: "/accounts/{account_id}/wire/scheduled"
tags: ["Transfers"]
---

# Create Scheduled Wire Transfer

`POST /accounts/{account_id}/wire/scheduled`

## Request

- Base URL: `https://api.meow.com/v1`
- URL: `https://api.meow.com/v1/accounts/{account_id}/wire/scheduled`
- Auth: API key in header `x-api-key`
- TypeScript: <https://skmtc.dev/meow/apis/meow-api/docs/accounts/:account_id/wire/scheduled/post.ts> (a function with typed inputs; its response is checked against the schema)

Creates a recurring or one-off future wire to an external counterparty. Each occurrence is sent in US dollars on the schedule's business-day rules.

## Path parameters

- `account_id` string, required: The ID of the account.

## Headers

- `Idempotency-Key` string, nullable: A unique key you generate (1-50 printable ASCII characters, no spaces) so retrying this request never creates a duplicate. Reusing a key is rejected.
- `x-entity-id` string, uuid

## Request body

- CreateScheduledWireTransferRequest
  - `amount` union, required: Amount to send on each occurrence, in USD.
    - number
    - string
  - `counterparty_id` string, uuid, required: Contact to pay. Use list_contacts to find one.
  - `instructions` string, nullable: Wire instructions sent to the receiving bank.
  - `purpose` string, nullable: Purpose of payment. Required by some receiving banks. Your account's bank sets the maximum length: 16 characters on most accounts, 50 on some. A longer purpose is rejected with a message giving your limit.
  - `internal_note` string, nullable: Private note, visible only inside Meow.
  - `email` string, email, nullable: Address to notify on each occurrence.
  - `metadata` object, nullable: Your own key/value data to attach to this object. Meow stores it unchanged and returns it on every read of the object and on every webhook event about it, so you can match it back to your own records. Up to 20 pairs; keys up to 40 characters, values up to 200, and 5 KB serialized as JSON in total — note that a non-ASCII character counts as 6 bytes and an emoji as 12. Values must be strings. Meow never interprets it — do not put anything here that needs to stay private.
  - `idempotency_key` string, nullable: Deprecated: send the key in the `Idempotency-Key` header instead. When both are sent they must match.
  - `rrule` string, required: Recurrence rule (RFC 5545 RRULE) defining the schedule.

## Response `200`

Successful Response

- CreateScheduledWireTransferResponse
  - `id` string, uuid, nullable: Identifier of the schedule, for use with List Scheduled Wire Transfers. `null` until the schedule is actually created, so it is always absent while `status` is `processing` or `pending_approval`. Use `approval_id` as the stable handle instead.
  - `status` 'pending' | 'pending_approval' | 'canceled' | 'processing' | 'error' | 'sent' | 'returned' | 'void', required
  - `amount` string, required: Amount sent on each occurrence, in USD. Echoes the request.
  - `instructions` string, nullable, required: Wire instructions sent to the receiving bank on each occurrence. Echoes the request, except for contacts paid through your brokerage account, where Meow replaces the submitted memo with system-generated instructions.
  - `counterparty_id` string, uuid, required: Contact paid on each occurrence. Echoes the request.
  - `rrule` string, required: Recurrence rule (RFC 5545 RRULE) driving the schedule. Echoes the request.
  - `first_occurrence` string, date-time: ISO 8601 date-time in the format `YYYY-MM-DDThh:mm:ss.nnn[Z|[+|-]hh:mm]` (per [IETF RFC 3339](https://xml2rfc.tools.ietf.org/public/rfc/html/rfc3339.html#anchor14)).
  - `transfer_type` 'book' | 'usdc' | 'usdt' | 'pyusd' | 'cash' | 'usdg' | 'path_usd' | 'ach' | 'wire' | 'international', required: The rail a transfer moves on, as the customer API reports it.
  - `approval_id` string, uuid, required: Handle for this schedule, returned whether or not an approval policy gated it. Pass it to `GET /approvals/{approval_id}` to follow the request to completion.
  - `message` string, nullable: Human-readable next step. Set only when `status` is `pending_approval`; otherwise `null`.
  - `metadata` object, nullable: The metadata attached when this schedule was created, unchanged. Every wire the schedule sends carries it too, so the webhook for any occurrence reports the same value. `null` when none was attached.

## Other responses

- `400`: The request could not be processed.
- `401`: Authentication failed.
- `403`: The API key is not authorized for this operation, or the user of a global API key is an admin or controller without approved KYC. The KYC case returns the message `KYC is required for controllers and admins.` until that user completes KYC in the Meow dashboard.
- `429`: Too many requests.

---

[API](https://skmtc.dev/meow/apis/meow-api.md) - [All operations](https://skmtc.dev/meow/apis/meow-api/llms.txt) - [OpenAPI document](https://skmtc.dev/meow/apis/meow-api/revisions/d69c02d46fa0?raw)
