Choose your pattern
Open in
Which kind of product to build follows from what your buyer receives and how it pays: the first question you answer yes to names it.
Each exit is a pattern, priced its own way. Filled: what the buyer receives.
Which kind of product to build, in seven questions
Ask them in order. A later pattern can do what an earlier one does, but costs you more to run.
- Does the buyer get facts about a thing, from a source you own or license? Build a Dataset API, priced per answer, from Sources and a Mapping.
- A place its own team keeps records? Build a Headless SaaS, priced by plan and seat, from Nouns and a lifecycle.
- One answer to one call, from code, a model, an agent or a person? Build a Function API, priced per call by kind, from a Function.
- A worker that does a job for it, again and again? Build an Agent API, billed by its tokens and minutes.
- A piece of work, finished and accepted? Build a Service API, charged once on acceptance, from a Workflow and an Outcome contract.
- Editions you write and publish? Build Content, sold by the read or a membership.
- What many other suppliers offer, under your brand? Build a Marketplace, paid by your take of each sale.
When two fit
A pattern is what you write, not a setting, so one file can hold two. Each Noun sells its own way.
| You sell | Write it as |
|---|---|
| Research a buyer pays for only when it is right | A Service API whose step is a Function |
| Records a team keeps, plus a lookup that fills them | A Headless SaaS whose fields read a Dataset API |
| An edition, plus the data behind it by the call | Content beside a Dataset API, in one file |
| Many researchers, each paid when the buyer accepts | A Marketplace of Service API orders |
| The same answer for a person and for an agent | Any pattern: every one serves both |
One job, two ways
An answer found by an agent, sold per call, is a Function API in a few lines.
import { define, agentic } from 'apis.dev'
/** The head of sales at any company, found by an agent, priced per answer. */
export default define({
name: 'summaries', domain: 'summaries.apis.dev',
Company: {
domain: 'url!#',
research: agentic('Find the head of sales at {domain}',
{ returns: { headOfSales: 'string' } }),
},
offer: { 'Company.research': 0.5 },
})Charged only when the buyer accepts the name, the same job is a Service API. Its price moves to an outcome, and its Verb to a lifecycle.
What APIs.Dev refuses to be
APIs.Dev never stands between you and your buyers: your Customers, your brand and your Stripe account stay yours, and nothing they read names it.