Guides
Workflows over the API
List, run and poll the workspace's automations from a script or an agent.
Workflows are the automations built in the app. Over the API they are exposed as three MCP tools under the workflows:run scope: list_workflows, run_workflow, get_workflow_run. There is no REST route for workflows yet; a script calls the MCP endpoint with a JSON-RPC body, which is one POST per call. The starter workflows a workspace can clone are listed publicly at overads.io/templates; templateKey on a listed workflow names the one it came from.
List
curl -sS https://api.overads.io/public/v1/mcp -H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":1,"method":"tools/call","params":{"name":"list_workflows","arguments":{}}}'Each row has id, name, description, enabled, autonomy, triggers (the trigger node types), templateKey, updatedAt. A disabled workflow can still be run manually.
Run
curl -sS https://api.overads.io/public/v1/mcp -H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"run_workflow","arguments":{"workflowId":"WORKFLOW_ID","triggerMeta":{"source":"nightly-job"},"idempotencyKey":"nightly-2026-09-11"}}}'The run is queued and executes in the background; the result is { runId, workflowId, status, dryRun }. Pass dryRun: true to walk the data and condition nodes and report what the action nodes would stage without staging it. triggerMeta values are exposed to nodes as {{trigger.*}}.
A run is refused with plan_limit_reached when the plan's daily run cap is used up, and with a budget message when the monthly AI budget is spent. Report those as the plan limit, not as a failure of the workflow.
Poll
curl -sS https://api.overads.io/public/v1/mcp -H "Authorization: Bearer sk_live_YOUR_KEY" \
-H "Content-Type: application/json" \
-d '{"jsonrpc":"2.0","id":3,"method":"tools/call","params":{"name":"get_workflow_run","arguments":{"runId":"RUN_ID"}}}'statusisqueued,running,succeeded,failedorskipped.costMicrosis null until the run finishes; null is not free.stepsare in order. A step that staged an action for a human to confirm says so; the action has not been performed.proposalCountanddraftPostCountsay what the run left behind for a member to confirm or schedule.
Or skip polling: subscribe to workflow.run.completed and workflow.run.failed on a webhook. Both carry workflowId and runId.
The curl calls above use the legacy single-POST shape (no Accept: text/event-stream, no session), which the server keeps for one release. A long-lived integration should speak Streamable HTTP through an MCP client library instead; see MCP server.