Quick Start
This guide shows the minimal path: create an escrow, submit a deliverable, open a dispute, get a decision. No edge cases. No error handling. Just the golden path.
Prerequisites
- API Key and Secret from your integrator account
- Ability to send HMAC-signed HTTP requests
Step 1: Create an Escrow
POST
/v1/escrows http
POST /v1/escrows
Content-Type: application/json
X-Api-Key: your_api_key
X-Timestamp: 1735430400
X-Nonce: unique_nonce_123
X-Signature: hmac_sha256_signature
{
"external_id": "order_12345",
"currency": "USD",
"total_amount": 50000,
"milestones": [
{
"milestone_id": "ms_design",
"amount": 20000,
"deadline": "2025-02-01T00:00:00Z"
},
{
"milestone_id": "ms_development",
"amount": 30000,
"deadline": "2025-03-01T00:00:00Z"
}
]
} Response (201):
json
{
"id": "esc_abc123",
"external_id": "order_12345",
"state": "CREATED",
"currency": "USD",
"total_amount": 50000,
"milestones": [...],
"created_at": "2025-01-15T10:00:00Z"
} Step 2: Declare Payment Status
After funds are secured in your payment system:
POST
/v1/escrows/:id/payment-status http
POST /v1/escrows/esc_abc123/payment-status
{
"external_payment_ref": "pi_stripe_xyz",
"status": "FUNDS_HELD",
"declared_at": "2025-01-15T10:30:00Z"
} Response (200):
json
{
"status": "accepted",
"current_state": "FUNDED"
} Step 3: Submit a Deliverable
POST
/v1/escrows/:id/deliverable http
POST /v1/escrows/esc_abc123/deliverable
{
"milestone_id": "ms_design",
"reference": {
"type": "external_reference",
"provider": "github",
"uri": "https://github.com/org/repo/pull/42",
"content_hash": "sha256:e3b0c44298fc1c149afbf4c8996fb924..."
}
} State transitions to DELIVERED.
Step 4: Open a Dispute
Client claims deliverable is incomplete:
POST
/v1/escrows/:id/dispute http
POST /v1/escrows/esc_abc123/dispute
{
"reason_code": "DELIVERABLE_INCOMPLETE",
"opened_by": {
"actor_id": "usr_client_456",
"actor_role": "client"
}
} Response (201):
json
{
"id": "dsp_def456",
"escrow_id": "esc_abc123",
"state": "OPEN",
"reason_code": "DELIVERABLE_INCOMPLETE",
"opened_by": { "actor_id": "usr_client_456", "actor_role": "client" },
"created_at": "2025-01-20T14:00:00Z"
} Step 5: Submit Evidence
Both parties submit evidence references:
POST
/v1/disputes/:id/evidence http
POST /v1/disputes/dsp_def456/evidence
{
"submitted_by": {
"actor_id": "usr_contractor_789",
"actor_role": "contractor"
},
"reference": {
"type": "external_reference",
"provider": "google_drive",
"uri": "https://drive.google.com/file/d/...",
"content_hash": "sha256:..."
}
} Step 6: Lock Evidence & Get Recommendation
POST
/v1/disputes/:id/lock http
POST /v1/disputes/dsp_def456/lock GET
/v1/disputes/:id/recommendation http
GET /v1/disputes/dsp_def456/recommendation Response:
json
{
"recommendation": "SPLIT",
"confidence": 0.72,
"signals": ["late_delivery", "partial_completion"],
"suggested_ratio": {
"client": 0.4,
"contractor": 0.6
},
"engine_version": "v1.0.0"
} Step 7: Apply Decision
POST
/v1/disputes/:id/decision http
POST /v1/disputes/dsp_def456/decision
{
"decision": "SPLIT",
"final_ratio": {
"client": 0.35,
"contractor": 0.65
},
"justification": "Milestone delivered late but functional"
} Response (200):
json
{
"status": "resolved",
"outcome": "SPLIT",
"payout": {
"client": 17500,
"contractor": 32500
}
} What Happens Next
A webhook is dispatched to your registered endpoint with the DISPUTE_RESOLVED event.
You use those payout figures to execute transfers in your payment system.
We recommend. You enforce.