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

# Download submission bundle

> Returns a manifest of every file that makes up a completed extraction, so you can save the whole thing to disk: `guidelines.json` (the design system, inline in `content`), the captured HTML, CSS, and screenshot, and the logos, media, and icons referenced by the design system.

Each entry names a relative `path` and carries either inline `content` or a `url` to download. Assets are mirrored to the engine's own storage first, so the URLs stay valid even when the origin site changes.

Authentication is optional, on the same terms as the result endpoint. The submission must be `completed`: an in-progress one returns `409 NOT_READY`.



## OpenAPI

````yaml api-reference/openapi.json GET /design/submissions/{id}/download
openapi: 3.1.0
info:
  title: Taste Engine Design API
  version: 1.0.0
  description: >-
    Public REST API for the Taste Engine. Submit a URL, extract a structured
    design system from any website, search the brand corpus by aesthetic, and
    ground prompts in real brand profiles.


    All requests are authenticated with an API key sent in the `X-API-Key`
    header. Create one directly in the Engine dashboard at
    https://engine.tastelabs.com/app/api-keys.
  contact:
    name: Taste Engine Support
    email: support@thetaste.ai
servers:
  - url: https://api.tastelabs.com
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Account
    description: Identity of the authenticated API key holder.
  - name: Submissions
    description: >-
      Create and track extraction jobs, then retrieve the resulting design
      system.
  - name: Prompts
    description: Rewrite prompts grounded in an extracted brand profile.
  - name: Search
    description: >-
      Find brands in the curated corpus by describing an aesthetic, or by
      similarity to one of your own extractions.
  - name: Brand adherence
    description: >-
      Judge how well a page adheres to a reference site's brand: submit a pair
      of URLs, poll the job, then read the verdict.
paths:
  /design/submissions/{id}/download:
    get:
      tags:
        - Submissions
      summary: Download submission bundle
      description: >-
        Returns a manifest of every file that makes up a completed extraction,
        so you can save the whole thing to disk: `guidelines.json` (the design
        system, inline in `content`), the captured HTML, CSS, and screenshot,
        and the logos, media, and icons referenced by the design system.


        Each entry names a relative `path` and carries either inline `content`
        or a `url` to download. Assets are mirrored to the engine's own storage
        first, so the URLs stay valid even when the origin site changes.


        Authentication is optional, on the same terms as the result endpoint.
        The submission must be `completed`: an in-progress one returns `409
        NOT_READY`.
      operationId: downloadSubmission
      parameters:
        - $ref: '#/components/parameters/SubmissionId'
      responses:
        '200':
          description: The bundle manifest.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/SubmissionManifest'
              example:
                submission_id: sub_2f9a1c7b
                extraction_id: ext_8d3e5a10
                files:
                  - path: guidelines.json
                    content: |-
                      {
                        "profile": { ... }
                      }
                  - path: crawl/html.html
                    url: https://storage.example.com/...
                  - path: crawl/screenshot.jpeg
                    url: https://storage.example.com/...
        '404':
          $ref: '#/components/responses/NotFound'
        '409':
          description: The extraction has not completed yet. Keep polling.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
              example:
                detail:
                  error: NOT_READY
                  message: Submission is extracting
        '500':
          $ref: '#/components/responses/InternalError'
      security:
        - ApiKeyAuth: []
        - {}
components:
  parameters:
    SubmissionId:
      name: id
      in: path
      required: true
      description: The `submission_id` returned when the submission was created.
      schema:
        type: string
  schemas:
    SubmissionManifest:
      type: object
      description: A flat list of the files that make up a completed extraction.
      properties:
        submission_id:
          type: string
        extraction_id:
          type:
            - string
            - 'null'
        files:
          type: array
          items:
            $ref: '#/components/schemas/SubmissionManifestEntry'
      required:
        - submission_id
        - files
    Error:
      type: object
      description: >-
        Standard error envelope for non-2xx responses: the machine-readable
        `error` code and the human-readable `message` are nested under `detail`.
        Validation errors (`422`) and search failures (`502`, `503`) shape
        `detail` differently; see those responses.
      properties:
        detail:
          type: object
          properties:
            error:
              type: string
              description: Machine-readable error code.
              examples:
                - UNAUTHORIZED
                - FORBIDDEN
                - NOT_FOUND
                - NOT_READY
            message:
              type: string
              description: Human-readable explanation of the error.
          required:
            - error
            - message
          additionalProperties: true
      required:
        - detail
    SubmissionManifestEntry:
      type: object
      description: >-
        One file in the bundle. Exactly one of `content` or `url` is set:
        `content` is inline text to write at `path`, `url` is a file to download
        to `path`.
      properties:
        path:
          type: string
          description: Relative path to write the file to, e.g. `crawl/html.html`.
        url:
          type:
            - string
            - 'null'
          format: uri
          description: Download URL, for files stored as artifacts.
        content:
          type:
            - string
            - 'null'
          description: Inline file contents, for files generated from the result.
      required:
        - path
  responses:
    NotFound:
      description: The resource was not found or is not accessible with these credentials.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            detail:
              error: NOT_FOUND
              message: Submission not found
    InternalError:
      description: An unexpected server error occurred. The body is plain text.
      content:
        text/plain:
          example: Internal Server Error
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: X-API-Key
      description: >-
        API key issued by the Taste Engine. Create one in the dashboard at
        https://engine.tastelabs.com/app/api-keys.

````