Every trade moves through a fixed lifecycle: create, fund, deliver, then release (or cancel/refund). Milestone-based trades repeat the deliver/release step per milestone instead of once for the whole trade.
POST /api/partner/v1/trades/
{
"title": "Widget",
"amount": "100.00",
"currency": "KES",
"seller_id": "<seller's Intasef user id>",
"buyer_name": "Jane Buyer",
"buyer_phone": "+254700000000",
"external_reference": "your-own-order-id-123"
}seller_id is required for Marketplace partners. Merchant partners can omit it — their trades use an implicit house seller instead.
external_referenceis yours to set on every trade — use your own order/transaction ID so you can reconcile trades against your own records without depending on Intasef's trade ID.
GET /api/partner/v1/trades/{id}/ — poll this, or rely on webhooks (see the Webhooks page) for real-time updates.
POST /api/partner/v1/trades/{id}/fund/POST /api/partner/v1/trades/{id}/deliver/POST /api/partner/v1/trades/{id}/release/POST /api/partner/v1/trades/{id}/cancel/Passing a milestones array when creating a trade is what makes it milestone-based — omit it for a single deliver/release trade.
POST /api/partner/v1/trades/{id}/milestones/{milestone_id}/deliver/POST /api/partner/v1/trades/{id}/milestones/{milestone_id}/release/