Receive via PPI
Share your Passport Payment ID so another Passport customer can send funds to you instantly by BOOK.
A Passport Payment ID (PPI) is a verified identifier that resolves to your Passport Account (it looks like name@ppi). Share it with another Passport customer and they can send you funds by BOOK — an internal transfer that settles instantly, with no external bank rail.
Because the money never leaves PCE, a PPI receipt is different from an ACH or wire credit: there's no external credit and no matching step. The payer addresses the transfer to your PPI, and the funds land in your account as a completed transaction.
Use this when the payer is also on PCE — partner-to-partner disbursements, marketplace payouts between platform users, or internal funding across customers.
Find your PPI
Your PPI is part of your customer profile. Retrieve it from the GET /v1/customer/id/{id} response, under the ppi object:
"ppi": {
"resourceName": "ppi",
"ppi": "yourname@ppi",
"url": "/v1/customer/id/{id}/ppi"
}Share the ppi value (e.g. yourname@ppi) with the payer — that's all they need to address a BOOK transfer to you.
How it works
You share your PPI; the payer optionally verifies it, then sends a BOOK transfer addressed to it. There's no receive-side API call — the funds settle straight to your account.
sequenceDiagram
participant You as You (recipient)
participant Payer as Payer (another Passport customer)
participant PCE as PCE
You->>Payer: Share your PPI (yourname@ppi)
Payer->>PCE: POST /transaction (method BOOK, destination.ppi)
PCE->>PCE: Resolve PPI → your Passport Account, debit payer, credit you
PCE-->>Payer: 201 Created (status COMPLETED — settles instantly)
PCE-->>You: transaction.book.update — funds credited
The payer verifies your PPI first
Before a first payment, the payer can confirm your PPI is valid with the POST /v1/customer/id/{id}/contact/verifyPpi endpoint:
POST /v1/customer/id/{id}/contact/verifyPpi
PromiseMode: NEVER
{
"ppi": "yourname@ppi"
}A 204 No Content response means the PPI exists and is valid (no body is returned); an invalid PPI returns 400.
Scenario: Get paid by a partner on PCE
A partner who also has a Passport Account owes you a disbursement. You share your PPI; they verify it once, then send a BOOK transfer addressed to destination.ppi. The transfer settles instantly and the funds appear in your account as a COMPLETED transaction.
You'll also need: your PPI (from your customer profile), and the payer's account funded and ACTIVE.
The payer's request looks like this — see Pay via BOOK for the full payer-side flow:
POST /v1/customer/id/{id}/transaction
{
"externalId": "book-ppi-inbound-001",
"method": "BOOK",
"amount": "250.00",
"purpose": "Partner disbursement",
"source": { "account": { "externalId": "payer-account-001" } },
"destination": { "ppi": "yourname@ppi" }
}After the transfer
A PPI receipt is an ordinary BOOK transaction credited to your account — there's no review queue. Track it the same way as any transaction:
- Watch for the
transaction.book.create/transaction.book.updatewebhook events, or GET the transaction. - BOOK settles instantly, so it typically arrives already
COMPLETED.
For the status model, the webhook envelope, and tracking, see Transaction lifecycle.
Best practices
| Practice | Description |
|---|---|
| Share the exact PPI value | Give the payer your ppi string (name@ppi) as shown on your customer profile |
Confirm your account is ACTIVE | A PPI resolves to your account; it must be ACTIVE to receive |
| Tell payers to verify once | A quick Verify PPI check avoids a failed first transfer |
| Expect instant settlement | BOOK has no good-funds hold — funds are usable once COMPLETED |
Related
See also
- Pay via BOOK — the payer-side BOOK flow and PPI addressing
- Transaction lifecycle — statuses and tracking
- Save Payees as Contacts — how payers can save your PPI for repeat transfers
Updated about 15 hours ago