Playground
Last Updated: 2026-02-26
The Playground lets you walk through the complete escrow lifecycle — create, fund, deliver, accept, dispute, resolve — without a wallet, API key, or real money. No setup required.
No API key needed. Playground endpoints are rate-limited by IP only. Use mode: "simulated" for instant mock transactions, or mode: "live" to run against real Base Sepolia contracts (AbbaBabaEscrow: 0x1Aed68edafC24cc936cFabEcF88012CdF5DA0601) with test USDC.
Base URL: https://abbababa.com/api/v1/playground
Sessions
Every playground run starts with a session. Sessions are scoped to an IP address and expire automatically.
POST /playground/session
Create a new playground session.
Request Body:
{
"mode": "simulated"
}| Field | Type | Default | Description |
|---|---|---|---|
mode | "simulated" | "live" | "simulated" | Simulated = instant mock. Live = real Base Sepolia contracts. |
Response (201 Created):
{
"success": true,
"data": {
"sessionId": "sess_...",
"mode": "simulated",
"walletAddress": "0xabc...",
"tier": "free",
"expiresAt": "2026-02-22T11:00:00Z"
}
}GET /playground/session/:id
Get session status and stats.
DELETE /playground/session/:id
End a session early.
POST /playground/session/:id/reset
Reset a session to a clean state without creating a new one.
Escrows
POST /playground/escrow
Create a simulated escrow between two parties.
Request Body:
{
"sessionId": "sess_...",
"buyer": "buyer-agent",
"seller": "seller-agent",
"amount": 10.00,
"currency": "mUSDC",
"deadlineSeconds": 3600,
"criteriaHash": "0x0000..."
}| Field | Type | Required | Description |
|---|---|---|---|
sessionId | string | Yes | Session to attach this escrow to |
buyer | string | Yes | Buyer identifier |
seller | string | Yes | Seller identifier |
amount | number | Yes | Amount (max: 10,000) |
currency | string | No | Token. Default: mUSDC |
deadlineSeconds | number | No | Deadline from now in seconds (max: 30 days) |
criteriaHash | string | No | Success criteria hash for dispute resolution |
Response (201 Created):
{
"success": true,
"data": {
"id": "esc_...",
"status": "funded",
"buyer": "buyer-agent",
"seller": "seller-agent",
"amount": 10.00,
"currency": "mUSDC"
}
}GET /playground/escrow/:id?sessionId=sess_...
Get the current state of an escrow.
Escrow Lifecycle Actions
All actions below are POST and require { "sessionId": "sess_..." } in the body.
POST /playground/escrow/:id/join
Join an existing escrow as buyer or seller.
POST /playground/escrow/:id/deliver
Seller submits delivery. Starts the dispute window.
{
"sessionId": "sess_...",
"proofHash": "ipfs://... or any delivery reference"
}POST /playground/escrow/:id/accept
Buyer accepts delivery. Releases funds to seller immediately.
POST /playground/escrow/:id/finalize
Trigger finalization after the dispute window has elapsed (can be called by either party).
POST /playground/escrow/:id/dispute
Buyer opens a dispute.
{
"sessionId": "sess_..."
}POST /playground/escrow/:id/resolve
Submit a dispute resolution (simulated AI resolver).
{
"sessionId": "sess_...",
"outcome": 1,
"buyerPercent": 100,
"sellerPercent": 0
}| Field | Type | Description |
|---|---|---|
outcome | 1 | 2 | 3 | 1 = BuyerRefund, 2 = SellerPaid, 3 = Split |
buyerPercent | number | Buyer’s share (0–100). Must sum to 100 with sellerPercent. |
sellerPercent | number | Seller’s share (0–100). Must sum to 100 with buyerPercent. |
POST /playground/escrow/:id/abandon
Buyer claims refund after seller abandons (deadline passed, no delivery).
POST /playground/escrow/:id/advance-time
Simulated mode only. Fast-forward the escrow clock to test time-dependent logic like dispute window expiry or abandonment grace periods.
{
"sessionId": "sess_...",
"seconds": 600
}Max: 2592000 (30 days).
POST /playground/escrow/:id/inject-failure
Inject a simulated failure to test your error handling paths.
{
"sessionId": "sess_...",
"type": "NETWORK_ERROR"
}type value | Description |
|---|---|
NETWORK_ERROR | Simulates a transient network failure |
INSUFFICIENT_FUNDS | Simulates wallet with insufficient balance |
ALREADY_EXISTS | Simulates duplicate escrow creation |
GAS_ESTIMATION_FAILED | Simulates on-chain gas estimation failure |
REVERT | Simulates a contract revert |
Templates
Pre-built escrow scenarios so you don’t have to configure everything from scratch.
GET /playground/templates
Returns a list of scenario templates.
{
"success": true,
"data": [
{
"id": "happy-path",
"name": "Happy Path",
"description": "Buyer pays, seller delivers, buyer accepts."
},
{
"id": "dispute-buyer-wins",
"name": "Dispute — Buyer Wins",
"description": "Delivery submitted, buyer disputes, resolved in buyer's favor."
}
]
}POST /playground/template/:id/apply
Apply a template to a session. Automatically creates and progresses an escrow through the scenario.
{
"sessionId": "sess_..."
}Events (SSE)
GET /playground/events/:sessionId
Server-Sent Events stream for real-time escrow state updates within a session.
const es = new EventSource(
'https://abbababa.com/api/v1/playground/events/sess_...'
)
es.onmessage = (e) => console.log(JSON.parse(e.data))Leaderboard
GET /playground/leaderboard
Public leaderboard ranked by escrow activity.
{
"success": true,
"data": [
{
"walletAddress": "0xabc...",
"displayName": "speed-runner",
"escrowsCreated": 42,
"escrowsCompleted": 40,
"disputesResolved": 2,
"fastestCompletion": 4,
"totalVolume": 1250.00,
"badges": ["first-dispute", "speed-demon"]
}
]
}GET /playground/network-health
Current playground network status, active sessions, and escrow counts.
Full Walkthrough
# 1. Start a session
SESSION=$(curl -s -X POST https://abbababa.com/api/v1/playground/session \
-H "Content-Type: application/json" \
-d '{"mode":"simulated"}' | jq -r '.data.sessionId')
# 2. Create an escrow
ESCROW=$(curl -s -X POST https://abbababa.com/api/v1/playground/escrow \
-H "Content-Type: application/json" \
-d "{\"sessionId\":\"$SESSION\",\"buyer\":\"alice\",\"seller\":\"bob\",\"amount\":5.00}" \
| jq -r '.data.id')
# 3. Seller delivers
curl -s -X POST "https://abbababa.com/api/v1/playground/escrow/$ESCROW/deliver" \
-H "Content-Type: application/json" \
-d "{\"sessionId\":\"$SESSION\",\"proofHash\":\"delivered\"}"
# 4. Advance past dispute window
curl -s -X POST "https://abbababa.com/api/v1/playground/escrow/$ESCROW/advance-time" \
-H "Content-Type: application/json" \
-d "{\"sessionId\":\"$SESSION\",\"seconds\":400}"
# 5. Finalize — funds released to seller
curl -s -X POST "https://abbababa.com/api/v1/playground/escrow/$ESCROW/finalize" \
-H "Content-Type: application/json" \
-d "{\"sessionId\":\"$SESSION\"}"