The system
How the system worksThe DirectoryDispatchThe LedgerAI modelsAI agentsYour installationThe appThe research libraryWhat changes for your businessUse it from your softwareEverything it can do
Messaging
iMessageWhatsApp
Ads and leads
AdsCreativeLeads
Devices
Devices
Industries
RealtorsRestaurantsHome services
Explore
How it worksPermissions and limitsCompareSet upQuestionsText me

Access · API

Run any action from your own program with one web request

An API is a web address that programs send requests to, instead of people clicking. The system’s API takes the name of an action and its inputs, checks the permissions, runs the action and answers with the result. Every request and every answer is written to the Ledger.

Every action needs a key from us. Three read-only calls work without one: they are at the bottom of this page.

Terminal
$ curl -s https://miscsubjects.com/api/ledger/counts
This page could not reach it just now.

A real call to this site, made by this page just now. It needs no key because it only reads totals.

With a key from us, one address runs any action:

POST https://miscsubjects.com/api/dispatch
{"key": "the action’s name", "args": { its inputs }}

How much detail

Developers: choose “For your developer” to see each exact request, with a real action name.

The request

Send the action’s name and its inputs to one address

The same address runs every action in the Directory. Only the name and the inputs change.

Address
https://miscsubjects.com/api/dispatch
Method
POST, which means the request carries data.
Your key
In a header named x-sheets-key. You get the key from us.
What to run
The action’s name, exactly as the Directory lists it.
Its inputs
Named values in JSON, a plain-text format for named values: for example who to text, and what to say.

Choose “For your developer” to see the exact request

It is the same request written three ways: as a curl command for a terminal, in JavaScript, and in Python. Each one runs as pasted once the placeholder is replaced with your key.

The request, three ways

Terminal
curl -X POST https://miscsubjects.com/api/dispatch \
  -H "x-sheets-key: YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"key": "NOW", "args": {}}'

YOUR_KEYis a placeholder: you get a key from us. NOW is the action that answers the current date and time; it changes nothing.

The same run is also reachable as POST /api/run with {"tool": …, "args": …}, and 25 other ways; each is shown on the Directory row of every action.

The answer

The answer holds the result and the way to read its Ledger entry

What comes back

  • Whether it worked.
  • The result, as the action returned it.
  • How long it took, and when it ran.
  • A reference for this call, the call_id.
  • The request that opens this call’s entry in the Ledger.

An example

Asked for today’s date and time, the answer says it worked, gives Sunday, September 27, 2026 at 8:32:18 AM PDT, says it took under a millisecond, and gives the call’s reference and the request that reads its Ledger entry. Choose “For your developer” to see the answer as it is sent.

The answer, as sent

An example answer, shortened
{
  "ok": true,
  "tool": "NOW",
  "status": "done",
  "ms": 0,
  "at": "2026-09-27T15:32:18.047Z",
  "result": "Sunday, September 27, 2026 at 8:32:18 AM PDT",
  "call_id": "fa19caae-c03d-4c4a-9c05-0f479cacc667",
  "receipt": {
    "method": "GET",
    "url": "https://miscsubjects.com/api/ledger?call_id=fa19caae-c03d-4c4a-9c05-0f479cacc667",
    "headers": { "x-sheets-key": "YOUR_KEY" }
  }
}

Refusals

A refused request says why, and is written to the Ledger too

What happenedWhat comes backStatus
No key, or a key that is not this system’sRefused. Nothing runs.401
The body is not in the expected formRefused. The answer spells out the form it expects.400
An action outside your permissions, or past one of its limitsRefused. Nothing runs.—
  • Every refusal is an entry in the Ledger, the same as every success.

The Ledger

Every request and every answer is kept in the Ledger, in full

The Ledger is a database table that stores every request and every response the system handles, in order and in full. Each entry includes a fingerprint (a SHA-256 hash) of the entry before it, so an entry changed afterwards can be detected.

—entries in the Ledger
—different AI models in it
—different actions run

Live, read from this site at 11:06 AM.

With a key, a program can

  • Read the newest entries.
  • Filter them: by action, by call, by kind of event.
  • Open one entry, whole.
  • Receive new entries live, over a WebSocket: a connection that stays open and delivers each entry as it is written.

The addresses

The Ledger, with a key
# the newest entries
GET  https://miscsubjects.com/api/ledger?limit=500
# the entries of one call, by its call_id
GET  https://miscsubjects.com/api/ledger?call_id=CALL_ID
# one entry, whole
GET  https://miscsubjects.com/api/ledger/row/ENTRY_NUMBER
# new entries, live, as they are written (a WebSocket)
GET  wss://miscsubjects.com/api/ledger/ws
# each with the header  x-sheets-key: YOUR_KEY

YOUR_KEYand the words in capitals after = or / are placeholders.

Dry run

A dry run writes out the call without sending it

Add one field to the request and nothing runs. The system answers with the exact call it would have made: the address, the headers and the body. Use it to check a request before anything is sent to anyone.

The field is named shape. Choose “For your developer” to see the whole request.

A dry run
curl -X POST https://miscsubjects.com/api/dispatch \
  -H "x-sheets-key: YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"key": "NOW", "args": {}, "shape": true}'

Replay

A recorded call can be run again by its reference

Send the call_id from an earlier answer, and the system runs the same recorded call again. The new run gets its own Ledger entry. A recorded call that would call the system itself is not replayed.

Replay
curl -X POST https://miscsubjects.com/api/dispatch \
  -H "x-sheets-key: YOUR_KEY" \
  -H "content-type: application/json" \
  -d '{"replay": "CALL_ID"}'

CALL_IDis the reference from an earlier answer; YOUR_KEY is your key.

Open calls

Three calls you can run now, without a key

They only read. Copy one into a terminal, or run it here and see the answer.

Every action’s name and every way to call it

The ways to call an action, the number of actions, and each action’s name.

Terminal
curl -s "https://miscsubjects.com/api/tools?light=1"

The Ledger’s totals

Totals only: all entries, and how many different AI models, actions, sessions and tasks appear. No entry itself.

Terminal
curl -s https://miscsubjects.com/api/ledger/counts

What your own request carries

The place, network and device your request shows, read from the request as it arrived, and what the site keeps about a visit.

Terminal
curl -s https://miscsubjects.com/api/traffic/self

“Run it here” sends the same request from this page and shows the answer, shortened: long lists are cut, and your network address is hidden.

More calls

Other calls a key can open

Selected from the system’s own list of its web calls. Tell us which of these you need when you request access.

Spreadsheets

  • List and create spreadsheets
  • Read cells, and write a block of cells
  • Add rows under the last used row
  • One tab as CSV
  • Live changes over a WebSocket
  • One cell’s history, and the version history
  • Put a spreadsheet back to an earlier version

The Ledger

  • The newest entries, or entries filtered
  • One entry, whole
  • New entries, live

Tasks for AI agents

  • Every task, or one task
  • Add a task, or add one already given to an AI agent
  • Take a task, finish it with its evidence, reopen it
  • One task’s Ledger entries

Running actions

  • Run an action by name
  • Dispatch, the dry run and replay
  • A model’s tool call, as the model wrote it
  • The MCP server: every action as a tool

Webhooks

  • Add a webhook in one line
  • Every delivery, whole, with duplicates marked

Tokens

  • Make a token for named actions
  • Every token, with its state
  • Revoke a token

Leads

  • Every lead source and whether it is ready
  • Search a source and keep each result as a lead
  • Research one lead
  • Write, approve or stop a draft

Email tracking

  • Prepare and track a letter without sending it
  • Opens, clicks and unsubscribes, by day and by campaign

Articles

  • Every article, newest first
  • One article whole
  • Add or change articles