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.

📘

Use externalId for safe retries

For Treasury, PCE treats the externalId in the request body as the idempotency key; there's no separate header. Send a unique externalId per 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

ParameterRequiredDescription
methodSet to WIRE
externalIdRecommendedYour own reference ID, also the idempotency key. Retrying with the same value won't create a duplicate. Maximum 45 characters.
typeOptionalType of transaction. Possible value: REGULAR.
source.account.id (or externalId)The Passport Account to debit
destinationThe bank account to credit. See Destination types for the supported shapes.
amountAmount to send (in USD)
purposePurpose 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)

ParameterRequiredDescription
destination.contact.id or externalIdUnique identifier of the Contact
destination.contact.externalAccount.id or externalIdUnique identifier of the External Account linked to the Contact

Inline bank details (one-time payout, nothing saved, Scenario 2)

ParameterRequiredDescription
destination.externalAccount.holderNameName of the bank account holder as it appears on bank records
destination.externalAccount.accountNumberThe bank account number to be credited
destination.externalAccount.routingNumber9-digit routing number of the account
destination.externalAccount.typeSAVING or CHECKING
destination.externalAccount.holderTypeCONSUMER or CORPORATE

Pre-linked External Account (your own bank account, Scenario 3)

ParameterRequiredDescription
destination.externalAccount.id or externalIdIdentifier of the linked external account

Processing detail

Optional as a whole, but certain fields may be required depending on your program's configuration.

ParameterRequiredDescription
processingDetail.processingModeRecommendedFORWARD (default): settles next business day. SAME_DAY: settles same day if submitted before cutoff, otherwise next business day.
processingDetail.memoRecommendedReference information shown on the recipient's bank statement. Maximum 140 characters.
processingDetail.addendaRecommendedAdditional reference data for reconciliation. Examples: Invoice number, customer reference ID, order ID. Maximum 80 characters.
processingDetail.location.idUnique 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:

PracticeDescription
Verify destination detailsFor one-time payments, ensure the account and routing numbers are accurate to avoid failures or misrouted funds.
Set a meaningful memoPopulate processingDetail.memo with a clear reference for identification on the recipient's bank statement.
Use same-day wiselySame-day wire has cutoff times; submit early to ensure same-day settlement.
Use addenda for reconciliationInclude invoice numbers or reference IDs via processingDetail.addenda to simplify reconciliation.

Next steps

See also



Did this page help you?
.readme-logo { display: none !important; }