Pay via International WIRE
Send USD and non-USD payouts to international bank accounts using the wire network.
Pay via International Wire lets you send funds from the system Account to a bank account in another country using the International Wire network.
This payout method supports both USD and non-USD international wires. International Wire payouts are commonly used for cross-border vendor payments, global supplier disbursements, and international account transfers.
Common Use Cases:
- Transfer funds to your own international bank account
- Pay international vendors, suppliers, or service providers
- Send cross-border business disbursements
- Pay saved Contacts with international account details
- Send USD or non-USD payouts based on the destination account currency
Prepare payout recipients
Before initiating an International Wire payout, decide how you want to provide the destination bank account.
- Use International External Accounts when sending funds to your own bank account outside the system in another country and you want to save it for reuse.
- Use Add Payees as Contacts when sending funds to another person’s or business’s international bank account and you want to reuse their saved payee details later.
- Use a one-time international destination when you need to send funds to an international bank account without saving it in advance.
For non-USD destinations, make sure you understand the country- and currency-specific requirements before creating the payout. Some destinations require additional routing information or dynamic fields.
Choose the currency path
Before creating the transaction, decide whether you are sending a USD International Wire or a non-USD International Wire. The currency path determines whether amountOriginType and an FX Quote are required.
| Currency Path | Use When | Required Fields | FX Quote Behavior |
|---|---|---|---|
| USD International Wire | The destination account receives funds in USD | currency = USD | Not required |
| Non-USD International Wire | The destination account receives funds in a supported non-USD currency | currency, amountOriginType | Optional if fetched manually; otherwise the system automatically fetches the applicable FX Quote |
USD International Wires
Use this path when the destination international external account receives funds in USD.
For USD International Wires:
- Set
currencytoUSD - Do not provide
amountOriginType
Non-USD International Wires
Use this path when the destination international external account receives funds in a supported non-USD currency. For non-USD International Wires:
- Set
currencyto the supported destination currency - Provide
amountOriginType- Use
SOURCEwhen theamountrepresents the amount to be debited from the Passport Account - Use
DESTINATIONwhen theamountrepresents the amount to be credited to the destination international external account
- Use
- Optionally provide
processingDetail.fxQuote.idif you manually fetched an FX Quote before creating the transaction
For non-USD payouts, review Fetch FX Quote for non-USD International Wires before creating the transaction. FX Quotes are valid for 30 seconds. If you do not provide an FX Quote manually, the system automatically fetches the applicable FX Quote and returns the FX Quote ID in the retrieve transaction response.
Create an International Wire payout
Processing an International Wire payout involves providing source account details, destination international bank account details, currency information, and any required processing instructions.
-
Make a
POSTrequest to/v1/customer/id/{id}/transaction(orexternalId) API endpoint with the required parameters:Parameter
Required
Description
method✓
Set to
INTERNATIONAL_WIREexternalIdOptional
Your own reference ID for the transaction. Maximum 45 characters.
typeOptional
Type of send. Possible values:
REGULAR
source.account.id✓
The system Account to be debited.
destination✓
Defines the international bank account to be credited. Refer to the Destination Types accordion below for supported options.
amount✓
Amount to send. Must be greater than zero.
currency✓
Currency supported for the transaction. Provide
USDor a supported non-USD currency.The retrieve response shows the currency in which the system Account is debited; currently, this is
USD.amountOriginTypeConditional
Required for non-USD International Wire transactions. Possible values:
SOURCE— amount to be debited from the system Account;DESTINATION— amount to be credited to the destination international external account.
purpose✓
Purpose of the transaction. Maximum 128 characters.
linkedDocumentOptional
Authorization or supporting documents linked to the transaction.
Destination Types
Send to a pre-linked International External Account
Use this option when you want to send money from a Passport Account to your own international bank account outside the Passport system.
Pre-linked International External Accounts are best for transfers to customer-owned bank accounts that are already saved in Passport. If you have not added the destination bank account yet, first create it in International External Accounts.
| Parameter | Required | Description |
|---|---|---|
destination.internationalExternalAccount.id | ✓ | Unique identifier of the International External Account assigned by Passport |
Best for:
- Transferring funds to your own international bank account
- Reusing a previously saved international destination
- Sending repeat USD or non-USD international payouts
Send to a one-time international destination
Use this option when sending money to an international bank account without saving it in advance.
This is useful when you need to make a one-off international payout and do not want to first add the account as an International External Account or save the recipient as a Contact.
| Parameter | Required | Description |
|---|---|---|
destination.internationalExternalAccount.holderName | ✓ | Name of the bank account holder as it appears on bank records. Maximum 60 characters. |
destination.internationalExternalAccount.holderAddress | ✓ | Address details of the account holder. PO Box addresses are not allowed. |
destination.internationalExternalAccount.holderAddress.addressLine1 | ✓ | Address line 1. Range: 4 to 40 characters. |
destination.internationalExternalAccount.holderAddress.addressLine2 | Optional | Address line 2. Maximum 30 characters. |
destination.internationalExternalAccount.holderAddress.city | ✓ | City. Maximum 45 characters. |
destination.internationalExternalAccount.holderAddress.state | ✓ | Two-character state or region code. |
destination.internationalExternalAccount.holderAddress.country | ✓ | Two-character country code, for example US. |
destination.internationalExternalAccount.accountNumber | ✓ | Bank account number. |
destination.internationalExternalAccount.swiftCode | Conditional | SWIFT code for the destination bank. Use the POST /v1/customer/id/{id}/internationalExternalAccount/validateRoutingCode (or externalId) API to validate the SWIFT code before submitting the account details. |
destination.internationalExternalAccount.internationalRoutingCode | Conditional | International routing code required for certain countries. Use the POST /v1/customer/id/{id}/internationalExternalAccount/validateRoutingCode (or externalId) API to validate the Routing code before submitting the account details. |
destination.internationalExternalAccount.type | Optional | Type of account. |
destination.internationalExternalAccount.holderType | Optional | Holder type. Possible values: CONSUMER, CORPORATE. |
For non-USD destinations, also review the Additional Details for Non-USD Accounts section to understand metadata-driven country and currency requirements.
Best for:
- One-off international payouts
- Paying an international destination without saving it for future use
- Sending to a recipient where all destination details are collected at transaction time
Send to a Contact
Use this option when you want to send money from a Passport Account to another person’s or business’s international bank account outside the Passport system.
Contacts are best for third-party international recipients that you pay repeatedly, such as vendors, suppliers, contractors, or international business payees. If you have not created the recipient yet, first add them in Add Payees as Contacts.
| Parameter | Required | Description |
|---|---|---|
destination.contact.id | ✓ | Unique identifier of the Contact assigned by Passport |
destination.contact.internationalExternalAccount.id | ✓ | Unique identifier of the International External Account linked to the Contact |
Best for:
- Paying another person or business outside the system
- Reusing saved third-party international bank details
- Sending repeat international wire payouts to known recipients
-
You can also pass the
processingDetailobject, which carries additional processing instructions for the transaction. While optional as a whole, certain fields within it may be required depending on your Program Manager configuration.Parameter Required Description processingDetail.fxQuote.idOptional System generated unique identifier of the FX Quote, this is used for non-USD International Wire transactions. processingDetail.originatorOptional Originator of the transaction. processingDetail.memoOptional Additional details to be passed with the International Wire transaction. Maximum 40 characters. processingDetail.payorConditional Payor details. Supported when Payor detail validation is configured for the Program Manager. processingDetail.wireReferenceSystem-generated Reference assigned by the underlying financial institution. Returned in retrieve responses when available. processingDetail.networkReferenceSystem-generated Unique identifier used to capture the network reference number. Returned in retrieve responses when available. -
Once the request is submitted, our system performs a series of system-level validations before sending the transaction for processing. These validations check for:
- Missing or invalid required fields
- Incorrect parameter formats or values
- Source account status and available funds
- Destination International External Account status
- OFAC and CIP verification requirements for involved entities
- SWIFT code validity for one-time international destinations
- FX Quote validity for non-USD transactions
If any validation fails, the request is rejected immediately and an error response is returned. You must correct the issue and resubmit the request. For a complete list of validation errors and how to resolve them, refer to the Error Codes & Messages section.
-
If all validations pass, the transaction is submitted for processing. You can track the outcome by:
- Retrieving the transaction via GET
/v1/customer/id/{id}/transaction/id/{id}(orexternalId) API endpoint - Subscribing to Transaction webhooks
Check the
statusfield to understand the current state of the transaction. - Retrieving the transaction via GET
-
For every successfully created transaction, store:
id– Unique transaction identifier assigned by PassportexternalId– Your reference identifier, if providedprocessingDetail.fxQuote.id– FX Quote identifier for non-USD transactions, if returned
These are required for tracking, reconciliation, and follow-up actions.
Fetch FX Quote for non-USD International Wires
For non-USD International Wire payouts, you can fetch a Foreign Exchange (FX) Quote to determine the exchange rate, converted amount, and applicable fee before creating the transaction.
The FX rate is fetched from a third-party provider and may vary based on the destination currency, amount, and the time at which the quote is generated.
FX Quotes are valid for 30 seconds. If the quote expires before the International Wire transaction is created, the system returns an error and you must generate a new quote.
When to Use an FX Quote
Use an FX Quote when you want to:
- Confirm the exchange rate before creating a non-USD International Wire
- Calculate how much will be credited to the destination international external account
- Calculate how much will be debited from the source Passport Account
- Store the FX Quote ID for reconciliation and transaction tracking
If you do not provide an FX Quote manually, the system automatically fetches the applicable FX Quote and returns the FX Quote ID in the retrieve transaction response.
Create an FX Quote
Use the POST /v1/transaction/fxQuote API to create an FX Quote.
You can create an FX Quote in either of the following ways:
| Quote Type | Use When | Required Details |
|---|---|---|
| Destination amount and currency | You know how much the recipient should receive | destination.amount, destination.currency |
| Source amount and destination currency | You know how much should be debited from the source account | source.amount, destination.currency |
The FX Quote response includes the calculated source and destination amounts, rate, fee, expiry, and status:
| Field | Description |
|---|---|
url | System-generated endpoint that can be used to fetch the FX Quote. |
id | Unique FX Quote identifier assigned by Passport. |
destination.amount | Amount to be credited to the destination international external account. |
destination.currency | Destination currency for which the FX rate is fetched. |
source.amount | Amount to be debited from the source Passport Account. |
source.currency | Currency in which the source amount is debited. Currently, this is always USD. |
fxRate | Exchange rate fetched by the system. |
fee | Fee charged by the system. |
fxQuoteExpiry | Date and time when the FX Quote expires. FX Quotes are valid for 30 seconds. |
FX Quote Statuses
| Status | Description |
|---|---|
GENERATED | Default status when the FX Quote is created. |
ACCEPTED | Assigned after a transaction is created using the FX Quote. |
Use an FX Quote in an International Wire
To use a manually generated FX Quote, pass the FX Quote ID in the transaction request:
| Parameter | Required | Description |
|---|---|---|
processingDetail.fxQuote.id | Optional | Passport-generated FX Quote identifier used for the non-USD International Wire transaction. |
Retrieve an FX Quote
Use the GET /v1/transaction/fxQuote/id/{id} API to retrieve an FX Quote by its identifier.
You can use the retrieve response to confirm:
- source amount and currency
- destination amount and currency
- exchange rate
- fee
- quote expiry
- quote status
Store
processingDetail.fxQuote.idwhen it is returned on the transaction. It helps support reconciliation, troubleshooting, and transaction audits for non-USD International Wire payouts.
Transaction Statuses
The table below describes the possible statuses of an International Wire transaction and the reasons associated with each.
| Status | Description | Reason |
|---|---|---|
SCHEDULED | Default status on creation. | ON_USER_REQUEST |
PENDING | Transaction is on hold because one or more processing conditions have not been met. Source account must be ACTIVE and have sufficient funds, destination must be ACTIVE, and all required entities must be OFAC and CIP verified. | ACCOUNT_INACTIVE, ACCOUNT_BLOCKED, ACCOUNT_CLOSURE_INITIATED, ACCOUNT_CLOSED, CUSTOMER_SUSPENDED, OFAC_STATUS_NOT_VERIFIED |
PROCESSING | Transaction has been picked up for processing. | PROCESSING_IN_TRANSIT |
COMPLETED | Transaction completed successfully after processing. | PROCESSED_BY_SYSTEM |
FAILED | Transaction could not be completed due to processing failure, compliance issue, account issue, return, or other processing error. | INSUFFICIENT_FUNDS, OFAC_VERIFICATION_FAILED, <return-description> (<return-code>) |
CANCELLED | Transaction was cancelled upon user request. | ON_USER_REQUEST, INCORRECTLY_CREATED, OTHERS |
Best Practices
| Practice | Description |
|---|---|
| Use the right destination type | Use International External Accounts for your own international bank accounts, Contacts for third-party recipients, and one-time destinations for unsaved recipients. |
| Validate SWIFT details early | A valid SWIFT code is required. Validate it before creating one-time destinations or International External Accounts. |
| Use metadata for non-USD destinations | Non-USD destinations may require country- and currency-specific fields. Retrieve metadata before creating the destination. |
| Handle FX Quote timing carefully | FX Quotes are valid for 30 seconds. Regenerate the quote if it expires before transaction creation. |
| Provide clear purpose and memo values | Purpose and memo details support compliance, processing, and reconciliation. |
| Monitor transaction statuses | Track International Wire payouts using the retrieve transaction API or transaction webhooks. |
| Store transaction and FX identifiers | Store the transaction id, your externalId, and FX Quote ID for reconciliation and follow-up operations. |
| Test USD and non-USD flows separately | Validate both currency paths in sandbox before going live. |