Skip to content

Early access and flags

A flag turns Verbs, fields or plans on for an early-access list or named Customer orgs; everyone else meets a product without them.

A flag, from a few orgs to everyone

Outside a flag, and inside it

A Customer outside a flag meets the product as if the flagged parts were never written.

The Verb is absent from its OpenAPI document, its MCP tools, its SDK types and its docs. A call to it answers 404 no_route, and a flagged field is absent from every reply.

A Customer inside sees each flagged Verb with "early": true in its tool list and a line on its docs page. Its agent reads the same mark.

A flag, a rollout or a variant

Three tools put a change in front of some Customers first: a flag, a rollout and a variant. Each answers a different question.

A flagA rolloutA variant
Who gets itOrgs you name, or an early-access listA random share of orgs, growing in stepsA random share of new Customers
What changesChosen Verbs, fields or plansThe whole VersionA price, a plan or a trial
How longUntil you ship it to everyone or withdraw itHours, until every org is on itUntil the experiment concludes
Who decidesYou, org by orgThe rollout guardsThe analysis, then you

A search for early orgs

The lookup by domain tries a search by sector on 50 orgs that ask for it, before anyone else can call it.

definition.ts
20 lines
import { define, secret } from 'apis.dev'

/** Any company by its domain, with its headcount and sector, and search by sector for early orgs. */
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': 0.002, 'Company.search': 0.005,
    free: { 'Company.get': 100 },
  },
  flags: { sectorSearch: { verbs: ['Company.search'], to: 'pilot' } },
  early: { pilot: { join: 'request', cap: 50, ask: ['useCase'] } },
})

A member's agent asks to join, and the request waits for your approval.

Response
HTTP/1.1 202 Accepted
Content-Type: application/json
X-Cost: price=0, currency="USD"
X-Request-Id: req_a0c4e83f61d2b97e5c13

{
  "list": "pilot",
  "org": "org_acme",
  "state": "requested",
  "place": 12,
  "answers": { "useCase": "Find every fintech with over 200 people" }
}

Once granted, Company.search appears in that org's tools at its next call, priced as the Offer prices it. Removing the flag ships it to everyone in one deploy.

Asking to join

An early-access list holds the orgs that asked or were invited, up to cap.

joinHow a Customer gets on
requestAsks in the portal, or with requestEarlyAccess over MCP, answering the fields in ask; you approve with EarlyAccess.approve
inviteYou add the org with Flag.grant; it is told in the portal and by email

A request is requested, then granted or declined. A Customer leaves a list at any time, and loses only the flagged parts, never its records.