Pay via Wire (Domestic)
Send funds from a Passport Account to an external bank account via the domestic Wire network.
Pay via Wire sends funds from a Passport Account to an external bank account over the domestic Wire network. Use it for urgent or high-value payments that need same-day settlement. You pay a third party saved as a Contact, a one-time recipient, or transfer to your own external account. For the full field list, jump to the Request reference.
Moving funds to your own bank account from a Passport Account you own is a transfer of your own money. See Transfer funds.
Common use cases
- Pay vendors, suppliers, or service providers urgently
- Send high-value payments requiring same-day settlement
- Disburse funds when ACH timing doesn't meet your needs
- Pay saved Contacts via wire
Make your first wire payout
The fastest way to see it work: pay a saved vendor (Contact) with the minimal fields below. The full set of options is in the Request reference.
POST /v1/customer/id/{id}/transaction
{
"externalId": "wire-first-payout-001",
"method": "WIRE",
"amount": "10000.00",
"purpose": "Vendor Payment",
"source": { "account": { "externalId": "passport-account-001" } },
"destination": {
"contact": {
"externalId": "vendor-contact-001",
"externalAccount": { "externalId": "vendor-bank-001" }
}
}
}You'll get back a transaction with status: SCHEDULED. Store the returned id and your externalId to track it and for follow-up actions.
UseexternalIdfor safe retriesFor Treasury, PCE treats the
externalIdin the request body as the idempotency key; there's no separate header. Send a uniqueexternalIdper payout, and retrying with the same value creates it only once.
Scenarios
Every wire payout follows the transaction lifecycle. The only thing that changes per scenario is the destination, so pick the one that matches the problem you're solving.
sequenceDiagram
participant You as Your Application
participant PCE as PCE
participant Fed as Wire Network (Fedwire)
participant Bank as Recipient Bank
You->>PCE: POST /v1/customer/id/{id}/transaction (method: WIRE)
PCE->>PCE: Validate balance + destination
PCE-->>You: 201 Created (status: SCHEDULED)
PCE->>Fed: Submit wire instruction — PROCESSING
Fed->>Bank: Route funds to beneficiary
Bank-->>Fed: Settlement confirmation
Fed-->>PCE: Wire settled
PCE-->>You: Webhook (status: COMPLETED)
Before you begin (all scenarios)
- The Passport Account you're paying from is active and has enough balance to cover the payout.
Each scenario below adds one requirement specific to its destination.
Scenario 1: Pay a vendor or contractor you pay regularly
(third-party recipient saved as a Contact)
Use this to pay a vendor, supplier, contractor, or partner you'll pay again. Save their bank details once as a Contact, then reference the contact on every payout.
You'll also need: the recipient saved as a Contact with a linked external bank account.
Request
POST /v1/customer/id/{id}/transaction
{
"externalId": "wire-contact-001",
"method": "WIRE",
"type": "REGULAR",
"amount": "7500.00",
"purpose": "Supplier Payment",
"source": { "account": { "externalId": "passport-account-001" } },
"destination": {
"contact": {
"externalId": "supplier-contact-001",
"externalAccount": { "externalId": "supplier-bank-001" }
}
},
"processingDetail": {
"processingMode": "SAME_DAY",
"memo": "Invoice INV-2026-0471"
}
}Response
{
"resourceName": "transaction",
"url": "/v1/customer/id/4225975/transaction/id/230491550",
"id": 230491550,
"externalId": "wire-contact-001",
"status": "SCHEDULED",
"statusDate": "06/29/2026 14:20:55",
"amount": 7500,
"method": "WIRE",
"purpose": "Supplier Payment",
"type": "REGULAR",
"transactionClass": "SEND",
"statusReason": "On User Request",
"source": {
"account": { "resourceName": "account", "id": 9915272, "url": "/v1/customer/id/4225975/account/id/9915272" }
},
"destination": {
"contact": { "resourceName": "contact", "id": 4019600, "url": "/v1/customer/id/4225975/contact/id/4019600" }
}
}Scenario 2: Make a one-time wire payout to a new recipient
(bank details passed inline, nothing saved)
Use this for a one-off wire payment when you don't want to save the recipient. You pass the bank details directly in the request.
You'll also need: the recipient's holderName, routingNumber, and accountNumber, verified.
Request
POST /v1/customer/id/{id}/transaction
{
"externalId": "wire-onetime-001",
"method": "WIRE",
"type": "REGULAR",
"amount": "5000.00",
"purpose": "One-time Vendor Payment",
"source": { "account": { "externalId": "passport-account-001" } },
"destination": {
"externalAccount": {
"holderName": "John Smith",
"accountNumber": "123456789012",
"routingNumber": "021000089",
"type": "CHECKING",
"holderType": "CONSUMER"
}
},
"processingDetail": {
"processingMode": "SAME_DAY",
"memo": "Consulting fee"
}
}Response
{
"resourceName": "transaction",
"url": "/v1/customer/id/4225975/transaction/id/230491561",
"id": 230491561,
"externalId": "wire-onetime-001",
"status": "SCHEDULED",
"statusDate": "06/29/2026 15:10:30",
"amount": 5000,
"method": "WIRE",
"purpose": "One-time Vendor Payment",
"type": "REGULAR",
"transactionClass": "SEND",
"statusReason": "On User Request",
"source": {
"account": { "resourceName": "account", "id": 9915272, "url": "/v1/customer/id/4225975/account/id/9915272" }
},
"destination": {
"externalAccount": { "resourceName": "externalAccount", "id": 4019508, "url": "/v1/customer/id/4225975/externalAccount/id/4019508" }
}
}Scenario 3: Transfer to your own external bank account
(pre-linked External Account you own)
Use this to move funds from your Passport Account to your own bank account outside the system. You reference a pre-linked External Account.
You'll also need: the destination bank account linked as an External Account.
Request
POST /v1/customer/id/{id}/transaction
{
"externalId": "wire-prelinked-001",
"method": "WIRE",
"type": "REGULAR",
"amount": "10000.00",
"purpose": "Funds Transfer",
"source": { "account": { "externalId": "passport-account-001" } },
"destination": {
"externalAccount": { "externalId": "my-external-bank-001" }
},
"processingDetail": { "processingMode": "SAME_DAY" }
}Response
{
"resourceName": "transaction",
"url": "/v1/customer/id/4225975/transaction/id/230491572",
"id": 230491572,
"externalId": "wire-prelinked-001",
"status": "SCHEDULED",
"statusDate": "06/29/2026 16:05:00",
"amount": 10000,
"method": "WIRE",
"purpose": "Funds Transfer",
"type": "REGULAR",
"transactionClass": "SEND",
"statusReason": "On User Request",
"source": {
"account": { "resourceName": "account", "id": 9915272, "url": "/v1/customer/id/4225975/account/id/9915272" }
},
"destination": {
"externalAccount": { "resourceName": "externalAccount", "id": 4019510, "url": "/v1/customer/id/4225975/externalAccount/id/4019510" }
}
}Track the transaction
Subscribe to webhooks or GET the transaction to follow it to settlement. The statuses, the webhook payload, and the event types all live in Transaction lifecycle.
Request reference
The complete set of fields for the create-transaction request. Scenarios above use subsets of these.
Core parameters
| Parameter | Required | Description |
|---|---|---|
method | ✓ | Set to WIRE |
externalId | Recommended | Your own reference ID, also the idempotency key. Retrying with the same value won't create a duplicate. Maximum 45 characters. |
type | Optional | Type of transaction. Possible value: REGULAR. |
source.account.id (or externalId) | ✓ | The Passport Account to debit |
destination | ✓ | The bank account to credit. See Destination types for the supported shapes. |
amount | ✓ | Amount to send (in USD) |
purpose | ✓ | Purpose of the transaction. Maximum 128 characters. |
Destination types
The destination object takes one of three shapes, matching the scenarios above.
Saved Contact (pay a third party you've saved, Scenario 1)
| Parameter | Required | Description |
|---|---|---|
destination.contact.id or externalId | ✓ | Unique identifier of the Contact |
destination.contact.externalAccount.id or externalId | ✓ | Unique identifier of the External Account linked to the Contact |
Inline bank details (one-time payout, nothing saved, Scenario 2)
| Parameter | Required | Description |
|---|---|---|
destination.externalAccount.holderName | ✓ | Name of the bank account holder as it appears on bank records |
destination.externalAccount.accountNumber | ✓ | The bank account number to be credited |
destination.externalAccount.routingNumber | ✓ | 9-digit routing number of the account |
destination.externalAccount.type | SAVING or CHECKING | |
destination.externalAccount.holderType | CONSUMER or CORPORATE |
Pre-linked External Account (your own bank account, Scenario 3)
| Parameter | Required | Description |
|---|---|---|
destination.externalAccount.id or externalId | ✓ | Identifier of the linked external account |
Processing detail
Optional as a whole, but certain fields may be required depending on your program's configuration.
| Parameter | Required | Description |
|---|---|---|
processingDetail.processingMode | Recommended | FORWARD (default): settles next business day. SAME_DAY: settles same day if submitted before cutoff, otherwise next business day. |
processingDetail.memo | Recommended | Reference information shown on the recipient's bank statement. Maximum 140 characters. |
processingDetail.addenda | Recommended | Additional reference data for reconciliation. Examples: Invoice number, customer reference ID, order ID. Maximum 80 characters. |
processingDetail.location.id | Unique identifier of a location to link to the transaction, assigned by Passport. |
Validation
The prerequisites above are the validations, and PCE enforces them when you submit. A submission is checked synchronously; if a check fails, the request returns an error and no transaction is created. Submission checks:
- Required fields are present and correctly formatted.
- The source Passport Account is active and has enough balance to cover the payout.
- The destination resolves (a saved Contact, valid one-time bank details, or a pre-linked External Account).
Other conditions can only be judged once the payout is in flight, such as an inactive or blocked account, a compliance hold, or a bank rejection. These surface after creation as PENDING or FAILED; see Transaction lifecycle. For error codes, see Error Codes and Messages.
Statuses
Pay via Wire uses the shared transaction lifecycle. See it for every status, the reasons, and how to track a transaction.
If a wire payout fails
A wire payout moves to FAILED when the wire network rejects the instruction or the receiving bank cannot process it. A PENDING payout is on hold because the source or destination account is inactive or blocked. In both cases, resolve the underlying issue and submit a new payout. For the specific error codes, see Transactions Error codes.
Go live
The shared pre-production checklist (production credentials, webhook subscription and signature validation, idempotency, and sandbox testing) is in Getting Started. Specific to paying via Wire, also confirm:
- Same-day wire cutoff times are verified for your program.
- Recipient bank details (routing and account numbers) are validated before submission.
Best practices
General practices (set a unique externalId, subscribe to webhooks, test in sandbox) are in Getting Started. Specific to paying via Wire:
| Practice | Description |
|---|---|
| Verify destination details | For one-time payments, ensure the account and routing numbers are accurate to avoid failures or misrouted funds. |
| Set a meaningful memo | Populate processingDetail.memo with a clear reference for identification on the recipient's bank statement. |
| Use same-day wisely | Same-day wire has cutoff times; submit early to ensure same-day settlement. |
| Use addenda for reconciliation | Include invoice numbers or reference IDs via processingDetail.addenda to simplify reconciliation. |
Next steps
See also
- Save Payees as Contacts: save vendors for faster repeat payouts
- Transfer funds: move money to an account you own
- Pay via ACH: lower-cost payouts with next-day settlement
- Pay via International Wire: cross-border wire payouts
- Error Codes and Messages: resolve a failed payout
Updated about 15 hours ago