Base URL
/v1/e/ path.
Authentication
Send a ManyPI API key as a bearer token on every request:/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.
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 returns429; 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 return200, except:
Errors
Errors carry a human-readableerror, 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.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.
