Pay via BOOK

Move funds between two accounts within the system.

Pay via BOOK lets you move funds from one Account to another Account within the system.

This payout method is used when both the source and destination accounts already exist inside this ecosystem. Unlike ACH, Wire, or Check payouts, BOOK transfers do not involve external bank accounts, mailing destinations, or additional payment rail processing.

Use Pay via BOOK when you need to send funds between two Accounts inside the system.

Common Use Cases:

  • Move funds between two users within the platform
  • Transfer funds between internal operating accounts
  • Send money between customer-linked Accounts
  • Support internal ecosystem disbursements

Create a BOOK transfer

Processing a BOOK transfer involves submitting the source and destination Passport Account identifiers to the API and tracking the transaction lifecycle.

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

    ParameterRequiredDescription
    methodSet to BOOK
    externalIdOptionalYour own reference ID for the transaction. Maximum 45 characters.
    typeOptionalType of transaction. Possible value: REGULAR
    source.account.idAccount to be debited
    destination.account.idAccount to be credited
    amountAmount to transfer (in USD). Must be greater than zero.
    purposePurpose of the transaction. Maximum 128 characters.
    allowDuplicateOptionalSet to true to allow duplicate transactions on the same day. Defaults to false.
  2. Once the request is submitted, our system performs a series of system-level validations before sending the transaction for processing. These validations check for:

    1. Missing or invalid required fields
    2. Incorrect parameter formats or values
    3. Source or destination account status and availability
    4. 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. For a complete list of validation errors and how to resolve them, refer to the Error Codes & Messages section.

  3. 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
    3. Check the status field to understand the current state of the transaction.
  4. For every successfully created transaction, store:

    1. id – Unique transaction identifier assigned by Passport
    2. externalId – Your reference identifier (if provided)

    These are required for tracking, reconciliation, and follow-up actions.


Scenarios

The following scenario shows an end-to-end BOOK transfer flow. It includes a flow diagram, prerequisites, and a complete example request.

Scenario 1: Transfer funds between two Passport Accounts

Use this scenario to move funds instantly from one Passport Account to another within the system. BOOK transfers do not use external networks and do not require external bank accounts or mailing destinations.

Flow

flowchart LR
    A(["👤 Customer<br/><b>ACTIVE</b>"]) --> B(["🏦 Source Account<br/><b>Has Balance</b>"])
    B --> C(["🏦 Destination Account<br/><b>ACTIVE</b>"])
    C --> D(["📖 BOOK Transfer<br/><b>COMPLETED</b>"])
    style A fill:#E8F4FD,stroke:#1976D2,stroke-width:2px
    style B fill:#E8F5E9,stroke:#388E3C,stroke-width:2px
    style C fill:#FFF3E0,stroke:#F57C00,stroke-width:2px
    style D fill:#F3E5F5,stroke:#7B1FA2,stroke-width:2px

Prerequisites

  • Customer exists and is ACTIVE.
  • Source Account is ACTIVE and has sufficient balance to cover the transfer amount.
  • Destination Account exists in the system and is ACTIVE.

Example Request

{
  "externalId": "book-transfer-001",
  "method": "BOOK",
  "type": "REGULAR",
  "amount": "500.00",
  "purpose": "Internal Transfer",
  "source": {
    "account": {
      "id": "source-account-001"
    }
  },
  "destination": {
    "account": {
      "id": "destination-account-001"
    }
  }
}
.readme-logo { display: none !important; }