Use Cases
Freelance Milestone Payments
Lock the project fee in escrow before work begins. The client releases funds when they accept the deliverable.
Marketplace Transactions
Hold buyer funds until the seller ships and the buyer confirms receipt, eliminating chargeback risk.
AI Agent Job Completion
Pay autonomous agents only when their on-chain wallet reports a task as complete, verified by an arbiter contract.
Grant Milestones
Release tranche payments only when milestone conditions written into the
condition field are satisfied.How Escrow Works
- Create — The depositor locks USDC in the escrow contract, naming a beneficiary and an arbiter.
- Both confirm — When both depositor and beneficiary call
confirmDelivery, the contract releases funds to the beneficiary automatically. - Dispute — If either party raises a dispute, funds are frozen and the arbiter reviews the case.
- Resolve — The arbiter resolves the dispute on-chain to send funds to either party.
Creating an Escrow
REST API Parameters
string
required
The wallet address of the party locking the funds. This wallet must hold sufficient USDC.
string
required
The wallet ID used to authorise the on-chain transactions. Retrieve this from
GET /api/agent/status.string
required
The wallet address of the party that receives funds on release.
string
required
USDC amount to lock, as a decimal string, e.g.
"200.00".number
Hours from now until the auto-release deadline. Defaults to
24. See the warning below.string
Human-readable release condition stored on-chain and shown to both parties, e.g.
"Deliver completed API integration".string
URL to receive escrow lifecycle events. See Webhook Events below.
Releasing Funds
Either the depositor or the beneficiary calls the release endpoint to confirm delivery. The contract tracks confirmations — funds are released to the beneficiary only when both parties have confirmed.boolean
true when both parties have confirmed and funds have transferred to the beneficiary.string
Human-readable status. If only one party has confirmed, the message says so and instructs you to wait for the other party.
Raising a Dispute
Either party can raise a dispute at any time while the escrow isACTIVE. This freezes the funds and notifies the arbiter.
DISPUTED and neither party can release funds unilaterally. The arbiter reviews the case and resolves the outcome on-chain.
Checking Escrow Status
Escrow Lifecycle
The Arbiter
The default arbiter address is0x3500000000000000000000000000000000008004, the agent registry contract on Arc testnet. You can substitute any address — a multisig, a DAO, or a trusted third-party contract — by passing a different arbiter value when creating the escrow via the SDK.

