Platform concepts (for agents)
Cassette is a discovery platform for web games: it lists games, shows them in a sandboxed frame, and offers players usernames, a library and a wallet front end. It doesn't host third-party builds and doesn't sell games. Each developer hosts their own build and sells through their own storefront contract. Publishing is free.
| Term | Meaning | You do |
|---|---|---|
| Game | A listed web game with a unique slug (/g/<slug>) and a manifest (cassette.json). Cassette stores a pointer: the play URL on the developer's host (or ar://<id> for an Arweave build), mirrors, and the build hash | register it: listGame / publishBuild relayed (https://cassette.gg/agents/publish-game.md) |
| Studio (profile) | The developer account. One per human, owned by the human's wallet | the human approves your link once |
| Operator | A key your agent makes and holds (protocol.md §2). Publishes the studio's games; operates the storefront's listings and seller record. Can't move money, refund, or change ownership, payout or refund policy | pairing: POST /v1/agent-links (protocol.md §3) |
| Storefront | The developer's own contract (ERC-1155 on Polygon) that sells licences and items, created from Cassette's admin-less factory and owned by the human's wallet. An immutable clone: Cassette has no role in it and can't change, pause or refund it | a sign link the human signs (https://cassette.gg/agents/publish-game.md, step 7) |
| Seller record | /.well-known/cassette.json on the developer's origin: who sells (name, business or private, contact), the storefronts, and the adopted documents with their sha256; its hash is on chain | https://cassette.gg/agents/set-up-seller.md; on chain with setSellerRecord |
| Documents | The developer's terms of sale, refund policy, privacy notice, imprint (business) and cancellation form, generated from templates and adopted by the human | https://cassette.gg/agents/set-up-seller.md (the human adopts by signing) |
| Licence | A paid game's token (at most 1 per player) in the developer's storefront | pricing.type: "paid" |
| Item | A purchasable thing in a game (skin, coins), a listing in the developer's storefront | items in the manifest |
| Paywall | The game's own sales page (paywall.js), on the developer's origin: it reads the storefront and asks for payment | copy paywall.js (https://cassette.gg/agents/add-paywall.md) |
| Username | @name (3-20 chars a-z 0-9 _) owned by the player, passed into every game as cassette.user.username | from the play-frame bridge (paywall.md) |
| Session token | Short-lived Cassette-signed proof of who the player is, for your backend. Identity only, never access | from the bridge; verify against GET /v1/jwks (https://cassette.gg/agents/verify-ownership.md) |
- Pricing types:
free,free-with-items,paid. Prices are USD with at most 2 decimals and are paid as the same amount of USDC on Polygon; players add USDC to their wallet themselves (a card top-up inside Cassette is coming). Players pay the developer's storefront from the game's paywall: inside Cassette with the Cassette wallet, elsewhere with their own wallet. Buying needs no Cassette account. - Refunds: each sale stays in the storefront (escrow) for the developer's self-refund window (template 6 hours,
0–14 days); the buyer can refund themselves inside it. After it, anyone releases the payment to the developer. The
developer can refund any sale at any time. Cassette's opt-in abuse registry can only switch off self-refund (
https://cassette.gg/agents/handle-refunds.md). - Fees: no fee to publish. A referral fee, set in the developer's own storefront: 0% during launch, and only on sales Cassette referred.
- Hosting: in the developer's own account: Cloudflare Pages, Netlify, Vercel, GitHub Pages, their own domain, or
IPFS through their own pinning account (a mirror for a game that sells: its seller record needs a stable origin), or
Arweave, coming soon (permanent, no account; the developer pays the storage; Cassette never pays for or sponsors it).
Prefer a host the human is already logged into (
https://cassette.gg/agents/host-game.md, "Detect first").hosting.type: "hosted"(Cassette serves the build) is legacy, for Cassette's own games only. - Access: the game's paywall and the developer's backend read the storefront on the chain. Cassette doesn't gate a storefront game. Removing a game from Cassette removes it from discovery only.
- Devices: games declare
capabilities(phone,tablet,desktop, input types,multiplayer-*,offline,audio). Explore pages filter by the visitor's device. - Community listings: games found on the public web are listed by the platform's crawler; authors can claim them
(
https://cassette.gg/agents/claim-listing.md). - Legacy: Cassette's own games may still use the legacy Checkout, Licenses and Items contracts and hosted builds. Don't use that path for a developer's game.
Read API: https://cassette.gg/v1/* (no key). Contract addresses: GET https://cassette.gg/v1/config → deployment
(storefrontFactory, storefrontRouter, …). Writes: signed by your key and relayed gas-free, or signed by the human
through a sign link (https://cassette.gg/agents/protocol.md).