Overview
The endpoints your workflows, code and agents call, what they return, and every error they can answer with.
Everything goes through one small HTTPS API: the n8n node, the libraries and the MCP server all call it. You send your Operate As key and a call. Operate As checks the key, attaches the client's access on its own server, calls the service, and hands back its answer.
Base URL and key
POST https://api.operate.as/v1/actions/sheets.read_rows
Authorization: Bearer oa_...
Content-Type: application/json- Key: a bearer token starting
oa_, from the dashboard's API & webhooks page. See API keys. - Bodies: JSON with camelCase fields (
clientId,reconnectUrl). An action's inputs use snake_case (spreadsheet_id), and camelCase works there too.
Endpoints
| Method | Path | What it does |
|---|---|---|
GET | /v1/me/clients | The clients this key can reach, with the services each has connected |
GET | /v1/actions | The actions with their inputs, a page at a time. ?service=stripe (repeatable) for one service's; ?search=create+customer for the best matches. See Find an action |
GET | /v1/actions/{name} | One action, with each input's JSON Schema |
POST | /v1/actions/{name} | Run an action, such as sheets.read_rows, for one client |
GET POST PUT PATCH DELETE | /v1/clients/{clientId}/{service}/{path} | Any request the service's own API supports |
POST | /v1/mcp | The MCP server for agents. See MCP server |
curl https://api.operate.as/v1/me/clients \
-H "Authorization: Bearer $OPERATE_AS_API_KEY"[{ "id": "6f1c2a7e-...", "name": "Miller Dental", "services": ["sheets", "slack"] }]Only clients the key may reach are listed. services holds what's connected right now and the key may use. A service whose access ended drops out until the client reconnects.
The result
Actions and pass-through answer with the same shape:
{
"status": 200,
"data": { "range": "Sheet1!A1:D20", "values": [["Date", "Patient", "Treatment", "Paid"]] },
"encoding": "json"
}| Field | What it is |
|---|---|
status | The service's own HTTP status, such as 200 from Google Sheets |
data | The service's own answer, unchanged |
encoding | How to read data: "json", "text" or "base64" |
A file download, such as a PDF from Dropbox, comes back with "encoding": "base64". Decode data to get the file's bytes.
Check status, not just the HTTP code
Operate As answers HTTP 200 whenever it delivered your call. A spreadsheet that doesn't exist comes back as HTTP 200 with "status": 404 inside. Look at status before you use data.
When Operate As itself can't make the call, you get an HTTP error instead. See Errors.
What counts as a call
Only API calls count against your plan's API call allowance. Each call that reaches a service is one, whatever status it answers with. Calls Operate As refuses before reaching the service don't count. See Plans and limits.
OpenAPI
https://api.operate.as/api/openapi.jsonGenerate a client in another language, or import it into Postman or Insomnia. Each pass-through method has its own operation: passThroughGet, passThroughPost and so on.