P2P Escrow B2B API
Secure B2B endpoints for partner platforms (such as AgriSync) to create, manage, and monitor P2P Escrow transactions backed by automated WhatsApp group moderation, Virtual Accounts, and real-time Webhooks.
Authentication
Include one of these headers on every server-to-server API call:
X-Partner-Api-Key: <your-laskad-issued-key> # OR X-AgriSync-Api-Key: <your-laskad-issued-key>
Keys are provisioned by Laskad operations. Missing or invalid keys return 401 Unauthorized.
Base URL
https://api.laskad.app/api/v1/b2b/escrow/api/v1/b2b/escrow/createCreates a new P2P Escrow transaction, provisions a dedicated Virtual Account for buyer deposit, creates a WhatsApp group, and registers optional real-time outbound webhooks.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Partner-Api-Key | header | string | required | Partner API Key |
partnerName | body | string | required | Name of the partner platform (e.g., "AgriSync") |
buyerName | body | string | required | Full name of the buyer |
buyerPhone | body | string | required | Buyer WhatsApp phone number in E.164 format (e.g. 2348012345678) |
sellerName | body | string | required | Full name of the seller |
sellerPhone | body | string | required | Seller WhatsApp phone number |
itemDescription | body | string | required | Description of item or commodity |
totalAmount | body | number | required | Total transaction amount in Naira (min: 100) |
webhookUrl | body | string (URL) | optional | Outbound HTTP POST webhook URL for status updates |
webhookSecret | body | string | optional | Secret key for HMAC-SHA256 signature verification |
sellerBankCode | body | string | optional | Seller 3-digit bank code for disbursement |
sellerAccountNumber | body | string | optional | Seller 10-digit bank account number |
partnerBankCode | body | string | optional | Partner bank code for commission payout |
partnerAccountNumber | body | string | optional | Partner 10-digit bank account number |
Response Fields
| Field | Type | Description |
|---|---|---|
success | boolean | Always true for 2xx responses |
escrowId | string (UUID) | Laskad internal Escrow UUID |
status | string | Initial status: AWAITING_FUNDING |
groupJid | string | Created WhatsApp Group JID |
inviteLink | string | null | WhatsApp Group direct invitation URL |
virtualAccount.accountNumber | string | 10-digit Virtual Account Number to deposit into |
virtualAccount.bankName | string | Bank Name for Virtual Account |
virtualAccount.expectedAmount | number | Exact expected funding amount |
breakdown.totalAmount | number | Total purchase price |
breakdown.sellerPayoutAmount | number | Payout amount to seller after 3% commission |
breakdown.laskadCommission | number | Laskad fee (1.5%) |
breakdown.partnerCommission | number | Partner fee share (1.5%) |
Example Request
curl -X POST https://api.laskad.app/api/v1/b2b/escrow/create \
-H "Content-Type: application/json" \
-H "X-Partner-Api-Key: your-key" \
-d '{
"partnerName": "AgriSync",
"buyerName": "John Doe",
"buyerPhone": "2348012345678",
"sellerName": "Farmer Bio",
"sellerPhone": "2348098765432",
"itemDescription": "50 Bags of Rice",
"totalAmount": 150000,
"webhookUrl": "https://agrisynai.farm/api/webhooks/laskad"
}'Example Response
{
"success": true,
"escrowId": "f81d4fae-7dec-11d0-a765-00a0c91e6bf6",
"status": "AWAITING_FUNDING",
"groupJid": "12036398495038290@g.us",
"inviteLink": "https://chat.whatsapp.com/ExAmPlELiNk123",
"virtualAccount": {
"accountNumber": "9940123456",
"bankName": "Wema Bank / Lint",
"accountName": "Laskad Escrow",
"expectedAmount": 150000
},
"breakdown": {
"totalAmount": 150000,
"sellerPayoutAmount": 145500,
"laskadCommission": 2250,
"partnerCommission": 2250
}
}/api/v1/b2b/escrow/:idFetches full real-time details and transaction state for a specific P2P Escrow session by its UUID.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string (UUID) | required | Laskad Escrow ID |
X-Partner-Api-Key | header | string | required | Partner API key |
Example Request
curl https://api.laskad.app/api/v1/b2b/escrow/f81d4fae-7dec-11d0-a765-00a0c91e6bf6 \ -H "X-Partner-Api-Key: your-key"
Example Response
{
"id": "f81d4fae-7dec-11d0-a765-00a0c91e6bf6",
"partnerName": "AgriSync",
"buyerName": "John Doe",
"sellerName": "Farmer Bio",
"itemDescription": "50 Bags of Rice",
"totalAmount": "150000.00",
"status": "FUNDED",
"virtualAccountNumber": "9940123456",
"virtualBankName": "Wema Bank / Lint",
"createdAt": "2026-09-12T09:40:00.000Z"
}/api/v1/b2b/escrowReturns all escrow transactions created by your partner platform. Filterable by status.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
X-Partner-Api-Key | header | string | required | Partner API key |
status | query | string | optional | Filter by status: AWAITING_FUNDING | FUNDED | POLL_ACTIVE | COMPLETED | DISPUTED |
partnerName | query | string | optional | Filter by partner name |
/api/v1/b2b/escrow/:id/disputeFlags an escrow session as DISPUTED. Funds will remain safely frozen in escrow, and a notice will be dispatched to the WhatsApp group and outbound webhooks.
Parameters
| Name | In | Type | Required | Description |
|---|---|---|---|---|
id | path | string (UUID) | required | Escrow UUID |
X-Partner-Api-Key | header | string | required | Partner API key |
reason | body | string | optional | Optional description of the dispute reason |