Collect via Wire
Collect high-value payments quickly and reliably via Wire Drawdown.
A Collect via Wire transaction allows you to pull funds from an external bank account into a Passport account using the Wire network. Unlike other payment methods, Wire transfers offer faster settlement and are best suited for high-value, time-sensitive transactions between business accounts.
Passport supports two source types for Wire Collect transactions:
- External Account (Own Account): Pull funds from a pre-linked external bank account into a Passport account.
- One-Time: Pull funds from a third-party bank account by providing the account details directly at the time of the transaction.
Wire Collect transactions are processed as Wire Drawdowns — a reverse wire initiated by the fund recipient rather than the sender. This means the recipient (you) pulls funds from the payer's account with their authorization, rather than the payer pushing funds to you. Wire Drawdowns are available to Business Customers only.
How it Works
Step 1: Initiate the Collect Transaction
To create a Collect via Wire, make a POST request to the /v1/customer/id/{id}/transaction endpoint with the required parameters. The source object in your request determines which Wire Collect type is being initiated.
| Parameter | Required | Description |
|---|---|---|
method | ✓ | Set to WIRE for Wire transactions. |
source | ✓ | The account to be debited. Structure varies based on collect type. See source types below. |
destination.account.id | ✓ | The Passport Account where funds will be credited. |
amount | ✓ | Amount to collect, in USD. Must be greater than zero. |
purpose | ✓ | Purpose of the transaction. All characters are allowed. Maximum 128 characters. |
Source Types
Passport supports the following source types for Wire Collect transactions. Select the one that matches where the funds are being pulled from.
-
Collect from External Account (Own Account): Use this when pulling funds from a bank account that has already been linked to Passport as an External Account. Only Business Customers with a
CORPORATEaccount holder type are supported for Wire Collect. Pass the pre-linked External Account identifier in thesourceobject:Parameter Required Description source.externalAccount.id✓ Unique identifier of the External Account assigned by Passport. destination.externalAccount.id✓ Unique identifier of your Passport account where funds will be credited. -
Collect from a One-Time Source: Use this when pulling funds from a third-party bank account that is not pre-linked to Passport. The account details are provided directly in the transaction request. Only Business Customers can initiate a One-Time Wire Collect. Pass the account details directly in the
sourceobject:Parameter Required Description source.externalAccount.accountNumber✓ The bank account number to be debited. source.externalAccount.routingNumber✓ The 9-digit ABA routing number of the account. source.externalAccount.wireRoutingNumber✓ The wire-specific routing number of the account. source.externalAccount.holderName✓ Name of the bank account holder as it appears on bank records. source.externalAccount.holderTypeType of account holder. Possible values: CONSUMER,CORPORATE.source.externalAccount.typeType of bank account. Possible values: SAVING,CHECKING.
Processing Details
The processingDetail object carries additional processing instructions for your Wire Collect transaction. While optional as a whole, certain fields within it may be required depending on your Program Manager configuration.
More reference for processingDetail
| Parameter | Required | Description |
|---|---|---|
| 'processingDetail.memo' | No | Additional details to be passed with the Wire transaction. Appears in transaction records and aids in tracking and reconciliation. Maximum 40 characters. |
| processingDetail.originator | No | Originator of the transaction. |
| underlying financial institution. This is a system-generated field and cannot be set by the user. | ||
| processingDetail.payor.name | No | Name of the payor. Maximum 23 characters. |
| processingDetail.payor.email | No | Payor's email address. Format: [email protected]. Maximum 80 characters. |
| processingDetail.payor.phone | No | Payor's phone number. Supported format: XXX-XXX-XXXX. |
| processingDetail.payor.address.addressLine1 | No | Payor's address line 1. Maximum 35 characters. |
| processingDetail.payor.address.addressLine2 | No | Payor's address line 2. Maximum 35 characters. |
| processingDetail.payor.address.city | No | Payor's city. Maximum 25 characters. |
| processingDetail.payor.address.state | No | Payor's state. Supports 2 or 3 characters, for example TX or CAL. |
| processingDetail.payor.address.zip | No | Payor's zip code. Maximum 9 characters. |
| processingDetail.payor.address.country | No | Payor's country. 2-character country code only, for example US. |
Note on payor: Payor details are only required if your Program Manager configuration has payor validation enabled. When provided, these details are included in the Wire instruction and help identify the originating party in the transaction record.
Step 2: Check the Outcome
For every successfully created Collect transaction, store the id/ externalId - The unique Transaction ID assigned by Passport or your own reference ID, if provided at the time of creation. Once the transaction is submitted, our system performs a series of validations before processing the request. These validations check for:
- Missing or invalid required fields
- Incorrect parameter formats or values
- Program Manager configuration or permission issues
If any validation fails, the request is rejected immediately and an error response is returned. You must correct the issue and resubmit the request.
If all validations pass, the transaction is submitted for processing. You can determine the outcome by retrieving the transaction via GET /v1/customer/id/{id}/transaction/id/{id} or by subscribing to the Transaction webhook. Check the status field in the response to understand the current state of the transaction.
Transaction Statuses
The table below describes the possible statuses of a Wire Collect 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 an inactive or blocked source or destination account. | EXTERNAL_ACCOUNT_BLOCKED, EXTERNAL_ACCOUNT_INACTIVE, ACCOUNT_INACTIVE, ACCOUNT_BLOCKED, ACCOUNT_CLOSURE_INITIATED, ACCOUNT_CLOSED, CUSTOMER_SUSPENDED |
PROCESSING | Transaction has been picked up for processing. | PROCESSING_IN_TRANSIT |
COMPLETED | Funds have been successfully credited to the destination account. | PROCESSED_BY_SYSTEM, Wire direct collect processed |
FAILED | Transaction could not be processed, or was rejected by the receiving bank. | Collect processing interval lapsed, <return-description> (<return-code>) |
CANCELLED | Transaction was cancelled upon user request. | ON_CUSTOMER_REQUEST, INCORRECTLY_CREATED, OTHERS |
Best Practices
| Practice | Description |
|---|---|
| Obtain Authorization Before Initiating | Wire Collect transactions are initiated on behalf of the payer. Ensure you have proper authorization from the account holder before pulling funds. |
| Verify Account Details | For One-Time Collects, verify the account and wire routing numbers carefully before submitting. Wire transactions are difficult to reverse once processed. |
| Use a Meaningful Purpose | Always populate the purpose field clearly. This helps with reconciliation and provides a clear record of why funds were collected. |
| Use the Memo Field | Populate processingDetail.memo with a recognizable descriptor. This appears in transaction records and aids in tracking. |
| Use Webhooks | Subscribe to transaction webhooks to stay informed about transaction outcomes asynchronously, without polling. |
| Test Your Integration | Use Passport's sandbox environment to test all collect scenarios, including failures, before going live. |
See Also
Updated about 11 hours ago