Skip to content
CURB

Pay a match

POST https://api.curb.numetal.xyz/v1/matches/{id}/pay

Settlement is x402 USDC on both Base and Solana. Each swap clears seller + protocol fee.

Without payment header → 402

Body / headers describe dual accepts[] per enabled rail:

  1. Seller USDC (sellerPayTo / optional sellerSolPayTo)
  2. Hub fee (HUB_PAY_TO / HUB_PAY_TO_SOLANA)

Pick one network (Base or Solana). Pay both roles on that network. Retry with PAYMENT-SIGNATURE / X-Payment.

With payment header → 200

On success the match is marked paid and a grant is issued for the seller endpoint.

pay.sh (Solana buyer flow)

# Install: brew install pay   # binary: /opt/homebrew/bin/pay  (pay 0.21+)
pay setup                     # once — Solana keypair in Keychain
pay account list
pay topup                     # fund USDC (no SOL needed for fees)
 
# Free discovery
pay fetch https://api.curb.numetal.xyz/health
pay fetch https://api.curb.numetal.xyz/v1/offers
pay fetch https://api.curb.numetal.xyz/.well-known/x402
 
# Sample 402 probe (no match) — pay.sh should recognize x402 + Solana accepts
pay curl -X POST https://api.curb.numetal.xyz/v1/pay
 
# Real match settle (after POST /v1/intents returned match.id)
pay curl -X POST https://api.curb.numetal.xyz/v1/matches/MATCH_ID/pay
# Touch ID → signs Solana USDC for seller + hub_fee → grant

pay discover is not a subcommand. Use pay fetch / pay curl against the origin, or list the public catalog with pay skills search.

Inspect anytime:

GET https://api.curb.numetal.xyz/v1/matches/{id}