> ## Documentation Index
> Fetch the complete documentation index at: https://docs.runaether.dev/llms.txt
> Use this file to discover all available pages before exploring further.

# List a task's conversation turns

> One page of a task's conversation turns in the order they began, each summarized by its input, its latest agent text and a count of the messages it owns; the first page holds the newest turns and next_cursor reads the older ones. Where the conversation stands is the task's conversation. Any member of the task's organization may read it, a viewer included; a billing member is refused with 403 org_role_insufficient. A task outside the caller's reach is 404 not_found, and a malformed cursor, or one minted for another task, is 422.



## OpenAPI

````yaml api-reference/openapi.json GET /tasks/{taskID}/turns
openapi: 3.1.0
info:
  title: Aether API
  version: 0.1.0
servers:
  - url: https://api.runaether.dev
security:
  - bearerAuth: []
paths:
  /tasks/{taskID}/turns:
    get:
      tags:
        - tasks
      summary: List a task's conversation turns
      description: >-
        One page of a task's conversation turns in the order they began, each
        summarized by its input, its latest agent text and a count of the
        messages it owns; the first page holds the newest turns and next_cursor
        reads the older ones. Where the conversation stands is the task's
        conversation. Any member of the task's organization may read it, a
        viewer included; a billing member is refused with 403
        org_role_insufficient. A task outside the caller's reach is 404
        not_found, and a malformed cursor, or one minted for another task, is
        422.
      operationId: listTaskTurns
      parameters:
        - in: path
          name: taskID
          required: true
          schema:
            format: uuid
            pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
            type: string
        - explode: false
          in: query
          name: cursor
          schema:
            minLength: 1
            type: string
        - explode: false
          in: query
          name: limit
          schema:
            default: 200
            format: int64
            maximum: 200
            minimum: 1
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                additionalProperties: false
                properties:
                  head_revision:
                    format: int64
                    maximum: 9007199254740991
                    minimum: 0
                    type: integer
                  items:
                    items:
                      $ref: '#/components/schemas/Turn'
                    type: array
                  next_cursor:
                    minLength: 1
                    type:
                      - string
                      - 'null'
                required:
                  - head_revision
                  - items
                  - next_cursor
                type: object
          description: OK
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OrgAuthorizationErrorResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Not Found
        '422':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Unprocessable Entity
        '500':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Internal Server Error
        '503':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Service Unavailable
components:
  schemas:
    Turn:
      additionalProperties: false
      properties:
        activity:
          $ref: '#/components/schemas/ConversationTurnActivitySummary'
        connection_move:
          anyOf:
            - $ref: '#/components/schemas/ConversationTurnMove'
            - type: 'null'
        id:
          format: uuid
          not:
            enum:
              - 00000000-0000-0000-0000-000000000000
          type: string
        latest_agent_message:
          anyOf:
            - $ref: '#/components/schemas/TaskTextMessage'
            - type: 'null'
        members:
          items:
            $ref: '#/components/schemas/TaskUserMessage'
          type: array
        ran_on:
          items:
            $ref: '#/components/schemas/TaskRanOn'
          type: array
        revision_sequence:
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        root_message:
          $ref: '#/components/schemas/TaskUserMessage'
        sequence:
          description: >-
            The turn's place among the task's turns; the turns page orders and
            pages by it.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        state:
          enum:
            - queued
            - running
            - awaiting_input
            - settled
            - errored
          type: string
      required:
        - id
        - sequence
        - root_message
        - members
        - latest_agent_message
        - state
        - activity
        - ran_on
        - connection_move
        - revision_sequence
      type: object
    TasksErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - account_deleting
            - aether_inference_unserved
            - agent_pr_blocked
            - agent_pr_pending
            - agent_profile_changed
            - app_identity_missing
            - attribution_unavailable
            - bad_gateway
            - bad_request
            - caller_inactive
            - conflict
            - connection_harness_mismatch
            - connection_not_held
            - contents_write_required
            - continuation_failed
            - continuation_unavailable
            - control_forbidden
            - creator_github_access_missing
            - embeddings_unavailable
            - fix_not_requested
            - fix_requests_unrecorded
            - forbidden
            - fork_branch_delete_unsupported
            - fork_forbidden
            - gateway_timeout
            - github_claim_unverified
            - github_failed
            - github_identity_mismatch
            - github_identity_required
            - github_push_access_required
            - github_reconnect_required
            - github_ref_not_found
            - gone
            - handed_branch_protected
            - idempotency_key_reused
            - inference_proxy_unavailable
            - insufficient_credits
            - insufficient_inference_balance
            - internal_error
            - invalid_request
            - mcp_server_not_connected
            - message_not_queued
            - method_not_allowed
            - mode_forbidden
            - no_dispatch_target
            - not_acceptable
            - not_found
            - not_implemented
            - onboarding_already_completed
            - onboarding_requirements_missing
            - org_role_insufficient
            - org_suspended
            - payment_required
            - pr_review_actor_required
            - pr_review_publish_forbidden
            - precondition_failed
            - project_archived
            - project_has_no_repository
            - project_repo_disconnected
            - project_repository_differs
            - pull_request_closed
            - pull_request_mirror_failed
            - pull_request_not_mirrored
            - push_file_too_large
            - push_rejected
            - push_secret_detected
            - queued_stop_requires_discard
            - rate_limited
            - repository_administration_not_granted
            - repository_already_connected
            - repository_create_forbidden
            - repository_create_rejected
            - repository_created_not_linked
            - repository_owner_not_caller
            - request_canceled
            - request_timeout
            - request_too_large
            - save_in_progress
            - save_requires_task_creator
            - service_unavailable
            - stack_cycle
            - stack_too_large
            - stack_two_parents
            - stale_execution
            - stale_or_indeterminate
            - stale_pending_input
            - stream_delivery_gap
            - stream_event_conflict
            - task_already_saved
            - task_awaiting_message
            - task_awaiting_tool_response
            - task_bound_at_creation
            - task_branch_diverged
            - task_branch_is_default
            - task_branch_mismatch
            - task_branch_missing
            - task_connection_disconnected
            - task_creator_deleted
            - task_executing
            - task_file_too_large
            - task_has_no_commits
            - task_has_no_files
            - task_has_no_repository
            - task_history_has_merges
            - task_ineligible
            - task_is_child
            - task_not_accepting_messages
            - task_not_pinnable
            - task_not_started
            - task_rebase_in_progress
            - task_settings_changed
            - teleport_unavailable
            - unauthenticated
            - unsigned_aether_head
            - unsigned_commit
            - unsupported_changes
            - unsupported_media_type
            - untyped_error
            - validation_failed
            - working_tree_dirty
            - workspace_git_unavailable
            - workspace_gone
            - workspace_outdated
            - workspace_rejected
          minLength: 1
          type: string
        error:
          minLength: 1
          type: string
        errors:
          items:
            $ref: '#/components/schemas/ErrorDetail'
          type: array
      required:
        - error
        - code
      type: object
    OrgAuthorizationErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - org_membership_required
            - org_role_insufficient
            - org_suspended
            - account_deleting
            - agent_host_route_not_allowed
            - credential_kind_not_admitted
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    ConversationTurnActivitySummary:
      additionalProperties: false
      properties:
        duration_ms:
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        failed_tool_count:
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        has_activity:
          type: boolean
        has_result_media:
          type: boolean
        item_count:
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
      required:
        - has_activity
        - item_count
        - failed_tool_count
        - duration_ms
        - has_result_media
      type: object
    ConversationTurnMove:
      discriminator:
        mapping:
          fallback_refused: '#/components/schemas/ConversationTurnFallbackRefused'
          moved_here: '#/components/schemas/ConversationTurnMovedHere'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/ConversationTurnMovedHere'
        - $ref: '#/components/schemas/ConversationTurnFallbackRefused'
    TaskTextMessage:
      additionalProperties: false
      properties:
        created_at:
          format: date-time
          type: string
        id:
          description: >-
            A task message's id: a uuid for a message the API queued, or a key
            derived from the message's source (an assistant message, a seam, a
            message replayed from an imported session).
          pattern: >-
            ^(?:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|message:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}:(?:text|thinking):[0-9a-f]{64}|implicit:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}:(?:text|thinking):[0-9]+|seam:compaction:[^:]+:[^:]+|seam:teleport:\S(?:[\s\S]*\S)?|teleport:\S(?:[\s\S]*\S)?:[0-9]{6,})$
          type: string
        kind:
          enum:
            - text
          type: string
        sequence:
          description: The message's place in the conversation.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type: integer
        state:
          enum:
            - done
          type: string
        text:
          type: string
        turn_id:
          format: uuid
          not:
            enum:
              - 00000000-0000-0000-0000-000000000000
          type: string
      required:
        - kind
        - id
        - turn_id
        - sequence
        - state
        - created_at
        - text
      type: object
    TaskUserMessage:
      additionalProperties: false
      properties:
        attachments:
          items:
            $ref: '#/components/schemas/ConversationAttachment'
          type: array
        client_message_id:
          format: uuid
          type: string
        created_at:
          format: date-time
          type: string
        id:
          description: >-
            A task message's id: a uuid for a message the API queued, or a key
            derived from the message's source (an assistant message, a seam, a
            message replayed from an imported session).
          pattern: >-
            ^(?:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}|message:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}:(?:text|thinking):[0-9a-f]{64}|implicit:[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}:(?:text|thinking):[0-9]+|seam:compaction:[^:]+:[^:]+|seam:teleport:\S(?:[\s\S]*\S)?|teleport:\S(?:[\s\S]*\S)?:[0-9]{6,})$
          type: string
        kind:
          enum:
            - user
          type: string
        message_event:
          $ref: '#/components/schemas/TimelineMessageEventCard'
        sender:
          $ref: '#/components/schemas/TaskPerson'
        sequence:
          description: >-
            The message's place in the conversation; null until a turn has
            delivered it.
          format: int64
          maximum: 9007199254740991
          minimum: 0
          type:
            - integer
            - 'null'
        state:
          description: >-
            queued: waiting in the task's queue, and removable. accepted: taken
            into a running turn without being its root (admitted as live input,
            or bundled with the root). processing: the root of the turn running
            now. done: delivered, its turn ended.
          enum:
            - queued
            - accepted
            - processing
            - done
          type: string
        text:
          type: string
        tool_response:
          discriminator:
            mapping:
              ask_user: '#/components/schemas/AskUserToolResponse'
              propose_plan: '#/components/schemas/ProposePlanToolResponse'
            propertyName: tool_name
          oneOf:
            - $ref: '#/components/schemas/AskUserToolResponse'
            - $ref: '#/components/schemas/ProposePlanToolResponse'
        turn_id:
          description: >-
            The conversation turn the message is part of; null while it is
            queued.
          format: uuid
          type:
            - string
            - 'null'
      required:
        - kind
        - id
        - turn_id
        - sequence
        - state
        - text
        - attachments
        - created_at
      type: object
    TaskRanOn:
      discriminator:
        mapping:
          aether: '#/components/schemas/TaskRanOnAether'
          disconnected: '#/components/schemas/TaskRanOnDisconnected'
          stored: '#/components/schemas/TaskRanOnStored'
        propertyName: runs_on
      oneOf:
        - $ref: '#/components/schemas/TaskRanOnAether'
        - $ref: '#/components/schemas/TaskRanOnStored'
        - $ref: '#/components/schemas/TaskRanOnDisconnected'
    ErrorDetail:
      additionalProperties: false
      properties:
        location:
          description: >-
            Where the error occurred, e.g. 'body.items[3].tags' or
            'path.thing-id'
          type: string
        message:
          description: Error message text
          type: string
        value:
          description: The value at the given location
      type: object
    ConversationTurnFallbackRefused:
      additionalProperties: false
      description: >-
        The turn that spent its plan's window, whose fallback the task settings
        write refused, with the refusal.
      properties:
        kind:
          enum:
            - fallback_refused
          type: string
        reason:
          enum:
            - plan_window_spent
          type: string
        refusal:
          minLength: 1
          type: string
        resets_at:
          description: >-
            When the vendor said the plan's window resets; absent when it did
            not say.
          format: date-time
          type: string
      required:
        - kind
        - reason
        - refusal
      type: object
    ConversationTurnMovedHere:
      additionalProperties: false
      description: >-
        The turn re-queued on the fallback, with what the spent window ran on
        and the rule that chose its destination.
      properties:
        from:
          $ref: '#/components/schemas/TaskRanOn'
        kind:
          enum:
            - moved_here
          type: string
        reason:
          enum:
            - plan_window_spent
          type: string
        resets_at:
          description: >-
            When the vendor said the plan's window resets; absent when it did
            not say.
          format: date-time
          type: string
        rule:
          enum:
            - named
            - any_usable
          type: string
      required:
        - kind
        - reason
        - from
        - rule
      type: object
    ConversationAttachment:
      additionalProperties: false
      properties:
        filename:
          minLength: 1
          type: string
        index:
          maximum: 9
          minimum: 0
          type: integer
        media_type:
          minLength: 1
          type: string
        message_id:
          format: uuid
          type: string
        sha256:
          pattern: ^[0-9a-f]{64}$
          type: string
        task_id:
          format: uuid
          type: string
      required:
        - filename
        - media_type
        - task_id
        - message_id
        - index
        - sha256
      type: object
    TimelineMessageEventCard:
      discriminator:
        mapping:
          auto_rebase: '#/components/schemas/TimelineAutoRebaseMessageEvent'
          child_turn_result: '#/components/schemas/TimelineChildTurnResultMessageEvent'
          ci_failure: '#/components/schemas/TimelineCIFailureMessageEvent'
          external: '#/components/schemas/TimelineExternalMessageEvent'
          github_batch: '#/components/schemas/TimelineGitHubBatchMessageEvent'
          idle_compaction: '#/components/schemas/TimelineIdleCompactionMessageEvent'
          local_parent_message: '#/components/schemas/TimelineLocalParentMessageMessageEvent'
          parent_message: '#/components/schemas/TimelineParentMessageMessageEvent'
          pr_comment: '#/components/schemas/TimelinePRCommentMessageEvent'
          pr_review: '#/components/schemas/TimelinePRReviewMessageEvent'
          task_signal_batch: '#/components/schemas/TimelineTaskSignalBatchMessageEvent'
          task_stopped: '#/components/schemas/TaskStoppedMessageEvent'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/TimelinePRCommentMessageEvent'
        - $ref: '#/components/schemas/TimelineCIFailureMessageEvent'
        - $ref: '#/components/schemas/TimelineAutoRebaseMessageEvent'
        - $ref: '#/components/schemas/TimelinePRReviewMessageEvent'
        - $ref: '#/components/schemas/TimelineExternalMessageEvent'
        - $ref: '#/components/schemas/TimelineGitHubBatchMessageEvent'
        - $ref: '#/components/schemas/TimelineParentMessageMessageEvent'
        - $ref: '#/components/schemas/TimelineTaskSignalBatchMessageEvent'
        - $ref: '#/components/schemas/TimelineChildTurnResultMessageEvent'
        - $ref: '#/components/schemas/TimelineLocalParentMessageMessageEvent'
        - $ref: '#/components/schemas/TimelineIdleCompactionMessageEvent'
        - $ref: '#/components/schemas/TaskStoppedMessageEvent'
    TaskPerson:
      discriminator:
        mapping:
          github_account: '#/components/schemas/TaskGitHubPerson'
          user: '#/components/schemas/TaskUserPerson'
        propertyName: kind
      oneOf:
        - $ref: '#/components/schemas/TaskUserPerson'
        - $ref: '#/components/schemas/TaskGitHubPerson'
    AskUserToolResponse:
      additionalProperties: false
      properties:
        data:
          additionalProperties: false
          properties:
            answers:
              additionalProperties:
                items:
                  format: int64
                  minimum: -1
                  type: integer
                type: array
              type: object
            custom_answers:
              additionalProperties:
                type: string
              type: object
          required:
            - answers
          type: object
        tool_name:
          enum:
            - ask_user
          type: string
      required:
        - tool_name
        - data
      type: object
    ProposePlanToolResponse:
      additionalProperties: false
      properties:
        data:
          additionalProperties: false
          properties:
            approved:
              type: boolean
            feedback:
              type: string
          required:
            - approved
          type: object
        tool_name:
          enum:
            - propose_plan
          type: string
      required:
        - tool_name
        - data
      type: object
    TaskRanOnAether:
      additionalProperties: false
      properties:
        runs_on:
          enum:
            - aether
          type: string
      required:
        - runs_on
      type: object
    TaskRanOnDisconnected:
      additionalProperties: false
      properties:
        name:
          minLength: 1
          type: string
        option:
          enum:
            - claude_plan
            - anthropic_api_key
            - chatgpt_plan
            - openai_api_key
            - openrouter_api_key
            - opencode_auth_file
          type: string
        runs_on:
          enum:
            - disconnected
          type: string
      required:
        - runs_on
        - option
        - name
      type: object
    TaskRanOnStored:
      additionalProperties: false
      properties:
        id:
          format: uuid
          type: string
        name:
          minLength: 1
          type: string
        option:
          enum:
            - claude_plan
            - anthropic_api_key
            - chatgpt_plan
            - openai_api_key
            - openrouter_api_key
            - opencode_auth_file
          type: string
        runs_on:
          enum:
            - stored
          type: string
      required:
        - runs_on
        - id
        - option
        - name
      type: object
    TimelineAutoRebaseMessageEvent:
      additionalProperties: false
      properties:
        base_branch:
          minLength: 1
          pattern: \S
          type: string
        branch:
          minLength: 1
          pattern: \S
          type: string
        head_sha:
          minLength: 1
          pattern: \S
          type: string
        kind:
          enum:
            - auto_rebase
          type: string
        mergeable_state:
          minLength: 1
          pattern: \S
          type: string
        pr_number:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        reason:
          type: string
        repo:
          $ref: '#/components/schemas/MessageEventRepo'
        url:
          format: uri
          type: string
      required:
        - kind
        - repo
        - pr_number
      type: object
    TimelineChildTurnResultMessageEvent:
      additionalProperties: false
      properties:
        child_pr_number:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        child_task_id:
          format: uuid
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          type: string
        child_task_name:
          minLength: 1
          pattern: \S
          type: string
        continuation:
          additionalProperties: false
          properties:
            tool:
              enum:
                - aether_read_task_messages
              type: string
          required:
            - tool
          type: object
        kind:
          enum:
            - child_turn_result
          type: string
        outcome:
          additionalProperties: false
          properties:
            content:
              minLength: 1
              pattern: \S
              type: string
            kind:
              enum:
                - response
                - question
                - error
                - pr_ready
              type: string
          required:
            - kind
            - content
          type: object
      required:
        - kind
        - child_task_id
        - outcome
        - child_task_name
      type: object
    TimelineCIFailureMessageEvent:
      additionalProperties: false
      properties:
        branch:
          minLength: 1
          pattern: \S
          type: string
        checks:
          items:
            additionalProperties: false
            properties:
              conclusion:
                minLength: 1
                pattern: \S
                type: string
              job_id:
                format: int64
                maximum: 9007199254740991
                minimum: 1
                type: integer
              name:
                minLength: 1
                pattern: \S
                type: string
              summary:
                type: string
            required:
              - name
              - conclusion
              - job_id
            type: object
          type: array
        kind:
          enum:
            - ci_failure
          type: string
        pr_number:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        repo:
          $ref: '#/components/schemas/MessageEventRepo'
        url:
          format: uri
          type: string
      required:
        - kind
        - repo
        - pr_number
        - checks
      type: object
    TimelineExternalMessageEvent:
      additionalProperties: false
      properties:
        data:
          additionalProperties:
            type:
              - string
              - number
              - boolean
              - 'null'
          properties:
            actor:
              type: string
            context:
              type: string
            title:
              type: string
            url:
              type: string
          propertyNames:
            pattern: \S
            type: string
          type: object
        kind:
          enum:
            - external
          type: string
        source:
          enum:
            - slack
            - linear
            - sentry
            - email
          type: string
      required:
        - kind
        - source
      type: object
    TimelineGitHubBatchMessageEvent:
      additionalProperties: false
      properties:
        events:
          items:
            discriminator:
              mapping:
                ci_failure: '#/components/schemas/TimelineCIFailureMessageEvent'
                pr_comment: '#/components/schemas/TimelinePRCommentMessageEvent'
                pr_review: '#/components/schemas/TimelinePRReviewMessageEvent'
              propertyName: kind
            oneOf:
              - $ref: '#/components/schemas/TimelinePRCommentMessageEvent'
              - $ref: '#/components/schemas/TimelineCIFailureMessageEvent'
              - $ref: '#/components/schemas/TimelinePRReviewMessageEvent'
          minItems: 2
          type: array
        kind:
          enum:
            - github_batch
          type: string
      required:
        - kind
        - events
      type: object
    TimelineIdleCompactionMessageEvent:
      additionalProperties: false
      properties:
        kind:
          enum:
            - idle_compaction
          type: string
      required:
        - kind
      type: object
    TimelineLocalParentMessageMessageEvent:
      additionalProperties: false
      properties:
        client:
          enum:
            - claude-code
            - codex
            - personal-agent
            - mcp-connection
          type: string
        kind:
          enum:
            - local_parent_message
          type: string
        local_conversation_id:
          format: uuid
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          type: string
      required:
        - kind
        - local_conversation_id
        - client
      type: object
    TimelineParentMessageMessageEvent:
      additionalProperties: false
      properties:
        kind:
          enum:
            - parent_message
          type: string
        parent_task_id:
          format: uuid
          pattern: ^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$
          type: string
        parent_task_name:
          minLength: 1
          pattern: \S
          type: string
      required:
        - kind
        - parent_task_id
        - parent_task_name
      type: object
    TimelinePRCommentMessageEvent:
      additionalProperties: false
      properties:
        action:
          minLength: 1
          pattern: \S
          type: string
        author:
          additionalProperties: false
          properties:
            association:
              minLength: 1
              pattern: \S
              type: string
            login:
              minLength: 1
              pattern: \S
              type: string
            type:
              minLength: 1
              pattern: \S
              type: string
          required:
            - login
          type: object
        body:
          minLength: 1
          pattern: \S
          type: string
        branch:
          minLength: 1
          pattern: \S
          type: string
        kind:
          enum:
            - pr_comment
          type: string
        line:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        path:
          minLength: 1
          pattern: \S
          type: string
        pr_number:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        repo:
          $ref: '#/components/schemas/MessageEventRepo'
        review_id:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        review_state:
          minLength: 1
          pattern: \S
          type: string
        reviewer_task_id:
          format: uuid
          type: string
        url:
          format: uri
          type: string
      required:
        - kind
        - repo
        - pr_number
        - author
        - body
      type: object
    TimelinePRReviewMessageEvent:
      additionalProperties: false
      properties:
        action:
          enum:
            - opened
            - synchronize
            - ready_for_review
            - aether_review_comment
            - manual
          type: string
        branch:
          minLength: 1
          pattern: \S
          type: string
        head_sha:
          minLength: 1
          pattern: \S
          type: string
        kind:
          enum:
            - pr_review
          type: string
        pr_number:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        repo:
          $ref: '#/components/schemas/MessageEventRepo'
        url:
          format: uri
          type: string
      required:
        - kind
        - repo
        - pr_number
        - head_sha
        - action
      type: object
    TimelineTaskSignalBatchMessageEvent:
      additionalProperties: false
      properties:
        entries:
          items:
            discriminator:
              mapping:
                auto_rebase: '#/components/schemas/TimelineTaskSignalAutoRebaseMessageEvent'
                child_turn_result: '#/components/schemas/TimelineChildTurnResultMessageEvent'
                ci_failure: '#/components/schemas/TimelineCIFailureMessageEvent'
                pr_comment: '#/components/schemas/TimelinePRCommentMessageEvent'
                pr_review: '#/components/schemas/TimelinePRReviewMessageEvent'
              propertyName: kind
            oneOf:
              - $ref: '#/components/schemas/TimelinePRCommentMessageEvent'
              - $ref: '#/components/schemas/TimelineCIFailureMessageEvent'
              - $ref: '#/components/schemas/TimelineTaskSignalAutoRebaseMessageEvent'
              - $ref: '#/components/schemas/TimelinePRReviewMessageEvent'
              - $ref: '#/components/schemas/TimelineChildTurnResultMessageEvent'
          minItems: 1
          type: array
        kind:
          enum:
            - task_signal_batch
          type: string
      required:
        - kind
        - entries
      type: object
    TaskStoppedMessageEvent:
      additionalProperties: false
      properties:
        initiator:
          discriminator:
            mapping:
              agent: '#/components/schemas/AgentStopInitiator'
              integration: '#/components/schemas/IntegrationStopInitiator'
              local_agent: '#/components/schemas/LocalAgentStopInitiator'
              system: '#/components/schemas/SystemStopInitiator'
              unknown: '#/components/schemas/UnknownStopInitiator'
              user: '#/components/schemas/UserStopInitiator'
            propertyName: kind
          oneOf:
            - $ref: '#/components/schemas/UserStopInitiator'
            - $ref: '#/components/schemas/IntegrationStopInitiator'
            - $ref: '#/components/schemas/SystemStopInitiator'
            - $ref: '#/components/schemas/AgentStopInitiator'
            - $ref: '#/components/schemas/LocalAgentStopInitiator'
            - $ref: '#/components/schemas/UnknownStopInitiator'
        kind:
          enum:
            - task_stopped
          type: string
      required:
        - kind
        - initiator
      type: object
    TaskGitHubPerson:
      additionalProperties: false
      properties:
        github_id:
          format: int64
          minimum: 1
          type: integer
        kind:
          enum:
            - github_account
          type: string
        login:
          minLength: 1
          pattern: \S
          type: string
      required:
        - kind
        - login
        - github_id
      type: object
    TaskUserPerson:
      additionalProperties: false
      properties:
        display_name:
          minLength: 1
          pattern: \S
          type: string
        github_login:
          minLength: 1
          pattern: \S
          type:
            - string
            - 'null'
        kind:
          enum:
            - user
          type: string
        user_id:
          format: uuid
          type: string
      required:
        - kind
        - user_id
        - display_name
        - github_login
      type: object
    MessageEventRepo:
      additionalProperties: false
      properties:
        name:
          minLength: 1
          pattern: \S
          type: string
        owner:
          minLength: 1
          pattern: \S
          type: string
      required:
        - owner
        - name
      type: object
    TimelineTaskSignalAutoRebaseMessageEvent:
      additionalProperties: false
      properties:
        base_branch:
          minLength: 1
          pattern: \S
          type: string
        branch:
          minLength: 1
          pattern: \S
          type: string
        head_sha:
          minLength: 1
          pattern: \S
          type: string
        kind:
          enum:
            - auto_rebase
          type: string
        mergeable_state:
          enum:
            - behind
            - dirty
          type: string
        pr_number:
          format: int64
          maximum: 9007199254740991
          minimum: 1
          type: integer
        reason:
          minLength: 1
          pattern: \S
          type: string
        repo:
          $ref: '#/components/schemas/MessageEventRepo'
        url:
          format: uri
          type: string
      required:
        - kind
        - repo
        - pr_number
        - branch
        - url
        - base_branch
        - head_sha
        - mergeable_state
        - reason
      type: object
    AgentStopInitiator:
      additionalProperties: false
      properties:
        kind:
          enum:
            - agent
          type: string
        parent_task_id:
          format: uuid
          type: string
        parent_task_name:
          minLength: 1
          type: string
      required:
        - kind
        - parent_task_id
        - parent_task_name
      type: object
    IntegrationStopInitiator:
      additionalProperties: false
      properties:
        external_actor_id:
          minLength: 1
          type: string
        kind:
          enum:
            - integration
          type: string
        provider:
          enum:
            - linear
          type: string
      required:
        - kind
        - provider
        - external_actor_id
      type: object
    LocalAgentStopInitiator:
      additionalProperties: false
      properties:
        client:
          enum:
            - claude-code
            - codex
            - personal-agent
            - mcp-connection
          type: string
        kind:
          enum:
            - local_agent
          type: string
        local_conversation_id:
          format: uuid
          type: string
      required:
        - kind
        - local_conversation_id
        - client
      type: object
    SystemStopInitiator:
      additionalProperties: false
      properties:
        kind:
          enum:
            - system
          type: string
        reason:
          enum:
            - history_rollback
            - runtime_billing_failure
            - service_shutdown
          type: string
      required:
        - kind
        - reason
      type: object
    UnknownStopInitiator:
      additionalProperties: false
      properties:
        kind:
          enum:
            - unknown
          type: string
      required:
        - kind
      type: object
    UserStopInitiator:
      additionalProperties: false
      properties:
        kind:
          enum:
            - user
          type: string
        source:
          enum:
            - aether
            - slack
          type: string
        user_id:
          format: uuid
          type: string
      required:
        - kind
        - user_id
        - source
      type: object
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````

This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.