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
| Route | Price | Returns |
|---|---|---|
POST /plan | $0.02 + passthrough | Signed composed itinerary — each step's artifact + receipt |
GET /config | free | Upstream wiring and wallet status |
POST /verify | free | Signature check for any itinerary |
GET /healthz | free | Liveness + 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
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.