Cookie — human Privy session (forwarded as _medusa_jwt)
PAYMENT-SIGNATURE / X-PAYMENT — x402 settlement
Chains
Anything that touches the launchpad is multi-chain. Endpoints that need to know which chain take a chain parameter — the slugs are base (8453), ethereum (1) and robinhood (4663). The registry stores the chain on each launch row, so a launch recorded on one chain is never confused with another. Two exceptions: the B20 endpoints are Base-only, and paired launches are only possible on Base and Robinhood Chain.
Merkle proof for an allowlisted address. Leaf = keccak256(abi.encodePacked(address, maxMint)), sorted pairs
POST
/api/store/nft-store/report-mint
None
Record a completed onchain purchase so it appears in the buyer's collection
POST
/api/store/nft-store/claim/:tokenId
None
Submit shipping info for a receipt token
POST
/api/store/nft-store/claim/:tokenId/confirm
Session
Confirm the claim. Bound to the buyer wallet the caller owns
GET
/api/store/nft-store/orders
None
Order lookup
POST
/api/merchant/stores/register-nft-store
Session
Register a freshly deployed CC0Store contract against a merchant store
Confirming an order burns the receipt token — the v9 contracts are burn-on-claim, which is why getClaimData and isClaimed no longer exist. Post-claim state lives in the ProductClaimed event and the backend order record.
Phases on ERC1155 v11 are stored ONCHAIN per token via setTokenPhases(tokenId, Phase[]) from the creator wallet. No DB endpoint. See Fully Onchain NFTs → Phases.
Token Launch
A launch is an onchain deployToken call to the factory for the chosen chain — the signer sends it, there is no "deploy" endpoint. Two things are HTTP: the optional gas-sponsored relay, and the registry write that makes the token visible across the platform. Every launch carries a flat 0.0005 ETH launch fee: a plain transfer to the platform treasury (NEXT_PUBLIC_TREASURY_ADDRESS) on the launch chain, sent before the deploy. The sponsored relays require its hash as launchFeeTxHash and verify it onchain (recipient, amount, success, under 24h old, never used by another launch) before spending sponsor gas; the registry write records it as launch_fee_tx_hash.
Method
Endpoint
Auth
Purpose
POST
/api/cc0strategy/sponsor-launch
Session
Gas-sponsored ERC-20 launch — the platform wallet signs and pays, the user keeps every control (reward recipient, vault/airdrop admin). Base / Ethereum / Robinhood. Gated by a master switch; fails closed
POST
/api/b20/sponsor-launch
Session
Same, for a B20 launch. Base only
GET / POST
/api/store/token-launches
None
Cross-chain launch registry. POST records a launch (CORS-open so the SDK can register from a creator's own site); GET filters by creator_wallet, protocol, status, token_address, limit, offset
GET / PATCH
/api/store/token-launches/:idOrAddress
None / wallet signature
Single launch — includes chain, split_type and the paired-token fields. PATCH updates image, description and socials; the backend requires an X-Owner-* signature whose signer is the launch's creator_wallet
POST
/api/store/launchpad/pin-image
None
Pin a token image to IPFS so the onchain image URI is content-addressed. Accepts multipart file or JSON { url }
POST
/api/cc0strategy/airdrop-tree
None
Build the launch airdrop merkle tree from an NFT collection's holders. Returns merkleRoot + entries
GET
/api/store/airdrops/:tokenAddress/proofs
None
Claim proofs for an airdrop
GET
/api/robinhood/tokenized-stocks
None
Robinhood's official tokenized stocks (chain 4663), each verified from the issuer's own Deployed logs — the pairing catalogue for a paired launch there
POST
/api/store/coins/create
Session
Store-currency deploy used by the NFT-store wizard (server-side, provider-dispatched). Not the launchpad
GET
/api/store/token-prices
None
Token prices (batch)
GET
/api/store/realtime/prices/:address
None
Realtime price
GET
/api/store/realtime/ohlcv/:address
None
OHLCV candles
GET
/api/store/realtime/swaps/:address
None
Swap volume + LP
Holder rewards
Method
Endpoint
Auth
Purpose
GET
/api/cc0strategy/nft-holders?contract=&chain=
None
Holder count, unioned across every same-chain contract the collection spans, plus primary_contract
Resolves maxEligibleTokenId for the distributor. Returns success:false rather than guessing when the collection is not sequential
POST
/api/store/nft-holders/recipients
None
Snapshot a collection's holders into a ready-to-use recipient list (Base or Ethereum) — the primitive behind "airdrop to every holder of X"
Same-chain, server-decided
The eligibility ceiling is derived server-side from the collection on the launch chain, and a collection that is not on the launch chain is rejected before any gas is spent — the distributor calls ownerOf locally, so a cross-chain link could never be claimed. A client-supplied ceiling is never trusted.
Fees, staking and vaults
Method
Endpoint
Auth
Purpose
GET
/api/rewards/creator-fees
None
Total fees generated per token, branching on the token's protocol. Takes parallel arrays incl. pairedTokens / pairedPrices / pairedDecimals for paired launches
GET
/api/cc0strategy/token-cumulative-fees
None
All-time fees a token generated for its creator (claimed + claimable). Pass &paired=0x… on a paired launch — its fees never touch WETH
GET
/api/cc0strategy/staking-fees
None
All-time WETH distributed to $cc0company stakers, plus a cumulative series. Rewards bridged from Ethereum and Robinhood Chain are already included
GET
/api/cc0strategy/stakers
None
Staker leaderboard, read from chain
GET
/api/cc0strategy/vaults?address=
None
Every locked-supply vault a wallet can claim, across chains and suites. Reads are public; the claim itself is signed client-side
GET / POST
/api/cc0strategy/robinhood-bridge
None
GET reports whether bridging is configured; POST pushes the Robinhood staking escrow's balance to the Base pool on demand. Executed by the operator key server-side — 503 without it, 400 below the minimum
Agentic Marketplace (buy side only — sell paused)
Method
Endpoint
Auth
Purpose
GET
/api/store/agent-services
None
Browse models
GET
/api/store/agent-services/:slug
None
Model detail
POST
/api/store/agent-services/:slug/invoke
x402 v2 USDC
Generate
POST
/api/store/agent-services/:slug/pay-and-invoke
None
Human path — the client has already sent the USDC transfer and posts { prompt, tx_hash }. Returns 425 while the tx is still pending, so poll
GET
/api/store/agent-services/jobs/:jobId
None
Poll job
MCP
Method
Endpoint
Auth
Purpose
POST
/api/mcp
x402 per call
Stateless MCP Streamable-HTTP endpoint (JSON-RPC 2.0). tools/list mirrors the live agent-services catalog; tools/call relays to the matching invoke route and passes the x402 challenge straight back
initialize, tools/list and ping are free. Every tools/call is paid: the first attempt returns HTTP 402, your x402 client signs the USDC authorization and retries. See MCP Server.
Upload
Method
Endpoint
Auth
Purpose
POST
/api/upload
API key
IPFS upload (Pinata)
POST
/api/upload/media
API key
Media upload (R2)
POST
/api/upload/metadata
Bearer
Pin product metadata JSON
Feed
Method
Endpoint
Auth
Purpose
GET
/api/store/feed
None
Global feed (paginated)
GET
/api/store/feed/events/:id
None
Event detail
POST
/api/store/feed/:id/like
Session
Like
POST
/api/store/feed/:id/repost
Session
Repost
For dense agent integration use cc0.company/skill.md — same endpoints, denser format, drop-in for LLM context.