From agreement to payout, one state machine
The same four states, with the same guarantees, every time.
The escrow lifecycle
Each transition is atomic and emits a signed webhook.
- 01
Create the escrow
Terms are fixed at creation.
POST /v1/escrows → awaiting_funding
- 02
The buyer funds it
The seller sees cleared funds.
status: funded
- 03
The seller delivers
Delivery starts the clock.
status: in_delivery
- 04
Funds release
The buyer confirms, or time lapses.
status: released → payout
Disputes freeze the money, not your business
A disputed escrow stops the clock.
- 01
Release is frozen
The window stops and any payout is cancelled.
- 02
Both sides submit
Timestamped and immutable, from both sides.
- 03
An outcome is recorded
Release, refund or split, written and executed.
- 04
Appeal window
Either party can contest once, within seven days.
Three calls and a webhook
Create, fund and release are the whole surface.
// Every state change arrives as a signed webhook.
app.post('/escrowlift', (req, res) => {
const event = escrowlift.webhooks.verify(
req.body,
req.headers['escrowlift-signature'],
)
switch (event.type) {
case 'escrow.funded':
return ship(event.data)
case 'escrow.delivery_confirmed':
return payout(event.data)
case 'escrow.disputed':
return freeze(event.data)
}
res.sendStatus(200)
})Details worth knowing
Start holding funds this week
Open a sandbox escrow and go live when you're ready.