REST API
Everything you can do in the Auto Appy app goes through the same API your code can call.
| Base URL | https://api.autoappy.com |
| Authentication | Authorization: Bearer aa_key_… (API keys) |
| Format | JSON in, JSON out. Send Accept: application/json. |
| Organisation data | Add X-AutoAppy-Workspace: <central organisation ID> |
| Rate limit | 120 requests per minute per key |
The full reference
Section titled “The full reference”The interactive reference lists every endpoint (about 290, in 56 categories), with parameters, examples and a Try it out button. You can also download the OpenAPI file or a Postman collection.
Open the API referenceautoappy.com/api/Downloads: openapi.json · postman.json. The WhatsApp, CRM and AI products have their own references, linked at the top of that page.
Recipes
Section titled “Recipes”List your workflows
Section titled “List your workflows”curl "https://api.autoappy.com/workflows" \ -H "Authorization: Bearer $AUTOAPPY_API_KEY" -H "Accept: application/json"{ "status": "success", "workflows": [ { "id": "7b59a919-85b3-42ee-ab84-6c61757e2736", "name": "Welcome new leads", "status": "Live" } ]}Create a workflow
Section titled “Create a workflow”curl -X POST "https://api.autoappy.com/workflows" \ -H "Authorization: Bearer $AUTOAPPY_API_KEY" -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{"name": "Order follow-up"}'It’s created as a Draft. Adding and configuring steps through the API is possible (see the Workflow graph endpoints in the reference), but most people build in the editor, or ask an assistant through MCP.
Pause or switch on a workflow
Section titled “Pause or switch on a workflow”curl -X POST "https://api.autoappy.com/workflows/WORKFLOW_ID/status" \ -H "Authorization: Bearer $AUTOAPPY_API_KEY" -H "Accept: application/json" \ -H "Content-Type: application/json" \ -d '{"status": "Pause"}'status is one of Live, Pause or Draft.
Run a workflow now
Section titled “Run a workflow now”For workflows that start with an action (the API version of Run once):
curl -X POST "https://api.autoappy.com/workflows/runOnes/WORKFLOW_ID" \ -H "Authorization: Bearer $AUTOAPPY_API_KEY" -H "Accept: application/json"To start a webhook workflow with data, call its webhook URL instead.
Read run history
Section titled “Read run history”curl "https://api.autoappy.com/workflows/WORKFLOW_ID/executions?status=failed" \ -H "Authorization: Bearer $AUTOAPPY_API_KEY" -H "Accept: application/json"status can be all, failed, succeeded or in_progress. Open one run with /workflows/WORKFLOW_ID/executions/RUN_ID to see each step’s result.
import os, requests
API = "https://api.autoappy.com"H = {"Authorization": f"Bearer {os.environ['AUTOAPPY_API_KEY']}", "Accept": "application/json"}
for wf in requests.get(f"{API}/workflows", headers=H).json()["workflows"]: runs = requests.get(f"{API}/workflows/{wf['id']}/executions", params={"status": "failed", "per_page": 5}, headers=H).json() failed = runs.get("summary", {}).get("failed", 0) if failed: print(f"{wf['name']}: {failed} failed run(s)")const API = 'https://api.autoappy.com';const H = { Authorization: `Bearer ${process.env.AUTOAPPY_API_KEY}`, Accept: 'application/json', 'Content-Type': 'application/json' };
const { workflows } = await (await fetch(`${API}/workflows`, { headers: H })).json();for (const wf of workflows.filter((w) => w.status === 'Live')) { await fetch(`${API}/workflows/${wf.id}/status`, { method: 'POST', headers: H, body: JSON.stringify({ status: 'Pause' }) }); console.log('Paused', wf.name);}Errors
Section titled “Errors”Errors come back as JSON with a readable message (or error) and the usual HTTP status codes: 401 (missing or wrong key), 403 (not allowed for this key or account), 404 (not found), 422 (a field is missing or invalid; the response names it), 429 (too many requests), 5xx (server problem; retry later). See What is an API? for a plain-language table.
