SYSTEM ONLINE

cc0 agentic marketplace

pay-per-call x402 services · base · usdc

Built for AI agents

(and the humans who deploy them). A catalogue of CC0-output, fine-tuned image models you can pay-per-call in USDC over x402 v2. No accounts, no API keys, no rate limits beyond your wallet balance. Outputs are public domain — reuse them anywhere without attribution.

📦 Install the cc0.company skills bundle

Four scenario-driven skills your agent can install with one command — image generation (5 LoRAs), ERC1155 mint, x402 payments, CC0 asset marketplace. Each skill is a focused walkthrough; together they cover every cc0.company capability.

git clone https://github.com/cryptomfer/cc0company.git ~/.claude/skills/cc0company

Source on GitHub: cryptomfer/cc0company — skills are CC0-licensed, same as the platform's image outputs.

Connect over MCP (Model Context Protocol)

The entire catalogue is callable as MCP tools at https://cc0.company/api/mcp. Every tool call is a paid x402 request (USDC on Base) — your x402-enabled MCP client pays per call. Includes the cc0pedia read API (cc0pedia-search, cc0pedia-verify, cc0pedia-market, cc0pedia) plus every image model and data service. initialize, tools/list and ping are free.

Add the MCP server

# Claude Code
claude mcp add --transport http cc0pedia https://cc0.company/api/mcp

# Cursor — .cursor/mcp.json
{ "mcpServers": { "cc0pedia": { "url": "https://cc0.company/api/mcp" } } }

Quick start

Three calls: discover the catalogue, pay-and-invoke a model, poll until the image is ready. Paste this into your agent runtime, replace the slug, and you have a working integration.

# 1) Discover what's available
curl https://cc0.company/api/store/agent-services

# 2) Invoke without payment — server replies 402 with the challenge
curl -i -X POST https://cc0.company/api/store/agent-services/hokusai-gen/invoke \
  -H "Content-Type: application/json" \
  -d '{"prompt":"crashing wave at sunrise with Mount Fuji on the horizon, three fishing boats riding the swell, polychrome woodblock print with deep Prussian blue sky and pale cloud bands at the top"}'

# 3) Sign the USDC authorization, retry with the PAYMENT-SIGNATURE header
curl -X POST https://cc0.company/api/store/agent-services/hokusai-gen/invoke \
  -H "PAYMENT-SIGNATURE: <base64-encoded-signed-payload>" \
  -H "Content-Type: application/json" \
  -d '{"prompt":"crashing wave at sunrise with Mount Fuji on the horizon, three fishing boats riding the swell, polychrome woodblock print with deep Prussian blue sky and pale cloud bands at the top"}'
# → 202 { "job_id": "agentservicejob_xxx", "poll_url": "https://..." }

# 4) Poll until done
curl https://cc0.company/api/store/agent-services/jobs/agentservicejob_xxx
# → { "job": { "status": "succeeded", "output_url": "https://replicate.delivery/..." } }

Need the x402 signing library? See skill.md for TypeScript / Python / Go examples using @x402/fetch and friends.

Per-model prompt guides

Every model in the catalogue ships its own prompt skill at /skill/<slug>.md — surfaced as prompt_guide_url on each catalogue entry. The skill documents the LoRA's training caption register and the canonical templates that produced it. Outputs are 2-3× better when prompts match.

If you're deploying an AI agent on this catalogue:

Tell your agent to download the per-model skill file (e.g. https://cc0.company/skill/sartoshi-gen.md) and load it into its skill registry — same way it loaded the main skill.md. Without the per-model file, your agent invents prompts from scratch and the LoRA produces generic, low-fidelity outputs. With it, your agent uses the exact templates the training data was captioned with.

Read prompt_guide_url from the catalogue, fetch every guide once

# Discover the catalogue and pull every prompt guide up-front
CATALOGUE=$(curl -s https://cc0.company/api/store/agent-services)
echo "$CATALOGUE" | jq -r '.services[].prompt_guide_url' | while read url; do
  echo "=== $url ==="
  curl -s "$url"
done

# Then when you invoke a model, send a prompt that matches its register.

The current per-model guides: sartoshi-gen · darkfarms-gen · hokusai-gen · van-gogh-gen · monet-gen. New models added later will appear here automatically — agents should re-read the catalogue periodically.

Endpoints

MethodPathAuthDescription
GET/store/agent-servicesnoneList the active catalogue (name, slug, price, creator).
GET/store/agent-services/{slug}noneSingle-service detail (trigger word, price, payout wallet).
POST/store/agent-services/{slug}/invokex402 v2Pay → start a generation. Returns 202 + job_id.
POST/store/agent-services/{slug}/pay-and-invokedirect USDC txHuman path — pay via a USDC transfer first, then submit { prompt, tx_hash }.
GET/store/agent-services/jobs/{jobId}noneLazy-poll until status is succeeded, failed, or refunded.
POST/store/agent-services/jobs/{jobId}/persistx402Pin the image to IPFS so the URL is permanent (CID).

All endpoints are served under https://cc0.company/api through the platform proxy. The base URL never changes between environments — your agent uses the same string in dev, staging, and production.

POST /jobs/{jobId}/persist — pin the image to IPFS (0.01 USDC)

# Sign a 0.01 USDC authorization to /persist, just like /invoke
curl -X POST https://cc0.company/api/store/agent-services/jobs/agentservicejob_xxx/persist \
  -H "PAYMENT-SIGNATURE: <base64-encoded-signed-payload>"
# → 200 { "ipfs_url": "https://ipfs.io/ipfs/Qm...", "ipfs_hash": "Qm..." }

POST /:slug/pay-and-invoke — humans / wallets without x402 SDK

# 1) Send 0.069 USDC on Base to the service's creator_wallet_address
#    (read it from GET /store/agent-services/{slug}).
# 2) POST the prompt + the tx_hash:
curl -X POST https://cc0.company/api/store/agent-services/hokusai-gen/pay-and-invoke \
  -H "Content-Type: application/json" \
  -d '{"prompt":"<your prompt>","tx_hash":"0xabc...123"}'
# Returns 425 if the tx is still pending — retry with backoff. 202 once mined.

x402 v2 payment protocol

The first request to a paid endpoint returns 402 Payment Required with a JSON challenge. Sign a USDC ERC-3009 authorization for the requested amount and retry with the PAYMENT-SIGNATURE header. The Coinbase CDP facilitator verifies, settles on-chain, and your handler then runs as if it were authenticated.

Protocolx402 v2
FacilitatorCoinbase CDP — https://api.cdp.coinbase.com/platform/v2/x402
NetworkBase mainnet — eip155:8453 (CAIP-2)
AssetUSDC — 0x833589fCD6eDb6E08f4c7C32D4f71b54bdA02913 (6 decimals)
Schemeexact (fixed price per call)
Invoke price0.069 USDC per image
Persist price0.01 USDC for IPFS pin
payToRead from the live 402 challenge — never hard-code
SettlementAfter your handler returns. A 4xx/5xx auto-cancels — buyer not charged.

Important: the agent never needs to know the price ahead of time. Always read maxAmountRequired and payTo from the live 402 challenge — they're the source of truth. Hard-coded values will desync when a service updates its pricing.

Discovery — agentic.market

Every paid endpoint here is automatically indexed by the Coinbase x402 Bazaar after its first successful settlement. agentic.market reads from the same Bazaar index — so once an agent has paid us at least once, the entire catalogue surfaces on https://agentic.market and at the CDP discovery API. No registration form, no approval step.

Diagnostic: agentic.market validator

Before doing your first paid settle, sellers can confirm the 402 response shape + Bazaar indexing status at agentic.market/validate. The validator is a diagnostic — it does not register your endpoint; the first paid settle through the CDP facilitator does that.

Method: POST
URL: https://cc0.company/api/store/agent-services/hokusai-gen/invoke

Verify we're indexed (CDP discovery API)

# After our first mainnet settle, this returns every cc0.company service:
curl "https://api.cdp.coinbase.com/platform/v2/x402/discovery/merchant?payTo=<X402_RECEIVER_ADDRESS>"

# Semantic search across the whole Bazaar:
curl "https://api.cdp.coinbase.com/platform/v2/x402/discovery/search?query=cc0+image+generation&network=eip155:8453"

# Browse from agentic.market:
curl "https://agentic.market/v1/services/search?q=cc0"

The CDP catalogue refreshes on a ~6-hour schedule. Newly-deployed services may take a refresh cycle to appear after their first settle. Re-run the validator if a service appears missing — it will show whether the issue is a malformed 402 challenge or just an indexing-cycle delay.

Status codes & job states

Code / statusMeansWhat the agent does
202Generation accepted, job is processing.Poll GET /jobs/{job_id} every 2–5 s until status is terminal.
400Invalid prompt or missing buyer wallet in the payment payload.Payment is auto-cancelled — fix the request and re-invoke.
402Payment required. The body carries the x402 challenge.Sign the USDC authorization and retry with the PAYMENT-SIGNATURE header.
425Direct-USDC tx_hash not yet confirmed (pay-and-invoke only).Retry with exponential backoff (Base block ~2s; max 60s).
404Service slug not found, or slug is paused.Check the catalogue with GET /store/agent-services.
5xxServer failure before the job was created.Payment is auto-cancelled (buyer not charged). Retry once with idempotent input.
succeededJob done — output_url is the ephemeral image.Download it, or POST /persist within ~55 min to pin to IPFS.
refundedGeneration failed after auto-retry. refund_tx_hash is on-chain.Nothing to do — the USDC is back in your wallet.
failedGeneration failed AND refund failed (rare).Contact ops with the job_id. Backend logs the row for manual sweep.
Auto-refund. The backend retries every failed generation once. If it still fails, the USDC is refunded automatically. Your agent never loses money on a failed run.

Live playground

Pick a model below; the commands update with that model's slug, trigger word, and an in-style example prompt. Copy the block and run it from your terminal — no SDK needed for the first 402 probe.

No services in the catalogue yet — initialize it from the AI Studio tab first.

Full reference

Machine-readable docs for autonomous agents: