Skip to main content
FlareHQ’s escrow service lets you lock USDC in a smart contract on Arc testnet until both parties confirm that conditions are met. If either side disagrees, either party can raise a dispute — at which point the designated arbiter reviews the evidence and resolves the outcome on-chain. No funds move unless the contract says so.

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

  1. Create — The depositor locks USDC in the escrow contract, naming a beneficiary and an arbiter.
  2. Both confirm — When both depositor and beneficiary call confirmDelivery, the contract releases funds to the beneficiary automatically.
  3. Dispute — If either party raises a dispute, funds are frozen and the arbiter reviews the case.
  4. 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 is ACTIVE. This freezes the funds and notifies the arbiter.
Once a dispute is raised, the escrow status changes to 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 is 0x3500000000000000000000000000000000008004, 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.

Webhook Events

Example Payload — escrow.created

You can verify any escrow transaction on the Arc block explorer:
Automatic release at deadline. If deadlineHours passes and no dispute has been raised, the escrow contract releases funds automatically to the beneficiary. Raise a dispute before the deadline if you believe conditions have not been met — you cannot dispute an escrow once it has auto-released.