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.

  1. Make a POST request to /v1/customer/id/{id}/transaction (or externalId) API endpoint with required parameters: 

    ParameterRequiredDescription
    methodSet to WIRE
    sourceDefines the bank account to be debited. Refer to the Source Types section below for supported options
    destination.account.id (or externalId)The account within the system to be credited
    amountAmount to debit (in USD). Must be greater than zero
    purposePurpose of the transaction. Maximum 128 characters
    Source Types

    Pull from a Linked External Account

    Use when the bank account is already linked to Priority.

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

    Best for:

    • Recurring collections
    • Funding your own accounts

    Pull from a One-Time Bank Account

    Use when debiting a bank account that is not pre-linked.

    Only available for Business Customers

    ParameterRequiredDescription
    accountNumberBank account number
    routingNumber9-digit routing number
    wireRoutingNumberWire-specific routing number
    holderNameName of account holder
    typeSAVING or CHECKING
    holderTypeCONSUMER or CORPORATE

    Payee added as Contact

    Use 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.

    ParameterRequiredDescription
    source.contact.id or externalIdUnique identifier of the Contact assigned by Passport
    source.contact.externalAccount.id or externalIdUnique identifier of the External Account linked to the Contact
  2. You can also pass, the processingDetail object 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. 

    ParameterRequiredDescription
    processingDetail.memoOptionalShort descriptor for the transaction (max 40 characters)
    processingDetail.originatorSystem GeneratedOriginating financial institution (auto-populated)
    processingDetail.payor.nameOptionalName of the payor (max 23 characters)
    processingDetail.payor.emailOptionalPayor email address (max 80 characters)
    processingDetail.payor.phoneOptionalPayor phone number (format: XXX-XXX-XXXX)
    processingDetail.payor.address.addressLine1OptionalAddress line 1 (max 35 characters)
    processingDetail.payor.address.addressLine2OptionalAddress line 2 (max 35 characters)
    processingDetail.payor.address.cityOptionalCity (max 25 characters)
    processingDetail.payor.address.stateOptionalState (2–3 characters, e.g., TX, CAL)
    processingDetail.payor.address.zipOptionalZIP code (max 9 characters)
    processingDetail.payor.address.countryOptionalCountry (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.

  3. 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:

    1. Missing or invalid required fields
    2. 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. 
  4. If all validations pass, the transaction is submitted for processing. You can track the outcome by: 

    1. Retrieving the transaction via GET /v1/customer/id/{id}/transaction/id/{id} (or externalId) API endpoint
    2. Subscribing to Transaction webhooks Check the status field to understand the current state of the transaction.
  5. For every successfully created transaction, store: 

    1. id – Unique transaction identifier
    2. externalId – 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.

StatusDescriptionReason
SCHEDULEDDefault status on creationON_USER_REQUEST
PENDINGTransaction is on hold due to account issuesAccount or external account restrictions
PROCESSINGTransaction is in progressPROCESSING_IN_TRANSIT
COMPLETEDFunds successfully credited to destination accountPROCESSED_BY_SYSTEM, Wire direct collect processed
FAILEDTransaction failed or was rejected by bankReturn codes or processing failure
CANCELLEDCancelled upon requestUser/system-triggered

Best Practices

PracticeDescription
Obtain authorization before initiatingEnsure proper authorization from the account holder before initiating a Wire pull
Verify account and routing detailsDouble-check routing and wire details, as wire transactions are difficult to reverse
Use a meaningful purposeClearly define the purpose field for better tracking and reconciliation
Use memo for trackingPopulate processingDetail.memo with recognizable identifiers
Use webhooksSubscribe to webhooks for real-time transaction updates
Test your integrationValidate all scenarios in sandbox before going live


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