Holistics Users & Permissions API

Per-user API keys generated in user settings authorize programmatic access via the X-Holistics-Key header; permissions and row-level access follow the calling user's account scope.

OpenAPI Specification

holistics-openapi.yml Raw ↑
openapi: 3.0.1
info:
  title: Holistics API
  description: >-
    REST API for the Holistics business intelligence and self-service analytics
    platform. Covers the Data Pipeline API (execute data imports/transforms and
    poll ETL jobs), report and dataset query APIs, and asynchronous data export
    (CSV/JSON/XLSX). All requests authenticate with a per-user API key passed in
    the X-Holistics-Key header. Regional hosts are secure.holistics.io (APAC),
    us.holistics.io (US), and eu.holistics.io (EU).
  termsOfService: https://www.holistics.io/terms/
  contact:
    name: Holistics Support
    url: https://www.holistics.io
    email: support@holistics.io
  version: '2.0'
servers:
  - url: https://secure.holistics.io/api/v2
    description: APAC region
  - url: https://us.holistics.io/api/v2
    description: US region
  - url: https://eu.holistics.io/api/v2
    description: EU region
security:
  - HolisticsKey: []
tags:
  - name: Datasets
    description: Query the Holistics dataset semantic layer.
  - name: Reports
    description: Submit report queries and retrieve results.
  - name: Export
    description: Asynchronous report data export jobs.
  - name: Data Pipeline
    description: Execute data imports and transforms.
  - name: Jobs
    description: Poll ETL and export job status.
paths:
  /data_sets:
    get:
      operationId: listDataSets
      tags:
        - Datasets
      summary: List available datasets
      description: Returns the datasets the calling user can query.
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/DataSet'
  /data_sets/{id}:
    get:
      operationId: getDataSet
      tags:
        - Datasets
      summary: Get dataset dimensions and metrics
      description: Returns the available dimensions and metrics for a dataset.
      parameters:
        - $ref: '#/components/parameters/PathId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DataSetDetail'
  /data_sets/{id}/submit_query:
    post:
      operationId: submitDataSetQuery
      tags:
        - Datasets
      summary: Query a dataset
      description: Executes a query against a dataset and returns result rows.
      parameters:
        - $ref: '#/components/parameters/PathId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResult'
  /data_sets/{id}/generate_sql:
    post:
      operationId: generateDataSetSql
      tags:
        - Datasets
      summary: Generate SQL without executing
      description: Returns the SQL that would be generated for a dataset query.
      parameters:
        - $ref: '#/components/parameters/PathId'
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/QueryRequest'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: object
                properties:
                  sql:
                    type: string
  /queries/{report_id}/submit_query.json:
    get:
      operationId: submitReportQuery
      tags:
        - Reports
      summary: Submit a report query job
      description: >-
        Submits a query job for a report. Filter values are passed as query
        parameters. Returns a job id to poll for results.
      parameters:
        - $ref: '#/components/parameters/ReportId'
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSubmitResponse'
  /queries/get_query_results.json:
    get:
      operationId: getQueryResults
      tags:
        - Reports
      summary: Retrieve report query results
      description: Retrieves the paginated results of a submitted query job.
      parameters:
        - name: job_id
          in: query
          required: true
          schema:
            type: string
        - name: _page_size
          in: query
          required: false
          schema:
            type: integer
        - name: _page
          in: query
          required: false
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/QueryResult'
  /queries/{report_id}/submit_export.{format}:
    get:
      operationId: submitReportExport
      tags:
        - Export
      summary: Submit a report export job
      description: >-
        Submits an export job for a report in the given format. Filter values
        are passed as query parameters. Returns an export job id.
      parameters:
        - $ref: '#/components/parameters/ReportId'
        - name: format
          in: path
          required: true
          schema:
            type: string
            enum:
              - csv
              - json
              - xlsx
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSubmitResponse'
  /queries/get_export_results.json:
    get:
      operationId: getExportResults
      tags:
        - Export
      summary: Retrieve export job status
      description: Returns the status of a submitted export job.
      parameters:
        - name: job_id
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
  /exports/download:
    get:
      operationId: downloadExport
      tags:
        - Export
      summary: Download an export result file
      description: >-
        Downloads the exported file once the export job status is success.
      parameters:
        - name: job_id
          in: query
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/octet-stream:
              schema:
                type: string
                format: binary
  /data_imports/{data_import_id}/execute.json:
    post:
      operationId: executeDataImport
      tags:
        - Data Pipeline
      summary: Execute a data import job
      description: Triggers execution of a Holistics data import.
      parameters:
        - name: data_import_id
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSubmitResponse'
  /data_transforms/{data_transform_id}/execute.json:
    post:
      operationId: executeDataTransform
      tags:
        - Data Pipeline
      summary: Execute a data transform job
      description: Triggers execution of a Holistics data transform.
      parameters:
        - name: data_transform_id
          in: path
          required: true
          schema:
            type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/JobSubmitResponse'
  /jobs/{job_id}/logs.json:
    get:
      operationId: getJobLogs
      tags:
        - Jobs
      summary: View running job information
      description: Returns logs and runtime information for a job.
      parameters:
        - name: job_id
          in: path
          required: true
          schema:
            type: string
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Job'
  /jobs/last_run_jobs.json:
    get:
      operationId: getLastRunJobs
      tags:
        - Jobs
      summary: Check status of recent ETL jobs
      description: >-
        Returns the most recent job for each requested data import or transform.
      parameters:
        - name: source_type
          in: query
          required: true
          schema:
            type: string
            enum:
              - DataImport
              - DataTransform
        - name: ids
          in: query
          required: true
          description: Comma-separated list of import or transform IDs.
          schema:
            type: array
            items:
              type: integer
      responses:
        '200':
          description: OK
          content:
            application/json:
              schema:
                type: array
                items:
                  $ref: '#/components/schemas/Job'
components:
  securitySchemes:
    HolisticsKey:
      type: apiKey
      in: header
      name: X-Holistics-Key
      description: Per-user API key generated from Holistics user settings.
  parameters:
    PathId:
      name: id
      in: path
      required: true
      schema:
        type: integer
    ReportId:
      name: report_id
      in: path
      required: true
      schema:
        type: integer
  schemas:
    DataSet:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        title:
          type: string
    DataSetDetail:
      type: object
      properties:
        id:
          type: integer
        name:
          type: string
        dimensions:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              type:
                type: string
        metrics:
          type: array
          items:
            type: object
            properties:
              name:
                type: string
              type:
                type: string
    QueryRequest:
      type: object
      properties:
        dimensions:
          type: array
          description: Fields to group results by.
          items:
            type: string
        metrics:
          type: array
          description: Aggregated measures to calculate.
          items:
            type: string
        filters:
          type: array
          description: Conditions for filtering data.
          items:
            type: object
        limit:
          type: integer
          description: Maximum number of rows returned.
    QueryResult:
      type: object
      properties:
        job_id:
          type: string
        status:
          type: string
        columns:
          type: array
          items:
            type: string
        data:
          type: array
          items:
            type: array
            items: {}
    JobSubmitResponse:
      type: object
      properties:
        job_id:
          type: string
        status:
          type: string
    Job:
      type: object
      properties:
        id:
          type: integer
        status:
          type: string
          description: e.g. running, success, failed.
        source_type:
          type: string
        start_time:
          type: string
          format: date-time
        end_time:
          type: string
          format: date-time
        created_at:
          type: string
          format: date-time