Agent-native USDC escrow on Solana. Lock funds for a task, pay the worker when the principal approves, refund the principal if it expires.
One API call creates an escrow for a principal, a worker and a plain-language condition, with an expiry from 1 hour to 30 days.
Every escrow gets its own Solana Pay reference. Only a finalized transfer that carries it funds that escrow, and one transfer can fund only one escrow.
The worker submits proof of completion. Nothing moves until the principal approves; then EscrowPulse sends the escrowed USDC to the worker on Solana and returns the transaction.
A funded escrow that reaches its deadline without a release is refunded to the principal in full, platform fee included.
The principal or the worker can dispute a funded escrow. The funds lock for 72 hours, then the escrowed amount returns to the principal.
x402 payments in USDC on Base or Solana, no account needed. Discovery through llms.txt, agents.md, OpenAPI and the x402 Bazaar.
If the principal neither releases nor disputes before the escrow expires, the deposit is refunded to the principal.
Every escrow shares one deposit address, so the deposit reference is what ties your transfer to your escrow. Send exactly total_to_deposit_usd (the amount, the 0.5% fee and any account_setup_fee_usd) as USDC on Solana, with deposit_reference attached to the transfer as a read-only account. A plain transfer to the address without the reference is not credited.
Create response{
"escrow_id": "esc_a1b2c3d4e5f6a7b8",
"status": "awaiting_deposit",
"deposit_address": "GsKr5q9TmiJQcEgUpBp2X6SmvSg3dnXuw2uxYJxgPTk8",
"deposit_reference": "7Yq2mXv1bWcR9pLkT3sNdFhJ8aGuE4zQo6iVyCt5HxKe",
"amount_usd": 500,
"fee_usd": 2.5,
"account_setup_fee_usd": 0,
"total_to_deposit_usd": 502.5,
"solana_pay_url": "solana:GsKr5q9T...?amount=502.5&spl-token=EPjFWdd5...&reference=7Yq2mXv1...",
"expires_at": "2026-10-04T17:00:00.000Z"
}
Wallet: open solana_pay_url in any Solana Pay compatible wallet; it adds the reference for you. Code: append the reference to the transfer instruction's keys.
Programmatic deposit// @solana/web3.js + @solana/spl-token: the reference rides on the USDC transfer
const ix = createTransferCheckedInstruction(payerUsdcAta, USDC_MINT, depositUsdcAta, payer, 502_500_000n, 6);
ix.keys.push({ pubkey: new PublicKey(deposit_reference), isSigner: false, isWritable: false });
Create an escrowcurl -X POST https://escrowpulse.waltsoft.net/v1/escrow \
-H "X-PAYMENT: <x402 payment>" -H "Content-Type: application/json" \
-d '{"amount_usd": 500, "principal_address": "<your Solana address>",
"worker_address": "<worker Solana address>",
"condition": "Deliver the Q3 summary report", "expires_hours": 72}'
Submit proof, then release# Worker: submit proof (the escrow stays funded)
curl -X POST https://escrowpulse.waltsoft.net/v1/escrow/esc_a1b2c3d4e5f6a7b8/release \
-H "X-PAYMENT: <x402 payment from the worker>" -H "Content-Type: application/json" \
-d '{"proof_type": "signed_hash", "proof_data": "sha256:9f86d081884c7d65..."}'
# Principal: approve, and the escrowed USDC goes to the worker
curl -X POST https://escrowpulse.waltsoft.net/v1/escrow/esc_a1b2c3d4e5f6a7b8/release \
-H "X-PAYMENT: <x402 payment from the principal>"
Release and dispute act for one party, so the caller proves which one it is: pay the call with x402 from the principal's or worker's Solana wallet, or add an X-Escrow-Signature header with that wallet's signature of EscrowPulse:release:<escrow_id> (works with Base payments and API keys). Anyone else is refused before any payment is taken.
Full schema: openapi.json โข integration guide: agents.md
See the live x402 challenge an agent gets on its first call: the price and the accepted payment options. The agent pays and retries with an X-PAYMENT header. Free, no payment.
Agents pay per call with x402. People buy a one-time escrow pack with a card and call the same API with a key.
x402 per call: $0.02 to create, release or dispute, $0.005 to read. AWS Marketplace: $0.01 per unit; create, release and dispute use 2 units, reads 1. The 0.5% fee is paid with the deposit and refunded with it if the escrow expires unreleased. If the worker has no USDC account yet, create adds a separate account setup fee (its rent and transaction fee in SOL, plus 25%, minimum $0.10) to the deposit. Recover an API key
One agent funds a sub-task; it approves payment when the agent doing the work delivers.
Fund a vendor report up front and release the payment once the report arrives and checks out.
A person hires an agent contractor with no middleman and no chargebacks; disputes return the funds.
MCP (Amazon Bedrock AgentCore Gateway, no connection header; pass api_key in each call):
https://waltsoft-marketplace-gateway-xncyjgs1uh.gateway.bedrock-agentcore.us-east-1.amazonaws.com/mcp
escrowpulse___createEscrow(amount_usd, worker_address, principal_address, condition, expires_hours, api_key) โ Create an escrowescrowpulse___getEscrow(escrow_id, api_key) โ Escrow statusescrowpulse___releaseEscrow(escrow_id, signature, api_key) โ Principal releases the payoutA2A (Agent2Agent 0.3, JSON-RPC message/send): agent card https://escrowpulse.waltsoft.net/.well-known/agent-card.json
REST: OpenAPI 3 schema ยท agents.md ยท llms.txt
Subscribe with your AWS account and pay on your AWS bill: your API key is delivered to your AWS Secrets Manager. Every successful call is one unit at $0.01, except POST /v1/escrow, /release and /dispute use 2 units ($0.02); errors are never billed. Find Waltsoft EscrowPulse on AWS Marketplace.
POST /v1/escrow returns an escrow_id, the deposit address and a Solana Pay reference. The principal deposits the amount plus the 0.5% fee in USDC on Solana with that reference; the escrow becomes funded. When the principal signs a release, the worker is paid in USDC. An escrow that is not released by its expiry refunds the principal.
Only the escrow's principal releases. The principal or the worker can dispute a funded escrow. Each call carries X-Escrow-Signature: the base58 ed25519 signature of EscrowPulse:<release|dispute>:<escrow_id> made with that party's Solana wallet key; anyone else gets 403 and is not charged.
Deposits and payouts are USDC on Solana mainnet. x402 per-call payments for the API itself can be made on Solana or Base.
Connect to the Amazon Bedrock AgentCore Gateway MCP endpoint and call escrowpulse___createEscrow, getEscrow or releaseEscrow with your api_key.
Yes. The agent card is at https://escrowpulse.waltsoft.net/.well-known/agent-card.json. Its skills create escrows and read their status and history; release and dispute need the party's signature and are REST or MCP calls.
Subscribe on AWS Marketplace and pay per successful call on your AWS bill, or pay per call in USDC with x402 ($0.02 per create, release or dispute; $0.005 per read). AWS Marketplace bills $0.01 per unit: create, release and dispute use 2 units, reads 1. Card packs: $10 = 250 escrows, $25 = 750, $50 = 1,750. Every escrow also carries a 0.5% fee on the amount, and a worker USDC account setup fee (minimum $0.10) when the worker has no USDC account yet. Errors are never billed.