Docs
Getting started
How to buy, sell, and connect an agent. No SDK.
Buying
- Browse Explore or type in the search box. Results rank by title first. Prefix
@handleto stay in one shop. Cards show price, type, rating, and version. Free packs carry a Free badge; filter them with the Free chip. - Paid packs: press Buy with Stripe. Checkout uses automatic payment methods: cards, Link, Apple Pay, and Google Pay when those are on in the Stripe Dashboard. ACH (US bank) if you enable it there. Apple Pay on Stripe hosted Checkout uses checkout.stripe.com. Register filemarket.app in Stripe if you later serve Apple Pay on the shop host itself. No PayPal. You can add a promo code or send the pack as a gift.
- Or fund Agentic Pay once. An agent with your
fmb_token spends that balance. Sleep buys need a funded wallet. Nobody can withdraw. - Free packs: press Get free. No Stripe. Sign in so the claim writes a $0 receipt and library entitlement, the same record as a paid purchase.
- The success page gives you a signed download link (one hour, re-mintable from your library forever). Every future version is included.
Library, seats, subscriptions
Your library lists every purchase with versions, changelogs, and an entitlement key (FM-XXXX-XXXX-XXXX) anyone can verify at /api/v1/entitlements/verify without learning who you are.
- Seats. Share any purchase with up to three people. Invite an email, send them the link, and the pack appears in their library when they sign in with that email. Revoke any time. No extra charge.
- Subscriptions. Monthly packs show their status in the library. Manage or cancel opens the Stripe Customer Portal; access lasts until the paid period ends.
- Claim links. From a receipt or the success page, copy a 7-day link that attaches the purchase to whichever account opens it (for example the one your agent's buyer token belongs to). No keys to retype.
- Exports. Download your library as CSV from the library page.
- Notifications. New versions, saved-search matches, seller updates, and seat acceptances land in Notifications.
Selling
Sign in. Sell. Create shop + agent prompt.
Base URL, MCP, fmk_ token, steps. Paste into your bot.
Needed for paid packs. Free listings skip this.
Upload, scan, price, live URL. Then versions and sales.
- Open Sell and connect Stripe Express for paid payouts. Free listings do not need a charge.
- Publish a pack: zip, PDF, or a single file, up to 100MB. Screenshots are PNG, JPEG, WebP, or GIF (4MB each). Inside a zip, source trees, scripts, configs, markdown, JSON, and small binaries shipped with source are fine; we do not need a special handler per extension. Packs over a few megabytes upload in parts to R2. Automated safety checks run first (zip structure, blocked file types, zip-slip and zip-bomb, shell and exfiltration patterns, optional VirusTotal). Quarantined uploads never go live. Oversized packs return HTTP 413 with a clear size message.
- Software and app listings must include readable source (in the zip, or a dedicated source upload). A pack that is only .exe / .dmg / .msi / bare .app stays quarantined. Agent, document, and media packs are exempt. Listings that pass show a Source included badge. The same source rule applies to free software.
- Ship versions with changelogs; buyers get them free. Add screenshots, tags, an optional license note, a demo video, coupons, shelves and bundles, and storefront updates.
- Mark a listing Coming soon to collect a notify-me list, or Monthly to bill through Stripe Billing (monthly cannot be $0).
Embed a buy button
Every live listing has two copy-paste snippets under Sell → your listing → Embed a buy button. Neither contains a key, token, or price you have to keep in sync; both read the live listing.
Link card
<a href="https://filemarket.app/s/your-handle/your-pack?utm_source=embed&utm_medium=card" target="_blank" rel="noopener">
<img src="https://filemarket.app/embed/card/your-handle/your-pack.svg" alt="Buy on File Market" height="22" />
</a>Script button
<script async src="https://filemarket.app/embed/button.js" data-listing="your-handle/your-pack"></script>- CSP. Allow
script-src https://filemarket.appandconnect-src https://filemarket.appfor the script button; the link card only needsimg-src https://filemarket.app. - Themes. Add
data-theme="light"to the script tag for light backgrounds. - Referrals. A
?ref=handleon your page is passed through to checkout so referral credit still applies. - Tracking. Links carry
utm_source=embed; nothing else is tracked and no cookies are set on your site.
Agents: REST
Browse and open Stripe Checkout with no key. Filter bot packs with ?type=bots (alias: agent). Sleep buys need a funded Agentic Pay wallet and a buyer token. Underfunded returns 402. Card data never touches an agent. Free packs return payment: "free" immediately when you send buyer_email or a buyer token.
curl -s https://filemarket.app/api/v1/catalogcurl -s -X POST https://filemarket.app/api/v1/checkout -H 'content-type: application/json' -d '{"slug":"inbox-triage","buyer_email":"you@example.com","agent_id":"my-agent"}'curl -s https://filemarket.app/api/v1/checkout/SESSION_ID -H 'x-agent-id: my-agent'Invite a human
If the human does not have an account yet, POST /api/v1/accounts/invite with their email and an optional handle. Never send a password. That creates a pending account the agent can attach checkouts to. Unauthenticated callers always get the same generic confirmation and never receive claim_url. When mail is on, the human gets the link in their inbox. When mail is off, a seller token or a signed-in seller/admin can receive claim_url once to hand over. The human opens /claim-account, sets a password or signs in with X, and then mints their own fmb_ / fmk_ tokens. Until they claim, the agent has no session and no seller powers.
curl -s -X POST https://filemarket.app/api/v1/accounts/invite -H 'content-type: application/json' -d '{"email":"you@example.com","handle":"yourname"}'Tickets and wallet
With a buyer token: GET /api/v1/tickets lists the human's tickets. POST /api/v1/tickets opens one (kind, message, optional order or sku). POST /api/v1/tickets/{id}/reply adds a reply. POST /api/v1/wallet/topup with {"amount_cents":2500} returns a Stripe Checkout URL for the human. Cards stay in Stripe.
Prompt to paste into any assistant
Shop File Market for me. It is a marketplace for agent packs, software, and files (https://filemarket.app). Checkout is held on Stripe; downloads unlock after payment. No API key needed. You never see or enter card numbers.
Buy for me:
1. GET https://filemarket.app/api/v1/catalog (filter: ?type=bots|agent|software|file). Details: GET https://filemarket.app/api/v1/products/<slug>.
2. Compare and pick the best fit for my use case. Ask me one question if unclear.
3. If I funded Agentic Pay, GET https://filemarket.app/api/v1/wallet with my buyer token, then POST https://filemarket.app/api/v1/checkout with that token and {"slug":"<slug>","agent_id":"<your name>"}. payment "wallet" returns download_url. A 402 underfunded means I need to top up. Sleep buys need that wallet.
4. If the wallet is empty and I am here, POST https://filemarket.app/api/v1/checkout with JSON {"slug":"<slug>","buyer_email":"<my email>","agent_id":"<your name>"} and give me checkout_url. I pay on Stripe. Optional: gift_email, notify_url, coupon.
5. After a human Checkout, GET https://filemarket.app/api/v1/checkout/<session_id> (header x-agent-id) until status is "paid", then give me download_url.
Sell for me:
6. I will give you a seller token from https://filemarket.app/sell. Use "Authorization: Bearer <token>". POST https://filemarket.app/api/v1/uploads (raw file, headers x-filename and content-type) then POST https://filemarket.app/api/v1/listings with title, slug, type, description, price_cents (50 to 149900), file_key. New versions: POST https://filemarket.app/api/v1/listings/<id>/versions with file_key and changelog. Steps: https://filemarket.app/llms.txt
Rules: only recommend products present in the catalog response. Never invent slugs, prices, or features. Quote price_display exactly. If you cannot make HTTP requests, give me the curl commands or open https://filemarket.app and stop at the Stripe page.Agents: MCP
Remote Model Context Protocol server at POST https://filemarket.app/mcp (JSON-RPC 2.0: initialize, tools/list, tools/call). Add it to Claude, Cursor, ChatGPT, or any MCP client:
{
"mcpServers": {
"file-market": {
"url": "https://filemarket.app/mcp"
}
}
}Tokens and scopes
| Token | Where | Can | Cannot |
|---|---|---|---|
fmb_… buyer | Account | List the library, mint download links, debit Agentic Pay, open a wallet top-up Checkout for the human, read checkout status, verify keys, manage seats, open and reply to tickets | Withdraw, sell, change the account |
fmk_… seller | Sell | Upload, create and edit listings, publish versions, post updates, read sales | Move money, change payouts, act on other sellers |
fmc_… helper | Invited from Sell → Helper access, minted on Account | Upload, create and edit listings, publish versions, trash and restore, read the shop profile | Sales, payouts, Stripe, storefront updates, tickets, tokens (403) |
| none | Browse, search, invite a human (POST /api/v1/accounts/invite, generic confirmation only), open a checkout, poll status with the same agent_id | Anything account-scoped. Invite never returns claim_url, never sets a password, and never opens a session as the human. |
Safety and refunds
- Every upload is scanned before it can be downloaded; results show as a badge on the listing. Checks are automated and not a guarantee, so read the file list and reviews. Packs may be up to 100MB; screenshots stay 4MB.
- Source for software. Application listings must include readable source (dedicated upload or a zip with source, README, or package manifests). A pack that is only .exe, .dmg, .msi, or a bare .app stays quarantined. Common dev contents inside a zip (source trees, scripts, configs, markdown, JSON, small binaries with source) are fine. Bot packs, documents, and media are exempt.
- Zip checks cover path traversal (zip slip), extreme compression (zip bombs), blocked types, and text heuristics for shell pipes and credential exfil. VirusTotal is optional when a key is configured.
- Downloads are short-lived signed links through the Worker; packs are never public objects.
- Refunds and problems: open a ticket from Support or from the order in your library. Sellers see tickets on their dashboard; File Market can step in.
- Report a listing or seller from its page. Reports go to the seller and the platform queue.
Search and sharing
- Every public page has a unique title, meta description, canonical URL, Open Graph and Twitter card, and crawlable HTML (not an empty JS shell).
- Listings emit Product or SoftwareApplication, Offer, BreadcrumbList, and FAQ JSON-LD when those fields exist. Shops and collections emit ItemList. Home emits Organization and WebSite with SearchAction.
/sitemap.xmllists home, explore facets, docs, leaders, /updates, live listings, shops, collections, and /media with lastmod and priority./robots.txtallows those pages and disallows account, login, checkout, saved lists, claim links, and download internals.- Share cards for listings, shops, and collections are generated at
/og/s/{handle}/{sku}.png,/og/@{handle}.png, and/og/c/{slug}.png. Site-wide cards stay at/media/og/v1/card.png. The File Market mark is the same icon as /media/brand/icon.svg and /media/brand/icon-4096.png on the nav, favicon, OG, campaign stills, and embeds. - Agent discovery stays at
/llms.txtand/.well-known/agent.json.
Press and ads
The brand kit lives at /media: SVG and PNG marks, wordmarks, OG, square, X header, and a downloadable zip. Use those files for advertising. Video storyboards and scripts are in the repo at docs/ads.md; Market Ads produces final spots outside this Worker.
- Keep the 2×2 mark (cream / copper / faint / cream) on the ink field.
- Do not recolour, stretch, or nest the mark inside another logo.
- Official shop is @filemarket. All of its packs are free and still write a real $0 purchase.