---
title: "Get Task Trajectory"
method: GET
path: "/tasks/{task_id}/trajectory"
tags: ["Tasks"]
---

# Get Task Trajectory

`GET /tasks/{task_id}/trajectory`

Get the trajectory of a task.

## Path parameters

- `task_id` string, uuid, required

## Response `200`

Successful Response

- TaskTrajectoryResponse
  - `trajectory` union[], required — The trajectory of the task
    - union
      - TrajectoryQueuedEvent
        - `event` 'QueuedEvent', required
        - `data` QueuedEvent, required — Emitted to SSE clients when the task is waiting in the device queue.
          - `id` string, required
          - `status` string
      - TrajectoryCreatedEvent
        - `event` 'CreatedEvent', required
        - `data` CreatedEvent, required
          - `id` string, required
          - `streamUrl` string, required
      - TrajectoryExceptionEvent
        - `event` 'ExceptionEvent', required
        - `data` ExceptionEvent, required
          - `exception` string, required
      - TrajectoryCancelEvent
        - `event` 'CancelEvent', required
        - `data` CancelEvent, required
          - `reason` string, required
      - TrajectoryScreenshotEvent
        - `event` 'ScreenshotEvent', required
        - `data` ScreenshotEvent, required
          - `url` string, required
          - `index` integer, required
      - TrajectoryStartEvent
        - `event` 'StartEvent', required
        - `data` StartEvent, required — Implicit entry event sent to kick off a `Workflow.run()`.
      - TrajectoryFinalizeEvent
        - `event` 'FinalizeEvent', required
        - `data` FinalizeEvent, required — Trigger finalization.
          - `success` boolean, required
          - `reason` string, required
      - TrajectoryStopEvent
        - `event` 'StopEvent', required
        - `data` StopEvent, required — Terminal event that signals the workflow has completed. The `result` property contains the return value of the workflow run. When a custom stop event subclass is used, the workflow result is that event instance itself. Examples: ```python # default stop event: result holds the value return StopEvent(result={"answer": 42}) ``` Subclassing to provide a custom result: ```python class MyStopEv(StopEvent): pass @step async def my_step(self, ctx: Context, ev: StartEvent) -> MyStopEv: return MyStopEv(result={"answer": 42})
      - TrajectoryResultEvent
        - `event` 'ResultEvent', required
        - `data` TaskAPIResultEvent, required — Lazy wrapper — avoids importing droidrun at module level. The worker uses droidrun's ResultEvent directly; this model only exists so the API OpenAPI schema can reference it without the heavy droidrun import.
          - `success` boolean, nullable
          - `message` string, nullable
          - `structured_output` object, nullable
          - `steps` integer, nullable
      - TrajectoryManagerInputEvent
        - `event` 'ManagerInputEvent', required
        - `data` ManagerInputEvent, required — Trigger Manager workflow for planning
      - TrajectoryManagerPlanEvent
        - `event` 'ManagerPlanEvent', required
        - `data` ManagerPlanEvent, required — Coordination event from ManagerAgent to MobileAgent. Used for workflow step routing only (NOT streamed to frontend). For internal events with memory_update metadata, see ManagerPlanDetailsEvent.
          - `plan` string, required
          - `current_subgoal` string, required
          - `thought` string, required
          - `answer` string
          - `success` boolean, nullable
      - TrajectoryExecutorInputEvent
        - `event` 'ExecutorInputEvent', required
        - `data` ExecutorInputEvent, required — Trigger Executor workflow for action execution
          - `current_subgoal` string, required
      - TrajectoryExecutorResultEvent
        - `event` 'ExecutorResultEvent', required
        - `data` ExecutorResultEvent, required — Executor finished with action result.
          - `action` object, required
          - `outcome` boolean, required
          - `error` string, required
          - `summary` string, required
      - TrajectoryFastAgentInputEvent
        - `event` 'FastAgentInputEvent', required
        - `data` FastAgentInputEvent, required — Input ready for LLM.
      - TrajectoryFastAgentResponseEvent
        - `event` 'FastAgentResponseEvent', required
        - `data` FastAgentResponseEvent, required — LLM response received.
          - `thought` string, required
          - `code` string, nullable
          - `usage` UsageResult
            - `request_tokens` integer, required
            - `response_tokens` integer, required
            - `total_tokens` integer, required
            - `requests` integer, required
      - TrajectoryFastAgentToolCallEvent
        - `event` 'FastAgentToolCallEvent', required
        - `data` FastAgentToolCallEvent, required — Tool calls ready to execute.
          - `tool_calls_repr` string, required
      - TrajectoryFastAgentOutputEvent
        - `event` 'FastAgentOutputEvent', required
        - `data` FastAgentOutputEvent, required — Tool execution result.
          - `output` string, required
      - TrajectoryFastAgentEndEvent
        - `event` 'FastAgentEndEvent', required
        - `data` FastAgentEndEvent, required — FastAgent finished.
          - `success` boolean, required
          - `reason` string, required
          - `tool_call_count` integer
      - TrajectoryFastAgentExecuteEvent
        - `event` 'FastAgentExecuteEvent', required
        - `data` FastAgentExecuteEvent, required
          - `instruction` string, required
      - TrajectoryFastAgentResultEvent
        - `event` 'FastAgentResultEvent', required
        - `data` FastAgentResultEvent, required
          - `success` boolean, required
          - `reason` string, required
          - `instruction` string, required
      - TrajectoryToolExecutionEvent
        - `event` 'ToolExecutionEvent', required
        - `data` ToolExecutionEvent, required — Emitted after every tool call dispatched through ToolRegistry.
          - `tool_name` string, required
          - `tool_args` object, required
          - `success` boolean, required
          - `summary` string, required
      - TrajectoryRecordUIStateEvent
        - `event` 'RecordUIStateEvent', required
        - `data` RecordUIStateEvent, required
          - `url` string, required
          - `index` integer, required
      - TrajectoryManagerContextEvent
        - `event` 'ManagerContextEvent', required
        - `data` ManagerContextEvent, required — Context prepared, ready for LLM call.
      - TrajectoryManagerResponseEvent
        - `event` 'ManagerResponseEvent', required
        - `data` ManagerResponseEvent, required — LLM response received, ready for parsing.
          - `response` string, required
          - `usage` UsageResult
            - `request_tokens` integer, required
            - `response_tokens` integer, required
            - `total_tokens` integer, required
            - `requests` integer, required
      - TrajectoryManagerPlanDetailsEvent
        - `event` 'ManagerPlanDetailsEvent', required
        - `data` ManagerPlanDetailsEvent, required — Plan parsed and ready (internal event with full details).
          - `plan` string, required
          - `subgoal` string, required
          - `thought` string, required
          - `answer` string
          - `memory_update` string
          - `progress_summary` string
          - `success` boolean, nullable
          - `full_response` string
      - TrajectoryExecutorContextEvent
        - `event` 'ExecutorContextEvent', required
        - `data` ExecutorContextEvent, required — Context prepared, ready for LLM call.
          - `subgoal` string, required
      - TrajectoryExecutorResponseEvent
        - `event` 'ExecutorResponseEvent', required
        - `data` ExecutorResponseEvent, required — LLM response received, ready for parsing.
          - `response` string, required
          - `usage` UsageResult
            - `request_tokens` integer, required
            - `response_tokens` integer, required
            - `total_tokens` integer, required
            - `requests` integer, required
      - TrajectoryExecutorActionEvent
        - `event` 'ExecutorActionEvent', required
        - `data` ExecutorActionEvent, required — Action parsed, ready to execute.
          - `action_json` string, required
          - `thought` string, required
          - `description` string, required
          - `full_response` string
      - TrajectoryExecutorActionResultEvent
        - `event` 'ExecutorActionResultEvent', required
        - `data` ExecutorActionResultEvent, required — Action execution result (internal event with full details).
          - `action` object, required
          - `success` boolean, required
          - `error` string, required
          - `summary` string, required
          - `thought` string
          - `full_response` string
      - TrajectoryUserMessageEvent
        - `event` 'UserMessageEvent', required
        - `data` UserMessageEvent, required — Tracks the lifecycle of an external user message: queued → applied | dropped.
          - `action` string, required
          - `message_ids` string[], required
          - `consumer` string, nullable
          - `reason` string, nullable
          - `step_number` integer, nullable
      - TrajectoryUnknownEvent
        - `event` string, required
        - `data` object

## Other responses

- `401` — Unauthorized
- `404` — Not Found
- `422` — Unprocessable Content
- `500` — Internal Server Error

---

[API](https://skmtc.net/droidrun/apis/droidrun-cloud.md) · [All operations](https://skmtc.net/droidrun/apis/droidrun-cloud/llms.txt) · [OpenAPI document](https://skmtc-service-staging.skmtc.workers.dev/v1/apis/droidrun/droidrun-cloud/versions/7f577998739b/schema)
