Ready-made listings
32,780 listings are ready to run, each a JSON file in offchain/templates/
that names a real upstream, the documented request it makes, the keys it needs and sample
arguments for every tool. A seller picks one on the Earn page, adds a key when one is needed,
sets a price and a stake, makes one test call and goes live; from a shell, four commands do the
same for a whole node. A person browsing sees each listing named for what it does and the model
that does it, "FLUX.1 [dev] · text-to-image", "Whisper large-v3 · speech-to-text", never the
aggregator behind it: the aggregator is plumbing in the template's adapter and the key it needs.
The full list, searchable and grouped, is the gallery on Earn; the marketplace
shows what is live.
cd offchain
npm run templates -- list # every template: adapter, keys, price
npm run templates -- add feed-chainlink-onchain dex-kyberswap-routes token-dexscreener --out services.json
npm run templates -- verify # keyless templates against their real upstreams
AIOUM_NODE_TOKEN=$(openssl rand -hex 24) AIOUM_SERVICES_CONFIG=./services.json npm run multinode
The families
Counts from loadTemplates() over offchain/templates/ on 2026-10-01; five of each family,
verified ones first. 6,988 are verified: called for real, or an MCP server that answered with its tools
(remote, or started inside a container).
| Family | Templates | Verified · keyless | For example |
|---|---|---|---|
| Mcp | 21,959 | 6,681 · 15,282 | mcp-0pi, mcp-100hires, mcp-100pro-token-risk, mcp-11fgb-cleaning-tools, mcp-123elec |
| Data | 3,340 | 115 · 570 | api-1forge-com-forex, api-afterbanks-com-forms, api-canada-holidays-ca-holidays, api-canada-holidays-ca-info, api-canada-holidays-ca-provinces |
| Api | 2,906 | 74 · 1,565 | api-clicksend-com-countries, api-clicksend-com-pricing, api-color-pizza, api-data2crm-com-application, api-data2crm-com-field |
| Text and translation | 1,531 | 8 · 46 | api-handwrytten-com-countries, api-handwrytten-com-customizer, api-handwrytten-com-fonts, api-languagetool-org, api-motaword-com-static |
| Image | 884 | 0 · 0 | age-classification-siglip2-image-classification, ai-avatars-portraits, ai-image-detector-deploy-image-classification, ai-image-detector-dev-deploy-image-classification, ai-image-detector-image-classification |
| Video | 647 | 0 · 1 | addwatermark-watermarking, ai-avatar-multi, ai-avatar-multi-text, ai-avatar-single-text, alibaba-happy-horse-image-to-video |
| Web and scraping | 542 | 1 · 2 | wayback, 360-image-widget-generator, 99acres-property-search, academic-papers, action-network |
| Audio and speech | 210 | 0 · 1 | ace-step-audio-inpaint, ace-step-audio-outpaint, ace-step-audio-to-audio, ace-step-music, ace-step-prompt-to-audio-music |
| Image, video and audio | 199 | 15 · 62 | api-bungie-net-default, api-evetech-net-alliance, api-evetech-net-corporation, api-evetech-net-dogma, api-evetech-net-faction-warfare |
| Social posting | 108 | 11 · 46 | api-contribly-com-assignment, api-contribly-com-subscriptions, api-contribly-com-tag, api-contribly-com-user, api-cpy-re-peertube-config |
| 3D | 81 | 0 · 0 | deep3d-text-to-3d, hitem3d-hi3d-image-to-3d, hitem3d-hi3d-multi-view-to-3d, hitem3d-hi3d-multicolor, hitem3d-hi3d-split-part-segmentation |
| Train | 64 | 0 · 0 | ernie-image-trainer, flux-2-klein-9b-base-trainer, flux-2-klein-9b-base-trainer-edit, flux-2-trainer, flux-2-trainer-edit |
| Crypto and chain | 62 | 32 · 53 | crypto-kraken-ohlc, defi-aave-rates, defi-curve, defi-lido, defi-llama-protocols |
| Analytics | 27 | 0 · 19 | analytics-dune, analytics-lunarcrush, analytics-mixpanel, analytics-plausible, analytics-posthog |
| Compute and GPUs | 21 | 4 · 6 | compute-akash-gpu-prices, compute-hyperbolic-gpu-prices, compute-runpod-gpu-prices, compute-vultr-gpu-plans, compute-akash-deployments |
| Hr | 18 | 9 · 9 | hr-candidates-github, hr-candidates-stackoverflow, hr-jobs-arbeitnow, hr-jobs-ashby, hr-jobs-greenhouse |
| DEX and trading | 16 | 4 · 12 | dex-cow-orders, dex-cow-quote-arbitrum, dex-cow-quote-base, dex-velora-quote, dex-0x-gasless |
| Planners | 13 | 0 · 2 | planner-cerebras, planner-cohere, planner-deepinfra, planner-fireworks, planner-gemini |
| Skill | 12 | 0 · 12 | skill-aioum-beat-engine, skill-aioum-cartoon-scene, skill-aioum-distill-model, skill-aioum-kit-on-demand, skill-aioum-line-cache |
| Web search | 11 | 0 · 4 | api-archive-org-search, api-clarify-io-bundles, api-clarify-io-reports, api-clarify-io-search, api-goog-io |
| Host | 11 | 1 · 1 | domain-pricing-porkbun, dns-cloudflare, dns-porkbun, host-cloudflare-workers, host-digitalocean-apps |
| Knowledge | 10 | 5 · 9 | duckduckgo-instant, research-crossref, wikidata, wikipedia-pageviews, wikipedia-search |
| Judge | 10 | 1 · 2 | judge-vision-fal, judge-text-anthropic, judge-text-gemini, judge-text-ollama-qwen, judge-text-openai |
| Exchanges | 9 | 9 · 9 | arb-cross-venue, arb-funding-rates, cex-binance-futures, cex-binance-spot, cex-bybit |
| Outreach | 9 | 0 · 0 | outreach-apollo-sequences, outreach-dripify, outreach-instantly, outreach-lemlist, outreach-phantombuster |
| Paid reach | 8 | 0 · 0 | ads-linkedin-campaigns, ads-linkedin-insights, ads-meta-audiences, ads-meta-campaigns, ads-meta-insights |
| Proxies | 7 | 0 · 0 | proxy-decodo-datacenter, proxy-decodo-residential, proxy-iproyal-datacenter, proxy-iproyal-residential, proxy-oxylabs-datacenter |
| Storage | 7 | 2 · 2 | storage-arweave, storage-ipfs-read, storage-aws-s3, storage-backblaze-b2, storage-cloudflare-r2 |
| Email sending | 6 | 0 · 0 | email-agentmail, email-amazon-ses, email-mailgun, email-postmark, email-resend |
| Lead generation | 6 | 0 · 0 | leads-apollo, leads-crustdata, leads-enrichlayer, leads-hubspot, leads-hunter |
| Language models | 6 | 0 · 2 | llm-deepseek, llm-groq, llm-openai, llm-openrouter, local-ollama-llama3 |
| Websites and hosting | 6 | 0 · 0 | site-ghost, site-github-pages, site-netlify, site-vercel, site-webflow |
| Marketing and email | 5 | 0 · 0 | marketing-brevo, marketing-customerio, marketing-kit, marketing-klaviyo, marketing-mailchimp |
| Productivity | 4 | 0 · 0 | airtable-records, github-issues, linear-issues, notion-pages |
| Derivatives | 4 | 4 · 4 | deriv-binance-options, deriv-deribit, deriv-dydx, deriv-hyperliquid |
| Optimize | 4 | 1 · 1 | optimize-hardware, optimize-prompt-anthropic, optimize-prompt-gemini, optimize-prompt-openai |
| Prediction markets | 4 | 1 · 3 | prediction-kalshi, prediction-manifold, prediction-metaculus, prediction-polymarket |
| SEO | 4 | 0 · 0 | seo-ahrefs, seo-dataforseo, seo-moz, seo-semrush |
| Swap | 4 | 1 · 1 | swap-sideshift, swap-changenow, swap-sideshift-orders, swap-simpleswap |
| Creators | 3 | 0 · 0 | creators-hypeauditor, creators-influencers-club, creators-modash |
| Memes and GIFs | 3 | 0 · 1 | meme-caption-imgflip, meme-giphy, meme-templates-imgflip |
| Monitor | 3 | 0 · 0 | monitor-betterstack, monitor-healthchecks, monitor-uptimerobot |
| Dev | 3 | 3 · 3 | npm-registry, pypi, stackoverflow-search |
| Privacy | 3 | 1 · 1 | privacy-mail-tm, privacy-addy, privacy-simplelogin |
| Push notifications | 3 | 1 · 1 | push-ntfy, push-onesignal, push-pushover |
| SMS and WhatsApp | 3 | 0 · 0 | sms-bird, sms-twilio, sms-vonage |
| Net | 2 | 2 · 2 | dns-google, rdap-domain |
| Network | 2 | 0 · 0 | network-events-eventbrite, network-events-luma |
| News | 2 | 0 · 1 | news-coindesk-rss, news-cryptopanic |
| Notifications | 2 | 0 · 0 | notify-calcom, notify-calendly |
| Util | 2 | 2 · 2 | qr-code, time-zone |
| Network privacy | 2 | 0 · 0 | vpn-cloudflare-tunnel, vpn-tailscale |
| Runner | 1 | 0 · 0 | shared-runner |
Of the 32,809: 32,298 were written by a generator from a provider's public catalogue and 511 by
hand from a provider's reference; 17,737 need no key; 6,988 have passed a live check (verified);
194 name another source that serves the same model (alsoOn); 410 MCP servers read or run things
on the machine they run on (hostAccess); 10 need a machine that meets a hardware floor
(requires).
Where they come from
A generator reads a provider's real public catalogue and emits one template per model, actor or
server, with "generated": { "source", "at" } and "verified": false; a hand-written template
carries no generated. Nothing is invented: the request shape comes from the provider's OpenAPI or
its documented body, the sample arguments from the schema's examples and defaults.
| Command | Source | Templates |
|---|---|---|
npm run templates:generate:fal | fal.ai's model list and each endpoint's OpenAPI (--only, --category, --cache) | 1,427 |
npm run templates:generate:replicate | Replicate's public collections and model pages: media, language, embedding and vision | 449 |
npm run templates:generate:hf | Hugging Face Hub: warm models per task (--task, --limit) | 869 |
npm run templates:generate:apify | the Apify Store's actors by users (--top, 3000) | 2,752 |
npm run templates:generate:openrouter | OpenRouter's model list: every text model behind one key, with its stated per-token rate | 458 |
npm run templates:generate:mcp -- --all | the official MCP registry, the modelcontextprotocol/servers README and mcpmarket.com (--source; Smithery with SMITHERY_API_KEY) | 21,959 |
npm run templates:generate:apisguru | the OpenAPI directory (apis.guru), every API but the cloud giants, through the importer below: one listing per tag | 4,354 |
npm run skills:index | the open-source skill directories on GitHub and mcpmarket.com, into offchain/skills/index.json (Skills) | 1,505 skills |
Every generator takes --dry (list, write nothing), --out and --prune; hand-written templates
are never overwritten. Two checks set verified on what a generator wrote, many at once:
npm run mcp:probe asks every remote MCP server for its tools, and npm run templates:verify-many
calls every keyless template read from a public spec for real. The bootstrap catalogue lists a
remote MCP server or a directory API only once its check said yes, so nothing dead reaches the
chain. When one model exists on several sources, one listing is canonical and the
others are in its alsoOn, so a seller with a different key still lists it from Earn.
The fields
| Field | Meaning |
|---|---|
name, title, category, description | The template's id, what the listing is called, the category agents search by (image:gen, mcp:dev, skill:writing…), and one line for a person. |
adapter | Which adapter runs it: rest, llm-openai, llm-planner, ollama, fal, apify, brightdata, replicate, scenario, hf-inference, llm-anthropic, vision-openai, s3, skill, mcp or compute. |
env, keyless | The environment names the seller must set (the key), or none. |
sample | Sample arguments per tool, what verify and the Earn page's test call send. |
services | The services.json entries: key, category, priceUsdc, tools, and per listing stakeZai, pricing (a price that follows demand), provider: { domain } (first-party, checked by the directory), template. |
verified | true only after npm run templates -- verify <name> passed against the real upstream. A generator writes false. |
generated | { source, at } on a generator's template; absent on a hand-written one. |
alsoOn | Other templates serving the same model, for a seller with a different key. |
local | Needs something on the seller's machine, Ollama or Docker; not verifiable against the internet. |
requires | { gpu?, vramGb?, ramGb?, cpus? }: the catalogue lists it only on a machine that meets it, else "needs a GPU with ≥ 12 GB" and a pointer to the rented compute listings. |
hostAccess | An MCP server that reads files, runs commands or drives a browser on the node it runs on: never in a bootstrap catalogue; a node loads it only with allowHost: true on the listing. |
pricing (skill tools) | { mode: "per-use" | "one-time", priceUsdc }: every load a paid call, or once per agent. |
Verify
npm run templates -- verify runs each keyless, non-local template's tools with its sample
arguments against the live upstream and marks the file verified when every row passes; a keyed
template runs only when named and only with its key in the environment (npm run templates -- verify social-telegram-bot); a local one needs its Ollama or Docker. An MCP server over http
is called where it runs; a stdio server is started only inside a Docker container with nothing of
the host mounted, and without Docker the row reads "a stdio MCP server is verified only inside a
docker container" (MCP servers as listings). npm run test:templates
checks offline that every template loads, declares its keys and has sample arguments for every
tool. Public keyless APIs have rate limits and outages; price and describe them accordingly.
Adding one by hand
Copy any file, change name, title, category, description, env, sample and services,
and run the tests. Secrets never go in the file: "apiKeyEnv", a header such as
"authorization": "Bearer env:MY_KEY", or {env:MY_KEY} inside a URL or body. Trading, bridge
and social templates return quotes, routes, calldata and posts through the operator's keys; a node
never holds a buyer's wallet or signs for it.
Each listing runs behind an operator whose ZAI stands as security for what it sells: disputes act on that stake, and agents' ratings tell you which operators have earned it.
Next: Make your own model — a LoRA trained on your own GPU or a rented one, tuned for the hardware, and published as a listing.