Collect via Wire
Collect funds from a payer's bank account into your account by wire drawdown.
Collect via Wire lets you debit funds from an external bank account and credit them into your account within the system using the wire network. Unlike ACH, wire transfers offer faster settlement and are best suited for high-value, time-sensitive collections between business accounts.
PCE supports multiple source types, allowing you to pull funds from pre-linked accounts or one-time bank accounts.
Wire pull transactions are processed as Wire Drawdowns—a reverse wire initiated by the recipient (you) to pull funds from the payer’s account with their authorization. This feature is available for Business Customers only.
Use Wire pull when you need to collect high-value or time-sensitive funds.
- High-Value Transfers: Move large amounts quickly between business accounts
- Time-Sensitive Payments: Urgent fund collection where faster settlement is required
- Account Funding: Add funds to your account from external bank accounts
- Business Collections: Pull payments from corporate customers
Prepare recipients
Before initiating a pull via WIRE, decide how you want to provide the source bank account.
- Use External Accounts when pulling funds from your own bank account outside the system and you want to save it for reuse.
- Use Add Payees as Contacts when pulling funds to another person’s or business’s bank account outside the system and you want to reuse their saved payee details later.
- Use a one-time destination when you need to pull funds from a bank account outside the system without saving it in advance.
This helps you choose the right source type based on whether you are pulling funds from your own external account, a third-party recipient, or a one-time bank destination.
How it works
Processing a Wire pull transaction involves sending bank account details to the API and tracking the transaction lifecycle.
-
Make a POST request to
/v1/customer/id/{id}/transaction(orexternalId) API endpoint with required parameters:Parameter Required Description method✓ Set to WIREsource✓ Defines the bank account to be debited. Refer to the Source Types section below for supported options destination.account.id(orexternalId)✓ The account within the system to be credited amount✓ Amount to debit (in USD). Must be greater than zero purpose✓ Purpose of the transaction. Maximum 128 characters Source Types
Pull from a Linked External AccountUse when the bank account is already linked to Priority.
Parameter Required Description source.externalAccount.idorexternalId✓ Identifier of the linked external account Best for:
- Recurring collections
- Funding your own accounts
Pull from a One-Time Bank AccountUse when debiting a bank account that is not pre-linked.
Only available for Business Customers
Parameter Required Description accountNumber✓ Bank account number routingNumber✓ 9-digit routing number wireRoutingNumber✓ Wire-specific routing number holderName✓ Name of account holder type✓ SAVINGorCHECKINGholderType✓ CONSUMERorCORPORATEPayee added as ContactUse this option when you want to pull money from another person’s or business’s bank account outside the Passport system.
Contacts are best for third-party recipients that you pay repeatedly, such as vendors, contractors, employees, or other external payees. If you have not created the recipient yet, first add them in Add Payees as Contacts.
Parameter Required Description source.contact.idorexternalId✓ Unique identifier of the Contact assigned by Passport source.contact.externalAccount.idorexternalId✓ Unique identifier of the External Account linked to the Contact -
You can also pass, the
processingDetailobject which carries additional processing instructions for your transaction. While optional as a whole, certain fields within it may be required depending on your Program Manager configuration.Parameter Required Description processingDetail.memoOptional Short descriptor for the transaction (max 40 characters) processingDetail.originatorSystem Generated Originating financial institution (auto-populated) processingDetail.payor.nameOptional Name of the payor (max 23 characters) processingDetail.payor.emailOptional Payor email address (max 80 characters) processingDetail.payor.phoneOptional Payor phone number (format: XXX-XXX-XXXX) processingDetail.payor.address.addressLine1Optional Address line 1 (max 35 characters) processingDetail.payor.address.addressLine2Optional Address line 2 (max 35 characters) processingDetail.payor.address.cityOptional City (max 25 characters) processingDetail.payor.address.stateOptional State (2–3 characters, e.g., TX, CAL) processingDetail.payor.address.zipOptional ZIP code (max 9 characters) processingDetail.payor.address.countryOptional Country (2-character code, e.g., US) Payor details are required only if payor validation is enabled at the Program Manager level. When provided, these details help identify the originating party and improve reconciliation.
-
Once the payment request is submitted, our system performs a series of system-level validations before sending the transaction to the card network. These validations check for:
- Missing or invalid required fields
- Incorrect parameter formats or values 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 identifierexternalId– Your reference identifier (if provided) These are required for tracking, reconciliation, and support.
Scenarios
Every Wire pull follows the same transaction lifecycle. The only thing that changes per scenario is how you specify the source bank account. Wire pulls are processed as Wire Drawdowns and are available for Business Customers only.
sequenceDiagram
participant You as Your Platform
participant PCE as PCE API
participant Fed as Wire Network (Fedwire)
participant Bank as External Bank
You->>PCE: POST /v1/customer/id/{id}/transaction (method: WIRE)
PCE-->>You: 201 Created (status: SCHEDULED)
PCE->>Fed: Send Wire Drawdown request
Fed->>Bank: Forward drawdown instruction
Bank-->>Fed: Approve and send funds
Fed-->>PCE: Funds received
alt Success
PCE-->>You: Webhook (status: COMPLETED)
else Rejected by Bank
PCE-->>You: Webhook (status: FAILED)
end
Before you begin (all scenarios)
- The destination Passport Account is active.
- Your webhook endpoint is subscribed to transaction events.
- You have obtained proper authorization from the account holder for the Wire Drawdown.
- Your program is configured to support Wire pull transactions.
Scenario 1: Collect a high-value settlement from a pre-linked bank account (Wire Drawdown)
Use this when you need to collect a large or time-sensitive payment from a business counterparty whose bank account is already linked. Common for capital calls, real estate closings, or large B2B settlement payments where same-day finality is critical.
You'll also need: A verified External Account linked to the customer with a valid wireRoutingNumber.
Request
POST /v1/customer/id/{id}/transaction
{
"externalId": "settlement-wire-0091",
"method": "WIRE",
"amount": "50000.00",
"purpose": "Capital call Q1",
"source": {
"externalAccount": {
"id": 88712
}
},
"destination": {
"account": {
"id": 91045
}
},
"processingDetail": {
"memo": "Cap Call Q1 2025"
}
}Response (201 Created)
{
"id": 401522,
"externalId": "settlement-wire-0091",
"status": "SCHEDULED",
"statusReason": "ON_USER_REQUEST",
"method": "WIRE",
"amount": 50000.00,
"purpose": "Capital call Q1",
"type": "REGULAR",
"source": {
"externalAccount": {
"id": 88712
}
},
"destination": {
"account": {
"id": 91045
}
}
}Scenario 2: Collect an urgent one-time payment from a new source (inline bank details)
Use this when you need to pull funds urgently from a bank account that is not already saved. Common for one-time escrow funding, emergency capital infusions, or first-time vendor settlements.
You'll also need: The payer's bank account number, ACH routing number, wire routing number, and proper authorization. Available for Business Customers only.
Request
POST /v1/customer/id/{id}/transaction
{
"externalId": "urgent-wire-pull-4421",
"method": "WIRE",
"amount": "75000.00",
"purpose": "Escrow funding",
"source": {
"externalAccount": {
"accountNumber": "****8901",
"routingNumber": "121000248",
"wireRoutingNumber": "121000248",
"holderName": "Summit Capital Partners",
"type": "CHECKING",
"holderType": "CORPORATE"
}
},
"destination": {
"account": {
"id": 91045
}
},
"processingDetail": {
"memo": "Escrow Fund 4421"
}
}Response (201 Created)
{
"id": 401530,
"externalId": "urgent-wire-pull-4421",
"status": "SCHEDULED",
"statusReason": "ON_USER_REQUEST",
"method": "WIRE",
"amount": 75000.00,
"purpose": "Escrow funding",
"type": "REGULAR",
"source": {
"externalAccount": {
"accountNumber": "****8901",
"routingNumber": "121000248"
}
},
"destination": {
"account": {
"id": 91045
}
}
}Scenario 3: Collect from a saved payee you collect from regularly (Contact)
Use this when you repeatedly collect high-value payments from the same business counterparty, such as a client sending monthly retainer payments, a landlord collecting commercial lease payments, or an investor funding capital commitments.
You'll also need: A Contact with a linked External Account that includes wire routing details. If you haven't created one yet, see Save Payees as Contacts.
Request
POST /v1/customer/id/{id}/transaction
{
"externalId": "retainer-collect-jun-2025",
"method": "WIRE",
"amount": "25000.00",
"purpose": "Monthly retainer June 2025",
"source": {
"contact": {
"id": 55120,
"externalAccount": {
"id": 77234
}
}
},
"destination": {
"account": {
"id": 91045
}
},
"processingDetail": {
"memo": "Retainer Jun-2025"
}
}Response (201 Created)
{
"id": 401538,
"externalId": "retainer-collect-jun-2025",
"status": "SCHEDULED",
"statusReason": "ON_USER_REQUEST",
"method": "WIRE",
"amount": 25000.00,
"purpose": "Monthly retainer June 2025",
"type": "REGULAR",
"source": {
"contact": {
"id": 55120
}
},
"destination": {
"account": {
"id": 91045
}
}
}Track the transaction
Subscribe to webhooks or retrieve the transaction via GET /v1/customer/id/{id}/transaction/id/{id} to follow it to settlement.
Transaction Statuses
The table below describes the possible statuses of a Wire pull transaction, and the reasons associated with each.
| Status | Description | Reason |
|---|---|---|
SCHEDULED | Default status on creation | ON_USER_REQUEST |
PENDING | Transaction is on hold due to account issues | Account or external account restrictions |
PROCESSING | Transaction is in progress | PROCESSING_IN_TRANSIT |
COMPLETED | Funds successfully credited to destination account | PROCESSED_BY_SYSTEM, Wire direct collect processed |
FAILED | Transaction failed or was rejected by bank | Return codes or processing failure |
CANCELLED | Cancelled upon request | User/system-triggered |
Best Practices
| Practice | Description |
|---|---|
| Obtain authorization before initiating | Ensure proper authorization from the account holder before initiating a Wire pull |
| Verify account and routing details | Double-check routing and wire details, as wire transactions are difficult to reverse |
| Use a meaningful purpose | Clearly define the purpose field for better tracking and reconciliation |
| Use memo for tracking | Populate processingDetail.memo with recognizable identifiers |
| Use webhooks | Subscribe to webhooks for real-time transaction updates |
| Test your integration | Validate all scenarios in sandbox before going live |
Updated 1 day ago