> ## 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.

# Download a task's work as a zip

> Streams the tree of the task branch's commit as a zip: its tracked files, under the repository's ignore rules, without the git history. The task's workspace produces it, woken when idle.

Use this tool when you need to:
- Take a task's work out of Aether without GitHub
- Keep the files of a task in a project with no repository

Examples:
- GET /tasks/{taskID}/download

Hints:
- taskID is the task's uuid. The answer is application/zip, named by its Content-Disposition header, with the commit in X-Archive-Commit.
- Uncommitted changes in the workspace are not in the zip, which is the branch's: X-Uncommitted-Changes is true when it left some out, and the agent commits them before a download that should carry them.
- Use saveTaskRepository instead to give the work a GitHub repository.
- Restricted to the task's creator or an admin or owner of its organization, through a web session, an API key or an agent host's grant, each acting as its user: another member is refused with 403 control_forbidden, a viewer or billing member with 403 org_role_insufficient, and a task the caller cannot see is 404.
- Refused with 409 task_not_started for a task that has not run, 409 workspace_gone when its workspace is gone with the work, 409 task_has_no_files for a branch with no files yet, 409 task_branch_missing when the workspace no longer has the branch, 409 workspace_outdated when the workspace runs a version without downloads, which only a task bound to a repository can (its agent publishes the task's branch, and the work is taken from GitHub), and 503 when the workspace cannot be started.



## OpenAPI

````yaml api-reference/openapi.json GET /tasks/{taskID}/download
openapi: 3.1.0
info:
  title: Aether API
  version: 0.1.0
servers:
  - url: https://api.runaether.dev
security:
  - bearerAuth: []
paths:
  /tasks/{taskID}/download:
    get:
      tags:
        - tasks
      summary: Download a task's work as a zip
      description: >-
        Streams the tree of the task branch's commit as a zip: its tracked
        files, under the repository's ignore rules, without the git history. The
        task's workspace produces it, woken when idle.


        Use this tool when you need to:

        - Take a task's work out of Aether without GitHub

        - Keep the files of a task in a project with no repository


        Examples:

        - GET /tasks/{taskID}/download


        Hints:

        - taskID is the task's uuid. The answer is application/zip, named by its
        Content-Disposition header, with the commit in X-Archive-Commit.

        - Uncommitted changes in the workspace are not in the zip, which is the
        branch's: X-Uncommitted-Changes is true when it left some out, and the
        agent commits them before a download that should carry them.

        - Use saveTaskRepository instead to give the work a GitHub repository.

        - Restricted to the task's creator or an admin or owner of its
        organization, through a web session, an API key or an agent host's
        grant, each acting as its user: another member is refused with 403
        control_forbidden, a viewer or billing member with 403
        org_role_insufficient, and a task the caller cannot see is 404.

        - Refused with 409 task_not_started for a task that has not run, 409
        workspace_gone when its workspace is gone with the work, 409
        task_has_no_files for a branch with no files yet, 409
        task_branch_missing when the workspace no longer has the branch, 409
        workspace_outdated when the workspace runs a version without downloads,
        which only a task bound to a repository can (its agent publishes the
        task's branch, and the work is taken from GitHub), and 503 when the
        workspace cannot be started.
      operationId: downloadTask
      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
      responses:
        '200':
          content:
            application/zip:
              schema:
                contentMediaType: application/octet-stream
                format: binary
                type: string
          description: The task branch's tree as a zip
          headers:
            X-Archive-Commit:
              description: The commit the tree was taken from
              schema:
                type: string
            X-Uncommitted-Changes:
              description: >-
                true when the workspace held uncommitted changes, which the zip
                leaves out: ask the agent to commit them, then download again
              schema:
                enum:
                  - 'true'
                  - 'false'
                type: string
        '400':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Unauthorized
        '403':
          content:
            application/json:
              schema:
                anyOf:
                  - $ref: '#/components/schemas/TasksErrorResponse'
                  - $ref: '#/components/schemas/OrgAuthorizationErrorResponse'
                  - $ref: '#/components/schemas/ControlForbiddenErrorResponse'
          description: Forbidden
        '404':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Not Found
        '409':
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/TasksErrorResponse'
          description: Conflict
        '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:
    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
    ControlForbiddenErrorResponse:
      additionalProperties: false
      properties:
        code:
          enum:
            - control_forbidden
          type: string
        error:
          minLength: 1
          type: string
      required:
        - error
        - code
      type: object
    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
  securitySchemes:
    bearerAuth:
      bearerFormat: JWT
      scheme: bearer
      type: http

````

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