Omni Dashboard downloads API

Download dashboards and tiles as PDF, PNG, XLSX, CSV, or JSON files

OpenAPI Specification

omni-dashboard-downloads-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Omni AI Dashboard downloads API
  description: "The Omni REST API provides programmatic access to your Omni instance for managing users, documents, queries, schedules, and more.  \n"
  version: 1.0.0
  contact:
    name: Omni Support
    url: https://docs.omni.co
servers:
- url: https://{instance}.omniapp.co/api
  description: Production
  variables:
    instance:
      default: blobsrus
      description: Your production Omni instance subdomain
- url: https://{instance}.playground.exploreomni.dev/api
  description: Playground
  variables:
    instance:
      default: blobsrus
      description: Your playground Omni instance subdomain
security:
- bearerAuth: []
- orgApiKey: []
tags:
- name: Dashboard downloads
  description: Download dashboards and tiles as PDF, PNG, XLSX, CSV, or JSON files
paths:
  /v1/dashboards/{dashboardId}/download:
    post:
      tags:
      - Dashboard downloads
      summary: Initiate download
      x-mint:
        content: "Starts an asynchronous download job for a dashboard or single tile.\n\nThis API supports multiple output formats and provides an asynchronous workflow: initiate a download, poll for completion, then retrieve the file.\n\n<Note>\n  Only one download per dashboard per user is allowed at a time. If a download is already in progress for the specified dashboard, the request will return a `409 Conflict` response with the existing job ID.\n</Note>\n"
      security:
      - bearerAuth: []
      operationId: initiateDashboardDownload
      parameters:
      - name: dashboardId
        in: path
        required: true
        schema:
          type: string
        description: The dashboard identifier (ID or document UUID)
      - name: userId
        in: query
        required: false
        schema:
          type: string
        description: 'The user ID to run the download as. Only valid when authenticating with an organization API key. Use the [List users](/api/users/list-users) or [List embed users](/api/users/list-embed-users) endpoints to retrieve user IDs.

          '
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - format
              properties:
                format:
                  type: string
                  enum:
                  - pdf
                  - png
                  - csv
                  - xlsx
                  - json
                  description: 'Output format:


                    | Format | Full dashboard | Single tile | Notes |

                    |--------|----------------|-------------|-------|

                    | PDF    | Yes            | Yes         |       |

                    | PNG    | Yes            | Yes         |       |

                    | XLSX   | Yes            | Yes         |       |

                    | CSV    | Yes (as ZIP)   | Yes         | For full dashboards, delivery will be a zip file containing one CSV per tile |

                    | JSON   | No             | Yes         | Only single tile is supported. Requires `queryIdentifierMapKey` to be specified. |

                    '
                filename:
                  type: string
                  maxLength: 255
                  description: Custom filename for the downloaded file. Defaults to the dashboard name.
                queryIdentifierMapKey:
                  type: string
                  description: 'Tile identifier to download a single tile instead of the full dashboard. Required for XLSX and JSON formats if `overrideRowLimit=true`.

                    '
                filterConfig:
                  type: object
                  description: Dashboard filter values to apply before rendering
                paperFormat:
                  type: string
                  enum:
                  - fit_page
                  - letter
                  - legal
                  - tabloid
                  - a3
                  - a4
                  default: fit_page
                  description: '**Applicable to PDF and PNG formats**. Page size.

                    '
                paperOrientation:
                  type: string
                  enum:
                  - portrait
                  - landscape
                  description: '**Applicable to PDF and PNG formats**. Page orientation.

                    '
                hideTitle:
                  type: boolean
                  default: false
                  description: '**Applicable to PDF and PNG formats**. If `true`, hide the dashboard title in the output.

                    '
                showFilters:
                  type: boolean
                  default: true
                  description: '**Applicable to PDF and PNG formats**. If `true`, display applied filter values in the output.

                    '
                expandTablesToShowAllRows:
                  type: boolean
                  description: '**Applicable to PDF and PNG formats**. If `true`, expand table tiles to display all rows.

                    '
                singleColumnLayout:
                  type: boolean
                  description: '**Applicable to PDF and PNG formats**. If `true`, render tiles in a single column layout.

                    '
                enableFormatting:
                  type: boolean
                  default: false
                  description: '**Applicable to CSV, XLSX, and JSON formats**. If `true`, preserve number and date formatting.

                    '
                hideHiddenFields:
                  type: boolean
                  default: false
                  description: '**Applicable to CSV and XLSX formats**. If `true`, exclude hidden fields from the output.

                    '
                overrideRowLimit:
                  type: boolean
                  default: false
                  description: '**Applicable to CSV, XLSX, and JSON formats**. Used with `maxRowLimit`. If `true`, remove the default row limit.


                    If `true` for XLSX and JSON formats, a `queryIdentifierMapKey` is required.

                    '
                maxRowLimit:
                  type: integer
                  minimum: 1
                  maximum: 1000000
                  description: '**Applicable to CSV, XLSX, and JSON formats**. Maximum number of rows to export. Can be used with `overrideRowLimit` to export more rows than the default row limit.

                    '
            examples:
              fullDashboardPdf:
                summary: Download full dashboard as PDF
                value:
                  format: pdf
                  paperFormat: letter
                  paperOrientation: landscape
              singleTileJson:
                summary: Download single tile as JSON
                value:
                  format: json
                  queryIdentifierMapKey: '1'
              csvWithOptions:
                summary: Download as CSV with formatting
                value:
                  format: csv
                  enableFormatting: true
                  overrideRowLimit: true
                  maxRowLimit: 50000
      responses:
        '200':
          description: Download initiated successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  job_id:
                    type: string
                    format: uuid
                    description: The job ID to use for checking status and downloading the file
                  message:
                    type: string
                    description: Success message
              example:
                job_id: 550e8400-e29b-41d4-a716-446655440000
                message: Download initiated successfully
        '400':
          description: 'Bad Request. Possible causes:


            - Missing required `format` field

            - Invalid format value

            - Invalid options for the specified format

            - Malformed JSON body

            - Invalid UUID format

            '
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Insufficient permissions to download the specified dashboard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Dashboard not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '409':
          description: A download is already in progress for the specified dashboard
          content:
            application/json:
              schema:
                type: object
                properties:
                  detail:
                    type: string
                    description: Error message
                  existing_job_id:
                    type: string
                    format: uuid
                    description: The ID of the existing in-progress job
                  status:
                    type: string
                    description: The status of the existing job
              example:
                detail: A download is already in progress for this dashboard. Please wait for it to complete or check its status.
                existing_job_id: 550e8400-e29b-41d4-a716-446655440000
                status: EXECUTING
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/dashboards/{dashboardId}/download/{jobId}/status:
    get:
      tags:
      - Dashboard downloads
      summary: Check download status
      x-mint:
        content: "Retrieves the current status of a dashboard download job. Poll this endpoint to determine when the file is ready.\n\nThe response will contain one of the following statuses:\n\n| Status        | Description                                    | Next Step                        |\n|---------------|------------------------------------------------|----------------------------------|\n| `in_progress` | Job is still processing                    | Continue polling                 |\n| `complete`    | File is ready                              | Call the [Download endpoint](/api/dashboard-downloads/download-file)       |\n| `error`       | Job failed - see `error` field for details | Review error and retry if needed |\n\n<Tip>\n  We recommend the following when polling:\n\n  - Use a reasonable polling interval (2-5 seconds)\n  - Avoid polling more frequently than once per second\n</Tip>\n"
      security:
      - bearerAuth: []
      operationId: getDashboardDownloadStatus
      parameters:
      - name: dashboardId
        in: path
        required: true
        schema:
          type: string
        description: The dashboard identifier. This must match the ID of the original download request.
      - name: jobId
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: The job ID returned from the [Initiate dashboard download endpoint](/api/dashboard-downloads/initiate-download)
      responses:
        '200':
          description: Job status retrieved successfully
          content:
            application/json:
              schema:
                type: object
                properties:
                  job_id:
                    type: string
                    format: uuid
                    description: The job ID
                  status:
                    type: string
                    enum:
                    - in_progress
                    - complete
                    - error
                    description: Current status of the download job
                  format:
                    type: string
                    enum:
                    - pdf
                    - png
                    - csv
                    - xlsx
                    - json
                    description: The requested output format
                  created_at:
                    type: string
                    format: date-time
                    description: When the job was created
                  error:
                    type: string
                    description: Error message. Only present when status is `error`.
              examples:
                inProgress:
                  summary: Job in progress
                  value:
                    job_id: 550e8400-e29b-41d4-a716-446655440000
                    status: in_progress
                    format: pdf
                    created_at: '2024-01-15T10:30:00Z'
                complete:
                  summary: Job complete
                  value:
                    job_id: 550e8400-e29b-41d4-a716-446655440000
                    status: complete
                    format: pdf
                    created_at: '2024-01-15T10:30:00Z'
                error:
                  summary: Job failed
                  value:
                    job_id: 550e8400-e29b-41d4-a716-446655440000
                    status: error
                    format: pdf
                    created_at: '2024-01-15T10:30:00Z'
                    error: All queries failed.
        '400':
          description: Invalid job ID format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Job not found or does not belong to the specified dashboard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /v1/dashboards/{dashboardId}/download/{jobId}:
    get:
      tags:
      - Dashboard downloads
      summary: Download file
      x-mint:
        content: "<Note>\n  Only call this endpoint when the [Check download status endpoint](/api/dashboard-downloads/check-download-status) returns a `complete` status.\n</Note>\n\nRetrieves the completed dashboard download file.\n\nThe response will include appropriate headers for the file type:\n\n- `Content-Type` -  MIME type based on format (e.g., `application/pdf`)\n- `Content-Disposition` - Attachment with filename (e.g., `attachment; filename=\"Dashboard Name.pdf\"`)\n- `Content-Length` - File size in bytes (when available)\n"
      security:
      - bearerAuth: []
      operationId: downloadDashboardFile
      parameters:
      - name: dashboardId
        in: path
        required: true
        schema:
          type: string
        description: The dashboard identifier. This must match the ID of the original download request.
      - name: jobId
        in: path
        required: true
        schema:
          type: string
          format: uuid
        description: The job ID returned from the [Initiate dashboard download endpoint](/api/dashboard-downloads/initiate-download)
      responses:
        '200':
          description: File download successful
          content:
            application/pdf:
              schema:
                type: string
                format: binary
            image/png:
              schema:
                type: string
                format: binary
            text/csv:
              schema:
                type: string
                format: binary
            application/vnd.openxmlformats-officedocument.spreadsheetml.sheet:
              schema:
                type: string
                format: binary
            application/json:
              schema:
                type: object
                description: Query result data
            application/zip:
              schema:
                type: string
                format: binary
                description: "**Applicable to full dashboard downloads in CSV format.** ZIP file containing CSV files. \n"
        '202':
          description: Job still in progress. Poll the [Check download status endpoint](/api/dashboard-downloads/check-download-status) first.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '400':
          description: Invalid job ID format
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '403':
          description: Insufficient permissions
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '404':
          description: Job not found or does not belong to the specified dashboard
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '405':
          $ref: '#/components/responses/MethodNotAllowed'
        '410':
          description: Job failed. Call the [Check download status endpoint](/api/dashboard-downloads/check-download-status) for error details.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Error'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          description: HTTP response code for the error
          example: <response_code>
        message:
          type: string
          description: Detailed error description
          example: <error_reason>
  responses:
    TooManyRequests:
      description: Too Many Requests - Rate limit exceeded (60 requests/minute)
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    MethodNotAllowed:
      description: Method Not Allowed - Invalid HTTP method for this endpoint
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Can be either an [Organization API Key](/api/authentication#organization-api-keys) or [Personal Access Token (PAT)](/api/authentication#token-types).


        Include in the `Authorization` header as: `Bearer YOUR_TOKEN`

        '
    orgApiKey:
      type: http
      scheme: bearer
      bearerFormat: JWT
      description: 'Requires an [Organization API Key](/api/authentication#organization-api-keys). Personal Access Tokens (PATs) are not supported for this endpoint.


        Include in the `Authorization` header as: `Bearer ORGANIZATION_API_KEY`

        '