Collect via Wire
Collect funds from a payer's bank account into your account by wire drawdown.
Collect via Wire pulls funds from a payer's external bank account and credits them into a Passport Account using the wire network. It's a wire drawdown: a reverse wire you initiate to pull funds from the payer's account with their authorization. Unlike ACH, wire offers faster settlement and suits high-value, time-sensitive collections. This feature is available for Business Customers only. For the full field list, jump to the Request reference.
Pulling funds into your own Passport Account from your own bank is a transfer of your own money, not a collection. See Transfer funds → Fund from your own bank (wire).
Common use cases
- Collect a high-value payment from a business customer or counterparty
- Pull time-sensitive funds where same-day settlement is required
- Collect capital calls, settlements, or large B2B payments
- Collect a recurring high-value payment from a saved payer
External Account or Contact?To collect from a third-party payer (a customer or counterparty), save them as a Contact, which stores their bank details inside the contact entity, then reference the contact as the
source. Wire collections are only supported from a saved Contact, not from inline one-time bank details. A saved External Account is the customer's own account; pulling from it is a transfer (Transfer funds), not a collection. Don't repurpose a saved External Account to collect from a third party.
Make your first collection
The fastest way to see it work: collect from a saved payer (Contact) into a Passport Account with the minimal fields below. The full set of options is in the Request reference.
POST /v1/customer/id/{id}/transaction
{
"externalId": "wire-collect-first-001",
"method": "WIRE",
"amount": "25000.00",
"purpose": "Wire drawdown",
"source": {
"contact": {
"externalId": "payer-contact-001",
"externalAccount": { "externalId": "payer-bank-001" }
}
},
"destination": { "account": { "externalId": "passport-account-001" } }
}You'll get back a transaction with status: SCHEDULED. Store the returned id and your externalId to track it and for reconciliation.
UseexternalIdfor safe retriesFor Treasury, PCE treats the
externalIdin the request body as the idempotency key; there's no separate header. Send a uniqueexternalIdper collection, and retrying with the same value creates it only once.
Get authorization before you pullA wire drawdown pulls money from the payer's account, so you must hold their authorization before you initiate it. Keep the proof and be ready to produce it if requested.
Scenarios
Every wire pull follows the transaction lifecycle. Wire pulls are processed as wire drawdowns and are available for Business Customers only. You collect from a payer you've saved as a Contact.
sequenceDiagram
participant You as Your Application
participant PCE as PCE
participant Fed as Wire Network (Fedwire)
participant Bank as Payer's 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 you're crediting is active.
- You hold the payer's authorization for the wire drawdown.
- Your program is configured to support wire pull (Business Customers only).
Scenario 1: Collect a high-value payment from a saved payer
(collect from a saved Contact)
Use this when you collect a large or time-sensitive payment from a business customer or counterparty you'll bill again: capital calls, real estate closings, or recurring B2B settlements where same-day finality matters. Save the payer once as a Contact, then reference the contact on every collection.
You'll also need: the payer saved as a Contact with a linked External Account that includes wire routing details, and their authorization for the drawdown.
Request
POST /v1/customer/id/{id}/transaction
{
"externalId": "settlement-wire-0091",
"method": "WIRE",
"amount": "50000.00",
"purpose": "Capital call Q1",
"source": {
"contact": {
"id": 55120,
"externalAccount": { "id": 77234 }
}
},
"destination": {
"account": {
"id": 91045
}
},
"processingDetail": {
"memo": "Cap Call Q1 2025"
}
}Response
{
"id": 401522,
"externalId": "settlement-wire-0091",
"status": "SCHEDULED",
"statusReason": "ON_USER_REQUEST",
"method": "WIRE",
"amount": 50000.00,
"purpose": "Capital call Q1",
"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. Because a wire drawdown settles only after the payer's bank approves and sends the funds, watch for the status change rather than assuming success on submit. 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. |
source | ✓ | The bank account to debit. See Source types for the supported shapes. |
destination.account.id (or externalId) | ✓ | The Passport Account to credit |
amount | ✓ | Amount to debit (in USD). Must be greater than zero. |
purpose | ✓ | Purpose of the transaction. Maximum 128 characters. |
Source types
Wire collections use one source shape: a payer you've saved as a Contact.
Saved Contact (a payer you collect from)
| Parameter | Required | Description |
|---|---|---|
source.contact.id or externalId | ✓ | Unique identifier of the Contact |
source.contact.externalAccount.id or externalId | ✓ | Unique identifier of the External Account linked to the Contact |
Pulling from your own account?Referencing a saved External Account you own sends the drawdown to your own bank. That's a transfer, covered on Transfer funds → Fund from your own bank (wire), not here.
Processing detail
Optional as a whole, but certain fields may be required depending on your program's configuration.
| Parameter | Required | Description |
|---|---|---|
processingDetail.memo | Optional | Short descriptor for the transaction (max 40 characters) |
processingDetail.originator | System-generated | Originating financial institution (auto-populated) |
processingDetail.payor.name | Conditional | Name of the payor (max 23 characters) |
processingDetail.payor.email | Conditional | Payor email address (max 80 characters) |
processingDetail.payor.phone | Conditional | Payor phone number (format: XXX-XXX-XXXX) |
processingDetail.payor.address.addressLine1 | Conditional | Address line 1 (max 35 characters) |
processingDetail.payor.address.addressLine2 | Conditional | Address line 2 (max 35 characters) |
processingDetail.payor.address.city | Conditional | City (max 25 characters) |
processingDetail.payor.address.state | Conditional | State (2-3 characters, e.g., TX) |
processingDetail.payor.address.zip | Conditional | ZIP code (max 9 characters) |
processingDetail.payor.address.country | Conditional | Country (2-character code, e.g., US) |
Payor details are required only if payor validation is enabled for your program. When provided, they help identify the originating party and improve reconciliation.
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 destination Passport Account is active.
- The source resolves to a saved Contact with wire routing details.
- Authorization for the drawdown is present, and wire pull is enabled for your program.
Other conditions can only be judged once the pull 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
Collect via Wire uses the shared transaction lifecycle. See it for every status, the reasons, and how to track a transaction.
If a wire pull fails
A wire pull moves to FAILED when the payer's bank rejects the drawdown or the processing interval lapses without settlement (the reason is in the status reason). A PENDING pull is on hold because the source or destination account is inactive or blocked. In both cases, resolve the underlying issue and submit a new pull. For the specific error codes, see Transactions Error codes. Test these paths in the sandbox before going live.
Go live
The shared pre-production checklist (production credentials, webhook subscription and signature validation, idempotency, and sandbox testing) is in Getting Started. Specific to collecting via wire, also confirm:
- Wire pull (wire drawdown) is enabled for your program (Business Customers only).
- You hold valid authorization for every drawdown and can produce the proof.
- If payor validation is enabled for your program, you pass the required payor details.
Best practices
General practices (set a unique externalId, subscribe to webhooks, test in sandbox) are in Getting Started. Specific to collecting via wire:
| Practice | Description |
|---|---|
| Obtain authorization before initiating | Hold the account holder's authorization before initiating a wire drawdown. |
| 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. |
Next steps
See also
- Save Payees as Contacts: save the payers you collect from by wire
- Transfer funds: fund your own Passport Account from your own bank (a transfer, not a collection)
- Collect via ACH: collect by ACH direct debit instead of wire
- Error Codes and Messages: resolve a failed or returned collection
Updated 7 days ago
