Skip to main content
Everything the ManyPI dashboard does is available over REST. Same endpoints, same permissions, same credit accounting.

Base URL

Published API endpoints live under the same host, on the /v1/e/ path.

Authentication

Send a ManyPI API key as a bearer token on every request:
Create keys in Settings → API keys. That /api/user call is the cheapest way to confirm a key works — it returns the owning account, the key’s permissions and its rate limit. OAuth 2.1 access tokens are accepted anywhere a key is, and resolve to the same user. They are how MCP clients connect without a key.
Keys are secrets. Keep them server-side, one per integration, and scoped to the least they need. Never ship one in frontend JavaScript or commit one to a repository.

Permissions

Keys carry only the permissions you grant them. A call outside a key’s permissions is rejected exactly as an invalid key would be. Each endpoint below states which permission it needs.

API keys and permissions

Rotation, revocation, and the full route-to-permission mapping.

Rate limits

60 requests per minute per active key. OAuth tokens get the same. Exceeding the limit returns 429; the window is one minute, so back off and retry. How many keys you can keep active in parallel depends on your plan. Revoked keys stop counting toward that limit.

Responses

All responses are JSON. Successful calls return 200, except:

Errors

Errors carry a human-readable error, and — where you might want to branch on it — a machine-readable code.

Codes worth handling

Asynchronous work

Anything that browses the web is asynchronous. The pattern is always the same:
1

Start it

POST returns a run id immediately — run_id for agent work, runId for scrapes.
2

Poll it

GET the run until its status is terminal.
3

Handle a pause

An agent run may reach paused, meaning it has a question for you. Read it from result_summary and answer with POST /api/agents/runs/{id}/reply — the same run resumes.
Prefer not to poll? Configure an outbound webhook in Dashboard → Webhooks.

Workspaces and brands

A credential belongs to one workspace, and every call acts on that workspace. Leads are workspace-pooled. Inboxes, campaigns and sequences are brand-scoped — most list endpoints accept ?brand=<id> to narrow or ?brand=all to widen across the workspace.

Core concepts

Workspaces, brands, seats and the three credit types.