The Internet for the New World
The web was built for people. Schema is one API that lets agents read it and act on it: every website, callable in words or as a typed function, with the results to prove it.
The web has one interface, and it was built for people. We’re building the second one.
Read the visionOne vision. Three ways in.
Everything we build serves one idea: an API for the World. Every website, callable by agents — fast and accurate. Build on it, watch it work on your Mac, or put your own site on it.
Schema for Flows
One API for the web: read it, and act on it.
Send a task in plain words to one endpoint, or call a site's typed functions directly. Schema answers from official APIs, live Flows, or the site itself, and does things too: forms, bookings, messages, each held at its final step until you confirm. Over REST or MCP.
Schema for Mac
The same engine, as an app you can talk to.
A chat window and command bar for your Mac, built on the engine behind the API. Ask in plain English and watch it work: answers in seconds, forms filled in, bookings taken to checkout. Passwords and 2FA codes stay in an on-device Vault the model never sees.
Schema for Sites
Zero-config. Your site, as an API for every agent.
Like Cloudflare, for the world of agents. Schema sits in front of your existing site and turns it into an API every agent can call — more traffic, more conversions, more reach, with no rebuild.
Schema for Flows
One API for the web: read it, and act on it.
One API for every website
Agents send a task in plain words to one endpoint, POST /v1/run, or over MCP, and Schema answers from an official API, a site's Flow, or the site itself. A Flow is a dynamic route into a site, running in real time against the live environment. The Google Flights Flow tells your agent what Google Flights does, which functions it can run, and what each one takes — and hands back typed results.
Search and compare flights worldwide to find the best deals.
Call search_flights to compare flights, or book_flight to pick one (cheapest by default) and open its booking options.
book_flight({ origin: "ATL", destination: "BOS", date: "2026-11-12", choose: "cheapest" })[ { "seller": "Frontier", "price": 169 }, { "seller": "FlightHub", "price": 179 }, { "seller": "Frontier", "price": 209 } ]
- 01
Generated by discovery
A discovery agent explores a site and writes its Flow: what the site does, the functions you can run, and the information you can read.
- 02
Live, and self-updating
Flows run in real time against the live site. When the site changes, the Flow adapts its behavior and ships a new version on its own.
- 03
Typed where it counts
Inputs can be typed or plain English. Outputs are always typed, so your agent never parses a page again.
- 04
Sign-ins, handled
For platforms behind a login, sessions are cached on Schema’s servers and loaded on demand. Manage sessions and credentials from the dashboard.
One error model, every Flow
Every failure on every site comes back in the same typed shape: a standard code, whether it’s safe to retry, and a request id that correlates it to the exact call in your logs. Handle errors once, not once per website.
- invalid_input
- unauthorized
- auth_required
- not_found
- conflict
- +3 more
// Same shape from Google Flights, OpenTable, or PG&E
{
"error": {
"code": "conflict",
"message": "20:00 was just booked",
"flow": "OpenTable Flow",
"function": "book",
"retryable": true,
"request_id": "req_8Hc21",
"details": { "alternatives": ["20:15", "20:45"] }
}
}Not just reading the web. Doing things on it.
Orders, reservations, sign-ups, messages: the same endpoint that answers questions takes actions, and holds each one at its final step until you say go.
// 1. Ask for it POST /v1/run { "task": "Order a large pizza for delivery at 7:45, submit it" } → "action": { "id": "act_ebaf1d999eba57d7", "status": "ready", "step": "Submit order" } // 2. Your user says yes POST /v1/actions/act_ebaf1d999eba57d7/confirm → "status": "done", "answer": "Order submitted: large pizza, 7:45 PM"
- 01
Done up to the final step
Searching, choosing and filling in happen on their own. Schema stops at the step that can’t be undone: Submit, Send, Complete reservation.
- 02
Confirmed by you
The action comes back with an id. Confirm it once your user agrees, and Schema presses that step on the same page, or cancel it.
- 03
Payment is never Schema’s
A checkout comes back as a handoff with the total and the page to pay on. Nothing is ever bought on your behalf.
Measured on the live web. Failures included.
43 real requests, from one-fact lookups to bookings and actions, sent to the API as agents send them. A task passes only when its checks hold: the right facts, the right page, the final step held and then done. Last run September 27, 2026.
- lookup6/6 · 4.0s
- live4/5 · 1.9s
- navigate4/4 · 3.4s
- research6/6 · 4.4s
- form4/4 · 3.4s
- prices3/4 · 4.9s
- convo2/2 · 8.9s
- robust3/3 · 3.8s
- actions3/3 · 7.2s
- transact4/6 · 6.3s
- 39/43
- Tasks passed on every run, checked against the facts
- 91%
- Of 43 runs passed
- 4.6s
- Median time per task, live
- 16.5s
- 90th percentile: the slow ones, included
Most agents spend their time clicking. Schema just calls.
Browser agents are slow because they act like people: wait for the page, look, click, repeat. Schema skips the performance. It calls functions directly and saves the deeper thinking for the few moments that need it.
Measured on Google Flights: a one-way booking from request to the booking page, median of repeated runs on a warm browser. Times vary by site.
- 3.4s
- Median to book a flight through Schema for Flows
- 4.9s
- The same booking, done by the Schema for Mac agent
- 1
- Request, from a sentence to the booking page
- 0
- Payments ever made on your behalf
Schema for Mac
The same engine, as an app you can talk to.
If you can ask for it, Schema can go get it
Flights, carts, reservations, bills, fine print. You describe the outcome, Schema turns it into function calls, and the typed results come back as clean Markdown: tables, checklists, quotes, whatever fits.
“Find a nonstop to Lisbon under $700 the second week of May”
- →flights.search(to: "LIS", max_price: 700, nonstop: true)
- →flights.hold(id: "TP202", seat: "23A")
3 nonstops under $700
| Flight | Route | Departs | Price |
|---|---|---|---|
| TAP 202 | EWR → LIS | Sun, May 11 · 7:50p | $642 |
| United 64 | EWR → LIS | Mon, May 12 · 5:35p | $671 |
| TAP 204 | JFK → LIS | Tue, May 13 · 9:10p | $688 |
Seat 23A held on TAP 202. Press ⌘↵ to book it.
“Get me the earliest DMV slot for a license renewal”
- →dmv.appointments(type: "renewal", sort: "earliest")
- →dmv.hold(slot: "2026-10-06T09:20")
Tue, Oct 6 at 9:20am · Fell St
- Appointment held
- Confirmation
DMV-7Q2K - Bring your current license
- $38 renewal fee
“What’s the return window on this jacket, and is shipping free?”
- →store.policy(topic: "returns")
30 days
Returns ship free, with one catch:
“Items must be unworn with original tags attached.”
“Compare what the filters cost for these three air purifiers”
- →products.compare(ids: [3], fields: ["price", "filter_cost"])
The cheapest to buy isn’t the cheapest to own
| Purifier | Price | Filters / yr | 3-yr total |
|---|---|---|---|
| Coway 200M | $34 | $251 | |
| Levoit 400S | $219 | $58 | $393 |
| Blueair 211i | $319 | $71 | $532 |
“Book a table for four somewhere quiet near Union Square at 7:30”
- →reservations.search(near: "Union Square", party: 4, at: "19:30")
- →reservations.book(venue: "Cotogna", slot: "19:30")
Booked · Cotogna
- 1Checked 6 spots within a 10-min walk
- 2Ruled out 4 with “loud” in reviews
- 3Reserved 7:30pm, party of 4
Confirmation OT-55190
“Log into PG&E and pay this month’s bill”
- →pge.sign_in(credentials: vault("PG&E"))
- →pge.pay(amount: 112.40, from: "checking")
$112.40
Paid from checking ••4417
- Due Oct 14, paid Sep 23
- Receipt sent to your inbox
“Check our registrar for any domains expiring this quarter”
- →registrar.domains(expiring_before: "2026-12-31")
2 of 8 expire before Dec 31
schema.dev· Nov 14 · auto-renew offgetschema.co· Dec 2 · auto-renew off
The other 6 renew automatically.
Fast because there’s nothing to click
Schema doesn’t wait for pages to load or hunt for buttons. It calls functions, gets typed responses, and moves on.
Every site, as functions
Schema maps a website into callable functions with typed arguments. Search, filter, book, pay: each one is a call, not a sequence of clicks.
Calls, not clicks
No waiting for pages to render or buttons to appear. A call goes out, a typed response comes back, and Schema moves on.
Errors it can actually handle
A failed call returns a real error, not a frozen spinner. Schema fixes the arguments, tries again, and keeps going until the goal is met.
Speak it instead
Real-time macOS dictation is built into the bar. Say the task, get the answer.
Answers, not logs
Typed responses come back into the same bar as clean Markdown: the flight, the price, the confirmation.
Runs on your Mac
Schema is a standalone app, not a browser extension. Your Vault stays encrypted on your machine.
Four keystrokes between you and done
Schema lives one shortcut away. It’s built for the tiny errands you’d otherwise open six tabs for.
Summon it anywhere
The bar opens on top of whatever you’re doing. No tab to find, no app to switch to.
Type it or say it
Plain English works. So does talking — dictation is built in and transcribes as you speak.
Schema makes the calls
Your request becomes a handful of function calls. You watch them go by in the bar: no windows, no tabs, no cursor.
Confirm what matters
Anything that spends money or can’t be undone waits for your go-ahead. Everything else just happens.
Logs in for you. Never sees your password.
Connect passwords, 2FA codes, emails, usernames, or any other secret to your Vault. Schema can pass them into any call that needs them, but the model itself never gets to read them.
- Encrypted on your Mac
- Secrets are encrypted and stored on device, and only unlocked when a task needs one.
- Invisible to the model
- Schema asks for a secret by name. The Vault passes it straight into the function call, so the value never enters the model’s context.
- Fetched only on demand
- Nothing is loaded up front. A secret is retrieved at the moment the model calls for it, and not before.
- 2FA included
- Store one-time codes alongside passwords, so logins with two-factor don’t stall halfway through.
- PG&EPassword••••••••••••
- PG&E2FA code••• •••
- Work emailEmailk••••@schema.dev
- RegistrarUsernameschema-ops
- Frequent flyer #Secret••••••7731
vault("PG&E")••••••••••••Built to feel instant, not clever
Speed isn’t a setting Schema turns on. It’s the default, and everything else is the exception.
- 01
Maps before it acts
Schema turns a site into typed functions first, so it knows exactly what’s possible before it does anything. No fixed scripts to break when a site changes.
- 02
Calls the instant it’s sure
Routine calls go out immediately. There’s no waiting around for a slow model to confirm the obvious.
- 03
Thinks only when it has to
Real judgment calls — which fare, which result, which arguments — get the deeper reasoning they deserve, and nothing else does.
- 04
Keeps going until it’s done
A failed call comes back as a typed error. Schema adjusts and retries, and only stops once the goal is verifiably met.
Schema for Sites
Zero-config. Your site, as an API for every agent.
Turn your site into an API for every agent
Schema for Sites is the Cloudflare for the world of agents. Put it in front of your existing site and it becomes a fast, typed API that agents can call — you choose what’s exposed. Your customers get things done, agents get a reliable way in, and you get the business. A win for everybody.
Schema for Sites isn’t open yet. We’re onboarding the first businesses by hand: tell us about your site and we’ll get in touch.
More traffic
Agents are becoming how people shop, book, and search. Sites they can actually use are the ones they send people to.
Higher conversion
An agent that can call checkout finishes the purchase instead of stalling on a dropdown or a cookie banner.
Wider reach
Every assistant, model, and agent becomes a channel to your customers, through one integration instead of one per provider.
Zero config, no rebuild
Schema sits in front of your existing site like Cloudflare. Your backend and your pages for people stay exactly as they are.
An API for the World
Everything we build serves one idea. Machines shouldn’t have to pretend to be people: today’s agents look at pages designed for human eyes, find buttons sized for human fingers, and click them. Machines talking to machines should work fundamentally differently, so Schema is building the interface they deserve: every website, callable, fast and accurate.
Humans click. Machines call.
Humans read pages. Machines read types.
Humans wait for things to load. Machines get a response.
The end game: be the Cloudflare for the new world of agents — the layer every site sits behind, and every agent calls through.
- Now
Call any website
Schema for Mac and Schema for Flows turn today’s websites into live, self-updating Flows that you and your agents can call, with typed answers instead of clicks.
- Next
Sites that speak machine natively
Schema for Sites: zero config, like Cloudflare. Any business puts Schema in front of its site and becomes a native API for every agent.
- Eventually
An API for the World
Every booking, purchase, form, and lookup on the internet is a fast, accurate function with a signature. The world, turned into an API.
Stop clicking. Start calling.
The waitlist is open for the API (Schema for Flows) and Schema for Mac. Join and we’ll email you as spots open up. Running a business? Schema for Sites is by conversation.
The first 1,000 on the waitlist get in mid-October, with everything free for a month.
Schema for Mac: Apple silicon · macOS 14 or later
- 1
Join the waitlist
Takes under a minute. The first 1,000 get a free month.
- 2
Get your invite
The first 1,000 are admitted in mid-October.
- 3
Sign in with the same email
Use the address you joined the waitlist with.