Skip to content

Choose your pattern

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.

Seven questions, asked in order

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.

  1. 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.
  2. A place its own team keeps records? Build a Headless SaaS, priced by plan and seat, from Nouns and a lifecycle.
  3. 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.
  4. A worker that does a job for it, again and again? Build an Agent API, billed by its tokens and minutes.
  5. A piece of work, finished and accepted? Build a Service API, charged once on acceptance, from a Workflow and an Outcome contract.
  6. Editions you write and publish? Build Content, sold by the read or a membership.
  7. 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 sellWrite it as
Research a buyer pays for only when it is rightA Service API whose step is a Function
Records a team keeps, plus a lookup that fills themA Headless SaaS whose fields read a Dataset API
An edition, plus the data behind it by the callContent beside a Dataset API, in one file
Many researchers, each paid when the buyer acceptsA Marketplace of Service API orders
The same answer for a person and for an agentAny 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.

definition.ts
12 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.