x402-concierge

A meta-agent that composes paid skills. One request describes several errands — dinner, a gift, the transit between them — and you get back a single signed itinerary with every upstream artifact and its payment receipt inline.

USDC on BaseUSDC on SolanaHTTP 402Apache-2.0composes the suiteworks out of the box

Pay on either rail — your client picks. Every 402 challenge lists USDC on Base and USDC on Solana at the same price.

git clone https://github.com/nirholas/x402-concierge && cd x402-concierge
npm install && cp .env.example .env   # pre-filled — runs with no edits
npm run dev                            # http://localhost:4042

Pricing

RoutePriceReturns
POST /plan$0.02 + passthroughSigned composed itinerary — each step's artifact + receipt
GET /configfreeUpstream wiring and wallet status
POST /verifyfreeSignature check for any itinerary
GET /healthzfreeLiveness + accepted rails

Payment rails

USDC on Base

EIP-3009 transferWithAuthorization, signed in the wallet. Nothing on-chain until the facilitator settles.

network
base-sepolia (default) · base
payTo
0x40252CFDF8B20Ed757D61ff157719F33Ec332402
facilitator
https://x402.org/facilitator

USDC on Solana

Fee-sponsored SPL transferChecked. The facilitator's feePayer covers the SOL fee — you need only USDC.

network
solana (default) · solana-devnet
payTo
WwwuGbqHrwF5RG89KhUbmRWEvjnRH9k5kVM5p7T3WwW
facilitator
https://facilitator.payai.network

A rail with no configured address is dropped from the challenge instead of failing the request, so a single-rail deployment is a one-line change.

How a paid call works

1 · RequestPOST /plan with your task list
2 · 402accepts[]: Base and Solana, same price
3 · Paypick a rail, sign, send X-PAYMENT
4 · 200signed itinerary in-body + X-PAYMENT-RESPONSE

Two payment layers

You pay the concierge once, on the rail of your choice. The concierge then pays each upstream service from its own wallet and hands you those settlements back inside the itinerary:

{
  "plan": { "payload": { "steps": [
    { "task": "dinner", "upstream": "…/restaurant/book", "mode": "live",
      "artifact": { "reservationId": "…", "status": "confirmed" },
      "paymentReceipt": { "success": true, "transaction": "0x…", "network": "base-sepolia" } },
    { "task": "gift", "upstream": "…/store/buy", "mode": "fixture",
      "artifact": { "source": "fixture", "orderId": "gift_…" },
      "quotedRequirements": { "accepts": [ … ] } }
  ] }, "signature": "…" },
  "conciergeFee": { "success": true, "rail": "solana", "transaction": "5xY…" }
}

One call, a complete and auditable record of what was bought, from whom, and on which chain.

Works out of the box

The default upstream is x402-agent-sandbox (SANDBOX_URL), and no wallet is required to try it: unpaid upstream calls capture the 402 price quote and return a deterministic fixture artifact marked source: "fixture". Set CONCIERGE_PRIVATE_KEY to make the upstream calls real, and repoint SANDBOX_URL / TRANSIT_URL at any x402 deployment.