---
title: "Create International Payment"
method: POST
path: "/accounts/{account_id}/international"
tags: ["Transfers"]
---

# Create International Payment

`POST /accounts/{account_id}/international`

## Request

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

Pays a contact in their local currency, converting from US dollars at the rate quoted when you call. Fix either leg: give `recipient_amount` to send an exact amount in their currency, or `source_amount` to spend an exact number of US dollars. Preview the rate and fee first with `POST /accounts/{account_id}/international/quote`. The contact must already have international payment details saved. To send US dollars instead, including to a bank outside the US, use `POST /accounts/{account_id}/wire`.

## Path parameters

- `account_id` string, required: The account the payment is funded from.

## Headers

- `Idempotency-Key` string, required: 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

- CreateInternationalPaymentRequest
  - `contact_id` string, uuid, required: Contact to pay. The contact must already have international payment details saved. Use list_contacts to find one.
  - `recipient_amount` union: How much the recipient receives, in `recipient_currency`. The dollar amount debited is derived from this at the current rate. Give this or `source_amount`, never both.
    - number
    - string
  - `source_amount` union: US dollars to convert, before the fee. What the recipient receives is derived from this at the current rate. Give this or `recipient_amount`, never both.
    - number
    - string
  - `recipient_currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BOV' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CAD' | 'CDF' | 'CHE' | 'CHF' | 'CHW' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'COU' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SLE' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STN' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'USN' | 'UYI' | 'UYU' | 'UYW' | 'UZS' | 'VED' | 'VES' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XAG' | 'XAU' | 'XBA' | 'XBB' | 'XBC' | 'XBD' | 'XCD' | 'XDR' | 'XOF' | 'XPD' | 'XPF' | 'XPT' | 'XSU' | 'XTS' | 'XUA' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWG' | 'ZWL', required
  - `purpose` string, required: Why the money is being sent. Required for every destination, and some destinations reject a purpose that is too short or too vague. Anything longer than 50 characters is rejected.
  - `purpose_code` 'advertising' | 'advisor_fees' | 'construction' | 'education' | 'exports' | 'family' | 'fund_investment' | 'goods' | 'hotel' | 'insurance_claims' | 'insurance_premium' | 'loan_repayment' | 'medical' | 'other_fees' | 'property_purchase' | 'property_rental' | 'royalties' | 'services' | 'tax' | 'transfer' | 'travel' | 'utilities' | 'business_insurance' | 'delivery' | 'office' | 'share_investment' | 'transportation' | 'ACM' | 'AES' | 'AFA' | 'AFL' | 'ALW' | 'ATS' | 'BON' | 'CCP' | 'CEA' | 'CEL' | 'CHC' | 'CIN' | 'COM' | 'COP' | 'CRP' | 'DCP' | 'DIV' | 'DLA' | 'DLF' | 'DLL' | 'DOE' | 'DSA' | 'DSF' | 'DSL' | 'EDU' | 'EMI' | 'EOS' | 'FAM' | 'FDA' | 'FDL' | 'FIA' | 'FIL' | 'FIS' | 'FSA' | 'FSL' | 'GDE' | 'GDI' | 'GMS' | 'GOS' | 'GRI' | 'IFS' | 'IGD' | 'IGT' | 'IID' | 'INS' | 'IOD' | 'IOL' | 'IPC' | 'IPO' | 'IRP' | 'IRW' | 'ISH' | 'ISL' | 'ISS' | 'ITS' | 'LAS' | 'LDL' | 'LDS' | 'LEA' | 'LEL' | 'LIP' | 'LLA' | 'LLL' | 'LNC' | 'LND' | 'MCR' | 'MWI' | 'MWO' | 'MWP' | 'OAT' | 'OTS' | 'OVT' | 'PEN' | 'PIN' | 'PIP' | 'PMS' | 'POR' | 'POS' | 'PPA' | 'PPL' | 'PRP' | 'PRR' | 'PRS' | 'PRW' | 'RDS' | 'RFS' | 'RLS' | 'RNT' | 'SAA' | 'SAL' | 'SCO' | 'SLA' | 'SLL' | 'STR' | 'STS' | 'SVI' | 'SVO' | 'SVP' | 'TCP' | 'TCR' | 'TCS' | 'TKT' | 'TOF' | 'TTS' | 'UTL'
  - `invoice_number` string, nullable: Reference of the invoice this payment settles. Required for some destination currencies and countries. Anything that is not a letter or a digit is removed and the result is cut to 30 characters before it reaches the banking partner; an INR payment needs what remains to be non-empty.
  - `invoice_date` string, date, nullable: Date of the invoice this payment settles. Required for some destination currencies and countries.
  - `reference` string, nullable: Reference shown to the recipient, where the destination rail supports one.
  - `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.

## Response `200`

Successful Response

- CreateInternationalPaymentResponse
  - `approval_id` string, uuid, required: Handle for this payment. Poll `GET /approvals/{approval_id}` to learn the outcome.
  - `status` 'processing' | 'pending_approval', required
  - `contact_id` string, uuid, required: Contact being paid.
  - `recipient_amount` string, required: How much the recipient receives.
  - `recipient_currency` 'AED' | 'AFN' | 'ALL' | 'AMD' | 'ANG' | 'AOA' | 'ARS' | 'AUD' | 'AWG' | 'AZN' | 'BAM' | 'BBD' | 'BDT' | 'BGN' | 'BHD' | 'BIF' | 'BMD' | 'BND' | 'BOB' | 'BOV' | 'BRL' | 'BSD' | 'BTN' | 'BWP' | 'BYN' | 'BZD' | 'CAD' | 'CDF' | 'CHE' | 'CHF' | 'CHW' | 'CLF' | 'CLP' | 'CNY' | 'COP' | 'COU' | 'CRC' | 'CUC' | 'CUP' | 'CVE' | 'CZK' | 'DJF' | 'DKK' | 'DOP' | 'DZD' | 'EGP' | 'ERN' | 'ETB' | 'EUR' | 'FJD' | 'FKP' | 'GBP' | 'GEL' | 'GHS' | 'GIP' | 'GMD' | 'GNF' | 'GTQ' | 'GYD' | 'HKD' | 'HNL' | 'HRK' | 'HTG' | 'HUF' | 'IDR' | 'ILS' | 'INR' | 'IQD' | 'IRR' | 'ISK' | 'JMD' | 'JOD' | 'JPY' | 'KES' | 'KGS' | 'KHR' | 'KMF' | 'KPW' | 'KRW' | 'KWD' | 'KYD' | 'KZT' | 'LAK' | 'LBP' | 'LKR' | 'LRD' | 'LSL' | 'LYD' | 'MAD' | 'MDL' | 'MGA' | 'MKD' | 'MMK' | 'MNT' | 'MOP' | 'MRU' | 'MUR' | 'MVR' | 'MWK' | 'MXN' | 'MXV' | 'MYR' | 'MZN' | 'NAD' | 'NGN' | 'NIO' | 'NOK' | 'NPR' | 'NZD' | 'OMR' | 'PAB' | 'PEN' | 'PGK' | 'PHP' | 'PKR' | 'PLN' | 'PYG' | 'QAR' | 'RON' | 'RSD' | 'RUB' | 'RWF' | 'SAR' | 'SBD' | 'SCR' | 'SDG' | 'SLE' | 'SEK' | 'SGD' | 'SHP' | 'SLL' | 'SOS' | 'SRD' | 'SSP' | 'STN' | 'SVC' | 'SYP' | 'SZL' | 'THB' | 'TJS' | 'TMT' | 'TND' | 'TOP' | 'TRY' | 'TTD' | 'TWD' | 'TZS' | 'UAH' | 'UGX' | 'USD' | 'USN' | 'UYI' | 'UYU' | 'UYW' | 'UZS' | 'VED' | 'VES' | 'VND' | 'VUV' | 'WST' | 'XAF' | 'XAG' | 'XAU' | 'XBA' | 'XBB' | 'XBC' | 'XBD' | 'XCD' | 'XDR' | 'XOF' | 'XPD' | 'XPF' | 'XPT' | 'XSU' | 'XTS' | 'XUA' | 'XXX' | 'YER' | 'ZAR' | 'ZMW' | 'ZWG' | 'ZWL', required
  - `source_amount` string, required: US dollars converted to fund the payment, at the rate quoted when you called. The final debit is set when the payment executes and can differ slightly if the rate moves.
  - `fee_amount` string, required: Meow's fee for the conversion, in US dollars.
  - `total_amount` string, required: US dollars debited in total, fee included. This is the figure your approval rules are evaluated against.
  - `created_time` integer, required: When the payment was requested, as a Unix timestamp.
  - `message` string, nullable: Present when the payment needs approval, to say so.
  - `metadata` object, nullable: The metadata attached when this object was created, unchanged. `null` when none was attached. Rarely, a `.created` webhook can be published before the create request finishes committing, and that one event reports `null`; every later event and every read of the object carries the metadata.

## 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/ea2d7e25b63b?raw)
