Build, launch and monetize API products in a few lines of code
One file generates the API, CLI, MCP, SDK, docs, portal and Stripe billing, the plumbing tax every other API pays by hand.
What you sell
import { define, secret } from 'apis.dev' /** Any company by its domain, with its headcount and sector. */ export default define({ name: 'companyfacts', domain: 'companyfacts.apis.dev', sources: { firms: { origin: 'https://firms.example.com', key: secret('FIRMS_KEY'), }, }, Company: { domain: { type: 'url!#', from: 'firms', map: 'website' }, employees: { type: 'number?', from: 'firms', map: 'headcount' }, sector: { type: 'string?', from: 'firms', map: 'industry' }, }, offer: { 'Company.get': , 'Company.search': 0.005 }, })
curl https://companyfacts.apis.dev/companies/acme.comconst { data, meta } = await api.getCompany('acme.com')data, meta = api.get_company("acme.com")$ npx companyfacts companies get acme.comtools/call "getCompany" { "domain": "acme.com" }{ "domain": "acme.com", "employees": 240, "sector": "Software" }
import { define } from 'apis.dev' /** * A pipeline tracker your Customers log their deals in, each * in its own space. */ export default define({ name: 'pipeline', domain: 'pipeline.apis.dev', Company: { name: 'string', domain: 'url!#', deals: '<-Deal.company', }, Deal: { title: 'string', amount: 'decimal(12,2)', company: '->Company.deals', stage: { open: [], qualify: 'opened', win: 'qualified', lose: ['opened', 'qualified'], }, }, offer: { Free: { month: 0, seats: 1, includes: { 'Deal.open': 25 } }, Team: { month: 49, seats: 5, seat: 9, includes: { 'Deal.open': 1000 } }, 'Deal.open': 0.001, }, })
curl https://pipeline.apis.dev/deals \ -X POST \ --json '{"title":"Pilot","amount":"5000.00","company":"company_1"}'
{ "id": "deal_1", "title": "Pilot", "amount": "5000.00", "company": "company_1", "stage": "opened", "createdAt": "2026-10-24T09:10:00Z", "updatedAt": "2026-10-24T09:10:00Z" }
import { define, code, generative, agentic, human } from 'apis.dev' /** * Answers about any company by its domain, from a score in * milliseconds to a person's check in hours. */ export default define({ name: 'summaries', domain: 'summaries.apis.dev', Company: { domain: 'url!#', /** A score from 0 to 100, from the domain alone. */ score: code((c) => ({ score: c.domain.endsWith('.ai') ? 80 : 50 })), summarize: generative('Two sentences on what {domain} sells', { returns: { summary: 'string' } }), research: agentic('Find the head of sales at {domain}', { returns: { headOfSales: 'string' } }), verify: human('Call and confirm the head of sales', { returns: { confirmed: 'boolean' }, role: 'researcher' }), }, Text: { translate: generative('Translate {text} into {to}', { input: { text: 'string', to: 'string' }, returns: { text: 'string' } }), }, offer: { 'Company.score': 0.001, 'Company.summarize': 0.02, 'Company.research': 0.5, 'Company.verify': 5, 'Text.translate': 0.01, }, })
curl https://summaries.apis.dev/companies/acme.com/summarize \ -X POST
{ "id": "act_1", "verb": "Company.summarize", "status": "done", "output": { "summary": "Acme sells pipeline software to B2B sales teams." } }
import { define, agentic } from 'apis.dev' /** * An agent that books three meetings a week with each * Customer's leads, in their own inbox and CRM. */ export default define({ name: 'meetings', domain: 'meetings.apis.dev', sources: { inbox: { system: 'email', scope: 'customer' }, crm: { system: 'crm', scope: 'customer' } }, Meeting: { with: 'string', company: 'string', at: 'date', book: agentic('Book a meeting with the next lead in {crm}', { tools: ['inbox', 'crm'], returns: { meeting: 'string' } }), }, on: { 'every Mon, Wed, Fri 09:00': 'Meeting.book' }, offer: { 'Meeting.book': { per1000Tokens: 0.01, perMinute: 0.05 }, 'Meeting.get': 0, 'Meeting.list': 0, }, })
curl https://meetings.apis.dev/actions/act_31{ "id": "act_31", "verb": "Meeting.book", "status": "done", "output": { "meeting": "mtg_1" }, "usage": { "tokens": 18400, "minutes": 6 }, "cost": { "price": 0.484, "currency": "USD" } }
import { define, workflow, agentic } from 'apis.dev' /** * Each Customer's annual report, drafted, signed and filed, * charged once when the Customer accepts it. */ export default define({ name: 'filings', domain: 'filings.apis.dev', Filing: { company: 'string', year: 'number', status: { order: [], draft: { in: 'ordered', run: workflow(async ($, filing) => { const { form } = await $.generative('Draft the annual report for {company}', filing, { returns: { form: 'string' } }) await $.human('Check the draft', { form }, { role: 'paralegal' }) return { form } }) }, sign: 'drafted', file: { in: 'signed', run: agentic('File the signed report with the state') }, accept: 'filed', reject: 'filed', }, }, on: { 'Filing.ordered': 'Filing.draft', 'Filing.signed': 'Filing.file' }, offer: { 'Filing.order': { price: 25, when: 'accepted', accept: 'customer', acceptWithin: '7d', remedy: 'redo' }, }, })
curl https://filings.apis.dev/filings/filing_1/accept \ -X POST
{ "id": "filing_1", "company": "acme.com", "year": 2026, "status": "accepted", "createdAt": "2026-10-24T09:00:00Z", "updatedAt": "2026-10-26T08:15:00Z" }
Skip the plumbing tax.
To sell one API, you build ten other products first. Here you write one file, and the ten are generated from it.
Landing sitecompanyfacts.apis.dev
Docs/docs
Developer portal and keys/dashboard
Stripe Checkout/checkout
Rate limits429 with Retry-After
MeteringX-Cost on every reply
CLInpx companyfacts
MCP server/mcp
SDKnpm i companyfacts
llms.txt and agents.json/llms.txt
Built by hand, the ten take months before your first sale, and agents still cannot find or call your API.
Your file is the whole product.
Your API is the interesting 10%. APIs.Dev handles the other 90%.
- Define. Write what you sell and what it costs, in a few lines.
$ npx apis.dev init - Launch. One deploy puts all eleven live on a free address, then on your own domain.
$ npx apis.dev deploy - Get paid. People and agents sign up, call and pay. Stripe pays you directly.
Paid to your Stripe · October 2026
Edit the file: rename it, change a price, add a field. The plan is the platform's own answer, as you type.
Answered by POST /v1/products/yourfacts/plans
Answers on https://yourfacts.io.sb
- Company.get$0.002getCompany · npx yourfacts companies get
- Company.search$0.005searchCompanies · npx yourfacts companies search
- API
yourfacts.io.sb/companies - Landing site
yourfacts.io.sb/ - Docs
yourfacts.io.sb/docs - Developer portal and keys
yourfacts.io.sb/dashboard - Stripe Checkout
yourfacts.io.sb/checkout - Rate limits
429 with Retry-After - Metering
X-Cost on every reply - CLI
npx yourfacts - MCP server
yourfacts.io.sb/mcp - SDK
npm i yourfacts - llms.txt and agents.json
yourfacts.io.sb/llms.txt
Agents buy it too.
They find it, call it and pay for it, with your price on every reply.
What's the headcount at acme.com?
Read companyfacts.apis.dev/.well-known/agents.json
Called getCompany · 402 payment_required
Companyfacts sells it at $0.002 a lookup, paid from credits. Buy $50 of them?
Called getCompany · 200 · price 0.002
acme.com has 240 people, in Software.
- → GET companyfacts.apis.dev/.well-known/agents.json← 200 mcp { tools: ["getCompany", "searchCompanies"] }
- → POST companyfacts.apis.dev/mcp tools/call getCompany← 402 payment_requiredoffers: credits $10, credits $50, credits $200
- → Stripe Checkout · $50.00 paid to Companyfacts's Stripe← balance $50.00
- → POST companyfacts.apis.dev/mcp tools/call getCompany← 200 { "domain": "acme.com", "employees": 240, "sector": "Software" }_meta.cost: { price: 0.002, currency: "USD" }
Every price is public, including APIs.Dev's.
Free until you get paid. Then a small share of what your Customers pay, smaller on each plan.
- FreeBuilding it, and running something real$0 a month + 2%
- LaunchFinding out who wants it, and getting the first Customers$25 a month + 1%
- TeamMore than five people, or building for clients$99 a month + 0.5%
- ScalePassing a security review$399 a month + 0.25%
You keep, on Free980.00
Launch is cheaper above $2,500, Team is cheaper above $14,800, Scale is cheaper above $120,000 a month. Every plan, compared
Run an API business.
201 Created
- Brand
- yours only Customers never see ours
- Prices
- public always on show, APIs.Dev's too
- Payouts
- your Stripe money lands in your account
- Defaults
- yours to override every one of them
A live, priced API product under your name, earning from the first call.