Concepts

Agentic Marketplace

Pay-per-call AI services, settled in USDC over x402 on Base. Image generation, the CC0 encyclopedia, a market brief, and re-brokered third-party agents. Outputs are CC0.

The catalog is managed

The buy side is live — any agent can pay USDC over x402 to invoke any service below, with no account and no API key. There is no self-serve endpoint to publish your own service: every entry in the catalog is registered by cc0.company.

Catalog

Fourteen services at six price points, all under POST /api/store/agent-services/{slug}/invoke. Every output is CC0. Prices are returned by the live catalog in USDC base units (6 decimals) — read them from GET /api/store/agent-services rather than hard-coding.

SlugPrice (USDC)Kind
sartoshi-gen0.069Image generation — mfer-adjacent NFT in-jokes, thin wobbly ink
darkfarms-gen0.069Image generation — smol pepe frogs, bold outlines, grainy textures
hokusai-gen0.069Image generation — Edo-period polychrome woodblock prints
van-gogh-gen0.069Image generation — post-impressionist heavy impasto
monet-gen0.069Image generation — impressionist soft-focus oils
cc0pedia0.01Data — resolve one CC0 creator / collection / work
cc0pedia-search0.01Data — ranked search across the CC0 database
cc0pedia-verify0.01Data — license oracle: is this contract a documented CC0 work?
cc0pedia-market0.01Data — live token / NFT market for a CC0 asset
cc0-daily-brief0.05Data — top CC0 NFT collections by 24h volume, with narrative
mfergpt-lore0.025Re-brokered mfergpt (synchronous)
mfergpt-ask, mfergpt-mferfy0.055Re-brokered mfergpt (synchronous)
tcgenerate-random1.005Re-brokered TCGenerate — trading card image pinned to IPFS

The five image models are LoRAs fine-tuned by cc0toshi on public-domain corpora. Each carries a prompt_guide_url in its catalog row — cc0.company/skill/{slug}.md. Fetch it before writing a prompt; every LoRA was trained on a specific caption register and skipping the guide costs output quality.

Per-service manifests and JSON schemas: https://cc0.company/.well-known/ai-tool/{slug}.json.

Sync vs async

  • Async — the five image models. invoke returns 202 with a job_id; poll it.
  • Synchronous — cc0pedia, cc0-daily-brief, mfergpt, TCGenerate. The result is in the same response, no polling.

Invoke (x402 v2)

Call without payment to receive the 402 challenge, sign an EIP-3009 USDC transferWithAuthorization, retry with the signed payload. The header is PAYMENT-SIGNATURE (legacy X-PAYMENT still accepted).

  • Network — Base mainnet (eip155:8453)
  • Asset — USDC 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913
  • EIP-712 domain — { name: "USD Coin", version: "2", chainId: 8453, verifyingContract: <USDC> }
  • Facilitator — https://api.cdp.coinbase.com/platform/v2/x402 (Coinbase CDP)

Never hard-code payTo or the amount

payTo and maxAmountRequired come from the live 402 response. And USDC is only for these marketplace services — the NFT collection endpoints are paid in ETH. Never send USDC to an NFT endpoint.
bash
# Browse — public, free
curl https://cc0.company/api/store/agent-services

# Invoke — first call returns 402 with the requirement
curl -i -X POST https://cc0.company/api/store/agent-services/sartoshi-gen/invoke \
  -H "Content-Type: application/json" \
  -d '{"prompt": "mfer shrugging at a red candle"}'

# Sign + retry
curl -X POST https://cc0.company/api/store/agent-services/sartoshi-gen/invoke \
  -H "PAYMENT-SIGNATURE: <base64 v2 payload>" \
  -H "X-Agent-Name: your_handle" \
  -d '{"prompt": "..."}'
# → 202 { job_id, status: "processing", poll_url, agent }

Auto-registration on first paid invoke

A wallet that has never paid cc0.company gets an agent record created for it. The 202 response's agent object carries a freshly issued api_key — persist it, only its hash is stored. Send X-Agent-Name: your_handle (3-30 chars, [a-z0-9_]) on that first invoke to choose your name; otherwise you get agent_<first-8-hex-of-wallet> and can rename later. See Agents.

Poll for result (async services)

bash
curl https://cc0.company/api/store/agent-services/jobs/<job_id>

# While generating: { "job": { "status": "processing", ... } }
# When done:
# { "job": { "status": "succeeded",
#            "output_url": "https://...mypinata.cloud/ipfs/Qm...",
#            "output_expires_at": null,
#            "ipfs_persisted": true,
#            "ipfs_url": "ipfs://Qm...",
#            "ipfs_hash": "Qm..." } }

IPFS pinning is automatic — a job is pinned before its status flips to succeeded, so the output_url you get is the IPFS gateway URL and output_expires_at is null. No follow-up call needed. Poll every 2-5 seconds; generations typically finish in 5-30 seconds.

Failure + refund

Managed generations auto-retry once. A second failure triggers an automatic USDC refund — the job ends in status: "refunded" with refund_tx_hash populated. On the synchronous services an upstream failure (or a cc0pedia lookup that resolves nothing, which returns 404) auto-cancels the payment instead: you are never charged for a call that returned nothing.

Human path

Browsers cannot sign an EIP-3009 authorization the same way, so the storefront uses POST /api/store/agent-services/{slug}/pay-and-invoke: the client submits a plain USDC transfer onchain and posts { prompt, tx_hash }; the backend verifies the transfer and creates the job. A 425 means the transaction is still pending — retry.

Discovery

The catalog auto-registers with the x402 Bazaar via the Coinbase CDP facilitator after the first paid settlement in production. The settle response carries an EXTENSION-RESPONSES header (accepted / processing / rejected) telling you whether your endpoint will be indexed. Verify at agentic.market. A flat overview also lives at cc0.company/llms.txt.

The same catalog is exposed as MCP tools — see MCP Server.

Fee

The buyer pays exactly the listed price. The platform retains 5%, which covers inference on the managed models. See Platform Fees.