Tasks
For instructions on how to authenticate to use this endpoint, see API overview.
Endpoints
POST | |
POST | |
POST | |
POST | |
POST | |
POST | |
POST | |
POST | |
POST | |
GET |
Create tasks runs artifacts dismiss
Hides artifacts from clients without deleting them from storage, so a file dismissed by mistake can be restored.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- artifact_idsarray
- dismissedbooleanDefault:
true
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /dismissExample response
Status 200 Run with updated artifact manifest
Status 404 Artifact not found
Create tasks runs artifacts dismiss
Hides artifacts from clients without deleting them from storage, so a file dismissed by mistake can be restored.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- artifact_idsarray
- dismissedbooleanDefault:
true
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /dismissExample response
Status 200 Run with updated artifact manifest
Status 404 Artifact not found
Create tasks runs artifacts download
Streams artifact content for a task run artifact after validating that it belongs to the run.
Required API key scopes
task:readPath parameters
- idstring
- task_idstring
Request parameters
- storage_pathstring
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /downloadExample response
Status 200 Artifact content
Status 400 Invalid request
Status 404 Artifact not found
Create tasks runs artifacts download
Streams artifact content for a task run artifact after validating that it belongs to the run.
Required API key scopes
task:readPath parameters
- idstring
- task_idstring
Request parameters
- storage_pathstring
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /downloadExample response
Status 200 Artifact content
Status 400 Invalid request
Status 404 Artifact not found
Create tasks runs artifacts finalize upload
Verify directly uploaded S3 objects and attach them to the run artifact manifest.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- artifactsarray
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /finalize_uploadExample response
Status 200 Run with updated artifact manifest
Status 400 Invalid artifact payload
Status 404 Run not found
Create tasks runs artifacts finalize upload
Verify directly uploaded S3 objects and attach them to the run artifact manifest.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- artifactsarray
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /finalize_uploadExample response
Status 200 Run with updated artifact manifest
Status 400 Invalid artifact payload
Status 404 Run not found
Create tasks runs artifacts prepare upload
Reserve S3 object keys for task artifacts and return presigned POST forms for direct uploads.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- artifactsarray
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /prepare_uploadExample response
Status 200 Prepared uploads for the requested artifacts
Status 400 Invalid artifact payload
Status 404 Run not found
Create tasks runs artifacts prepare upload
Reserve S3 object keys for task artifacts and return presigned POST forms for direct uploads.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- artifactsarray
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /prepare_uploadExample response
Status 200 Prepared uploads for the requested artifacts
Status 400 Invalid artifact payload
Status 404 Run not found
Create tasks runs artifacts presign
Returns a temporary, signed URL that can be used to download a specific artifact.
Required API key scopes
task:readPath parameters
- idstring
- task_idstring
Request parameters
- storage_pathstring
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /presignExample response
Status 200 Presigned URL for the requested artifact
Status 400 Invalid request
Status 404 Artifact not found
Create tasks runs artifacts presign
Returns a temporary, signed URL that can be used to download a specific artifact.
Required API key scopes
task:readPath parameters
- idstring
- task_idstring
Request parameters
- storage_pathstring
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /presignExample response
Status 200 Presigned URL for the requested artifact
Status 400 Invalid request
Status 404 Artifact not found
Create tasks runs artifacts references
Attach live PostHog object references to the run artifact manifest without uploading files.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- referencesarray
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /referencesExample response
Status 200 Run with updated reference artifacts
Status 404 Run not found
Create tasks runs artifacts references
Attach live PostHog object references to the run artifact manifest without uploading files.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- referencesarray
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /artifacts /referencesExample response
Status 200 Run with updated reference artifacts
Status 404 Run not found
Create tasks runs cancel
Stop an active cloud run. Interrupts the agent, snapshots interactive sessions for later resume, tears down the sandbox, and marks the run cancelled. Idempotent: cancelling a finished run returns it unchanged.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- reasonstring | null
- only_if_awaiting_first_messagebooleanDefault:
false
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /cancelExample response
Status 200 Run already finished, or `only_if_awaiting_first_message` was set and the run has since received its first message; returned unchanged
Status 202 Cancellation accepted
Status 400 Run is not a cloud run
Status 404 Task run not found
Status 503 Cancellation could not be delivered; safe to retry
Create tasks runs cancel
Stop an active cloud run. Interrupts the agent, snapshots interactive sessions for later resume, tears down the sandbox, and marks the run cancelled. Idempotent: cancelling a finished run returns it unchanged.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- reasonstring | null
- only_if_awaiting_first_messagebooleanDefault:
false
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /cancelExample response
Status 200 Run already finished, or `only_if_awaiting_first_message` was set and the run has since received its first message; returned unchanged
Status 202 Cancellation accepted
Status 400 Run is not a cloud run
Status 404 Task run not found
Status 503 Cancellation could not be delivered; safe to retry
Create tasks runs clear conversation
Record a /clear boundary in a finished run's log so the next run in the chain starts with an empty conversation. Its artifacts and visible history are unaffected. Only for a finished run: an active one has an agent that owns the clear, so send /clear to it as an ordinary message instead.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /clear_conversationExample response
Status 200 Run with the boundary recorded
Status 404 Run not found
Status 409 Run is still active; send /clear to its agent
Status 503 Log is locked by another append; retry
Create tasks runs clear conversation
Record a /clear boundary in a finished run's log so the next run in the chain starts with an empty conversation. Its artifacts and visible history are unaffected. Only for a finished run: an active one has an agent that owns the clear, so send /clear to it as an ordinary message instead.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /clear_conversationExample response
Status 200 Run with the boundary recorded
Status 404 Run not found
Status 409 Run is still active; send /clear to its agent
Status 503 Log is locked by another append; retry
Create tasks runs command
Queue user_message JSON-RPC commands through the task workflow and forward sandbox control commands to the agent server. Supports user_message, cancel, close, permission_response, set_config_option, mcp_response, side_question, native Pi RPC commands, and Pi queue operations. Retry loop: a 503 is transient (sandbox_not_ready means the command arrived before the live run's command channel came up; agent_session_not_ready means an approval was rejected before execution while the agent starts) — retry it until the request you are answering expires. A 502 (agent server unreachable) or 504 (agent server timed out) means delivery is unknown; retry only when the command method is safe to retry. A 409 run_ended is final: the run is over and its sandbox is gone. HTTP 200 preserves JSON-RPC errors; permission acceptance requires result.resolved=true.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- jsonrpc
- method
- paramsobject
- id
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /commandExample response
Status 200 Agent server response
Status 400 Invalid command — fatal, do not retry. (Legacy exception: interactive PostHog Desktop grants still receive the transient `sandbox_not_ready` condition as a 400 for every method except `credential_response`, because shipped Desktop builds branch on that status; API callers always get it as a 503.)
Status 403 PostHog Desktop access is required to message this run's agent
Status 404 Task run not found
Status 409 Final, do not retry. Task run workflow has ended; `permission_target_ended` for an ended approval target; `run_ended` when the run is completed, failed, or cancelled and its sandbox is cleaned up — unlike `sandbox_not_ready`, nothing will ever come up
Status 429 Organization reached its PostHog Desktop usage limit
Status 502 Agent server unreachable
Status 503 Transient, retry after `Retry-After` until the request you are answering expires. Code `sandbox_not_ready`: the run is still live but its sandbox's command channel is not reachable yet — the usual answer to a command sent as soon as the run asks for one, such as a credential_response (a 409 `run_ended` ends that loop). Code `agent_session_not_ready`: approval rejected before execution while the agent starts. Or PostHog Desktop access could not be verified.
Create tasks runs command
Queue user_message JSON-RPC commands through the task workflow and forward sandbox control commands to the agent server. Supports user_message, cancel, close, permission_response, set_config_option, mcp_response, side_question, native Pi RPC commands, and Pi queue operations. Retry loop: a 503 is transient (sandbox_not_ready means the command arrived before the live run's command channel came up; agent_session_not_ready means an approval was rejected before execution while the agent starts) — retry it until the request you are answering expires. A 502 (agent server unreachable) or 504 (agent server timed out) means delivery is unknown; retry only when the command method is safe to retry. A 409 run_ended is final: the run is over and its sandbox is gone. HTTP 200 preserves JSON-RPC errors; permission acceptance requires result.resolved=true.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Request parameters
- jsonrpc
- method
- paramsobject
- id
Response
Example request
POST /api /projects /:project_id /tasks /:task_id /runs /:id /commandExample response
Status 200 Agent server response
Status 400 Invalid command — fatal, do not retry. (Legacy exception: interactive PostHog Desktop grants still receive the transient `sandbox_not_ready` condition as a 400 for every method except `credential_response`, because shipped Desktop builds branch on that status; API callers always get it as a 503.)
Status 403 PostHog Desktop access is required to message this run's agent
Status 404 Task run not found
Status 409 Final, do not retry. Task run workflow has ended; `permission_target_ended` for an ended approval target; `run_ended` when the run is completed, failed, or cancelled and its sandbox is cleaned up — unlike `sandbox_not_ready`, nothing will ever come up
Status 429 Organization reached its PostHog Desktop usage limit
Status 502 Agent server unreachable
Status 503 Transient, retry after `Retry-After` until the request you are answering expires. Code `sandbox_not_ready`: the run is still live but its sandbox's command channel is not reachable yet — the usual answer to a command sent as soon as the run asks for one, such as a credential_response (a 409 `run_ended` ends that loop). Code `agent_session_not_ready`: approval rejected before execution while the agent starts. Or PostHog Desktop access could not be verified.
Retrieve tasks runs connection token
Generate a JWT token for direct connection to the sandbox. Valid for 24 hours.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Response
Example request
GET /api /projects /:project_id /tasks /:task_id /runs /:id /connection_tokenExample response
Status 200 Connection token for direct sandbox connection
Status 403 PostHog Desktop access is required
Status 404 Task run not found
Status 429 Organization reached its PostHog Desktop usage limit
Status 503 PostHog Desktop access could not be verified
Retrieve tasks runs connection token
Generate a JWT token for direct connection to the sandbox. Valid for 24 hours.
Required API key scopes
task:writePath parameters
- idstring
- task_idstring
Response
Example request
GET /api /projects /:project_id /tasks /:task_id /runs /:id /connection_token










