PayPal · Holds, captures, payouts
Every Handshake deal runs on PayPal's own payment primitives. The buyer's money is reserved, not sent; the seller sees it's real; and only the right amount ever moves, after the item arrives.
One real sandbox deal, start to finish
Nintendo Switch OLED · asking $230
- Buyer's offer held by PayPal Orders v2 · AUTHORIZE
- $215.00
- Agents agree on Only this can ever be charged
- $210.00
- Captured after delivery Payments v2 · final_capture
- $210.00
- Released to the buyer Never charged
- $5.00
- PayPal fee From the capture
- −$5.93
- Paid to the seller Payouts v1
- $204.07
The deal lifecycle
Paying a stranger usually means trusting them first. Handshake puts PayPal in the middle of every step, so neither side has to.
- 01
Reserve, don't send
The buyer approves a PayPal order with intent AUTHORIZE. The money is held on their account and nothing moves to anyone.
Orders v2 - 02
Know where it ships
The authorization returns the buyer's PayPal-verified address. The seller's label is checked against it, since PayPal Seller Protection generally needs the item shipped there.
Shipping address - 03
Keep it reserved
PayPal guarantees a hold for three days. If the item is still in transit, a Render Workflow reauthorizes it so the funds stay reserved until delivery.
Reauthorize - 04
Charge only what's fair
On delivery, Handshake captures the deal price, or less after a damage refund, with final_capture. PayPal releases whatever is left.
Partial capture - 05
Prove it shipped
Tracking is attached to the PayPal capture, which PayPal recommends for physical goods and uses when resolving disputes. Protection eligibility is PayPal's call.
Order tracking - 06
Pay the seller
The seller's share goes out through PayPal Payouts, after PayPal's fee, straight to their PayPal account.
Payouts v1 - 07
Hand over a receipt
Once PayPal captures, the buyer gets an official PayPal invoice, marked paid: the item and what was promised, the agreed price, any refund as its own line, the tracking and the capture.
Invoicing v2 - 08
Or release it all
Seller never ships, or the agents can't agree? The hold is voided and the buyer is never charged.
Void
Built for real money
Idempotent by default
Every PayPal request carries its own PayPal-Request-Id, so a retry or a double click can never charge twice.
Bound to one browser
Checkout is pinned to the browser that started it with a private cookie. A stranger holding an order id can't finish someone else's payment.
Amounts set in code
The AI never decides how much money moves. Capture amounts come from the agreed price and code-capped refund rules.
Proof
$223.55
paid to a seller after PayPal's $6.45 fee on a $230 deal: hold, ship, capture, track, payout.
Full deal
$5
of a $215 backed offer released automatically when the agents agreed on $210.
Partial capture
100%
of a hold returned when the agents couldn't agree, voided before anyone was charged.
Void
What we call
Log in with PayPal
POST /v1/oauth2/token · GET /v1/identity/oauth2/userinfoSellers sign in on PayPal's own page. Handshake gets their verified status and payer id, never a password.
Create order
POST /v2/checkout/ordersintent AUTHORIZE at the deal price, or at the buyer's max for a backed offer.
Authorize
POST /v2/checkout/orders/{id}/authorizeTurns the buyer's approval into a hold and returns their PayPal-verified shipping address.
Capture
POST /v2/payments/authorizations/{id}/captureCaptures the agreed amount, or less after a refund, with final_capture so the rest is released.
Reauthorize
POST /v2/payments/authorizations/{id}/reauthorizeRenews the hold after PayPal's 3-day honor period, run on schedule by a Render Workflow.
Void
POST /v2/payments/authorizations/{id}/voidReleases the whole hold on cancel, when the agents can't agree, or when the seller misses the shipping deadline.
Add tracking
POST /v2/checkout/orders/{id}/trackAttaches the carrier and tracking number to the capture, as PayPal recommends for physical goods.
Payouts
POST /v1/payments/payoutsSends the seller their net amount after PayPal's fee, into their own PayPal account by payer id.
Invoicing
POST /v2/invoicing/invoices · /{id}/send · /{id}/paymentsAfter the capture, the buyer's receipt: a PayPal invoice for the deal, marked paid, never emailed to anyone. It never moves money.
JS SDK Buttons
intent=authorizePayPal's own checkout window, plus the sandbox test card for judges without a login.
Docs & source
- PayPal clientEvery call above, with idempotency keys.Open
- Deal flowsHold, ship, settle, refund and cancel, in order.Open
- Orders v2Create, authorize and track.Open
- Payments v2Capture and void authorizations.Open
- PayoutsPaying the seller.Open
- Invoicing v2The buyer's paid receipt.Open
- Authorize & capture guidePayPal's guide to the hold-then-capture pattern.Open
- IdempotencyWhy every request carries PayPal-Request-Id.Open