Public API

Register tasks and start runs from any system with an organization API key.


The public API lets anything that can send an HTTP request — CI, a support form, Zapier, n8n, your own backend — file work into Peractor and have it run immediately. No extension, no browser session; just an organization API key.

Create a key

In Settings → API keys (editor or dashboard; admins only), create a key. The secret — it starts with prc_ — is shown once: Peractor stores only a hash, so a lost key is replaced, not recovered. Deleting a key revokes it immediately. A key belongs to your organization and is bound to a project, so requests need no ids.

Authenticate

Send the key either way on every call:

Authorization: Bearer prc_your_key
x-peractor-key: prc_your_key

Register a task and run it

POST /api/v1/tasks creates a task in the key's project and starts a run from the workflow's first phase. Only title is required:

curl -X POST https://peractor.com/api/v1/tasks \
  -H "Authorization: Bearer prc_your_key" \
  -H "Content-Type: application/json" \
  -d '{
    "title": "Fix the login bug",
    "description": "Users cannot sign in after the last deploy",
    "labels": ["bug"],
    "url": "https://example.com/ticket/42"
  }'
Field
titleRequired. The task title.
descriptionContext the agent reads before working.
workflowRefWorkflow to run. Falls back to the key's default, then the project's default.
priorityRank in your priority list (1 = highest).
labelsLabels, visible on the task and usable by routing.
urlA backlink shown on the task.

The response is 202:

{ "taskId": "…", "runId": "…", "status": "backlog", "started": true }

started is false only when the project has no runnable workflow. Plan limits apply exactly as everywhere else: past the concurrency cap the run queues and starts by itself; with the monthly quota spent, the task is still registered — it just waits in the backlog.

Poll a run

curl https://peractor.com/api/v1/runs/<runId> \
  -H "Authorization: Bearer prc_your_key"

{ "runId": "…", "taskId": "…", "status": "running", "phase": "implement",
  "title": "Fix the login bug", "prUrl": "https://github.com/…/pull/12",
  "previewUrl": null, "createdAt": "2026-07-25T10:12:00.000Z" }

status is the run lifecycle (see the states); prUrl and previewUrl fill in once a pull request or preview exists. Ids from another organization return 404.

Scope and limits

  • API keys work only under /api/v1/* — they can't call the session API or manage other keys.
  • Outbound callbacks/webhooks on completion and scoped (read-only) keys aren't available yet; poll the run endpoint for now.