Status flow
Step-by-step API calls
1. Create the escrow
fee_breakdown (so your UI can show costs before payment) and conversation_id.
2. Fund the escrow
saved_card (with card_id) or bank_transfer (async — returns virtual account details). Status moves to funded once confirmed → counterparty is notified via WhatsApp.
See the Payments & Fund Releases guide for fee structure, funding source details, and the bank transfer async flow.
3. Counterparty accepts
active. For goods_products, a 24-hour inspection window starts automatically.
4. Release funds
available_balance atomically. If the payee has auto_withdraw enabled, a Paystack bank transfer fires immediately — no separate withdrawal step needed.
For milestone-based escrows, use POST /milestone-release per milestone instead. The escrow moves to released automatically once all milestones are released.
See the Payments & Fund Releases guide for the full release and withdrawal lifecycle.
Key rules
Buyer and seller cannot be the same user. The API enforces this at creation.
- Only the payer can call
POST /escrow-fund - Only the counterparty can call
POST /escrow-acceptorPOST /escrow-decline - Either party can call
POST /dispute-raiseon an active/inspection escrow - Only the payer (or admin) can call
POST /escrow-release