Soda Datasets API

Dataset management, monitoring, and configuration

OpenAPI Specification

soda-co-datasets-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Soda Cloud REST Attributes Datasets API
  description: The Soda Cloud REST API enables programmatic access to trigger data quality scans, retrieve check results, update incident status, manage datasets, datasources, contracts, runners, secrets, notification rules, and integrate data quality workflows into CI/CD pipelines. Supports EU and US cloud regions.
  version: 1.0.0
  contact:
    name: Soda Support
    url: https://soda.io
servers:
- url: https://cloud.soda.io
  description: EU Cloud
- url: https://cloud.us.soda.io
  description: US Cloud
security:
- basicAuth: []
tags:
- name: Datasets
  description: Dataset management, monitoring, and configuration
paths:
  /api/v1/datasets:
    get:
      summary: List datasets
      description: Retrieve a paginated list of datasets with optional filtering.
      operationId: listDatasets
      tags:
      - Datasets
      parameters:
      - name: size
        in: query
        schema:
          type: integer
          minimum: 10
          maximum: 1000
          default: 10
      - name: page
        in: query
        schema:
          type: integer
          default: 0
      - name: from
        in: query
        schema:
          type: string
          format: date-time
        description: ISO 8601 timestamp filter
      - name: datasourceName
        in: query
        schema:
          type: string
      - name: search
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Paginated list of datasets
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiDatasetsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /api/v1/datasets/byDatasetQualifiedName/{datasetQualifiedName}:
    get:
      summary: Get dataset by qualified name
      description: Retrieve a single dataset by its qualified name.
      operationId: getDatasetByQualifiedName
      tags:
      - Datasets
      parameters:
      - name: datasetQualifiedName
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Dataset details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetsContentDTO'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /api/v1/datasets/{datasetId}:
    get:
      summary: Get dataset by ID
      description: Retrieve a single dataset by its ID.
      operationId: getDataset
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Dataset details
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetsContentDTO'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
    post:
      summary: Update dataset
      description: Update dataset metadata including label, tags, attributes, owners, and configuration settings.
      operationId: updateDataset
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PublicApiUpdateDatasetDTO'
      responses:
        '200':
          description: Updated dataset
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/DatasetsContentDTO'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
    delete:
      summary: Delete dataset
      description: Delete a dataset. Deletion is not immediate and can take some time to complete.
      operationId: deleteDataset
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Deletion initiated
          content:
            application/json:
              schema:
                type: object
                properties:
                  message:
                    type: string
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /api/v1/datasets/roles:
    get:
      summary: List dataset roles
      operationId: listDatasetRoles
      tags:
      - Datasets
      parameters:
      - name: size
        in: query
        schema:
          type: integer
          minimum: 10
          maximum: 100
          default: 100
      - name: page
        in: query
        schema:
          type: integer
          default: 0
      responses:
        '200':
          description: List of dataset roles
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      summary: Create dataset role
      operationId: createDatasetRole
      tags:
      - Datasets
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetRoleRequest'
      responses:
        '200':
          description: Created role
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/roles/{roleId}:
    post:
      summary: Update dataset role
      operationId: updateDatasetRole
      tags:
      - Datasets
      parameters:
      - name: roleId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasetRoleRequest'
      responses:
        '200':
          description: Updated role
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      summary: Delete dataset role
      operationId: deleteDatasetRole
      tags:
      - Datasets
      parameters:
      - name: roleId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Role deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/{datasetId}/columnAttributes:
    post:
      summary: Set column attributes in bulk
      operationId: setColumnAttributes
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              description: Mapping of column names to attribute key-value pairs
      responses:
        '200':
          description: Attributes set
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/{datasetId}/columnMetricMonitors:
    post:
      summary: Create column metric monitor
      operationId: createColumnMetricMonitor
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/ColumnMetricMonitorRequest'
      responses:
        '200':
          description: Monitor created
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/{datasetId}/columnMetricMonitors/{monitorId}:
    post:
      summary: Update column metric monitor
      operationId: updateColumnMetricMonitor
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: monitorId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: Monitor updated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      summary: Delete column metric monitor
      operationId: deleteColumnMetricMonitor
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: monitorId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Monitor deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/{datasetId}/customSqlMonitors:
    post:
      summary: Create custom SQL monitor
      operationId: createCustomSqlMonitor
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CustomSqlMonitorRequest'
      responses:
        '200':
          description: Monitor created
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/{datasetId}/customSqlMonitors/{monitorId}:
    post:
      summary: Update custom SQL monitor
      operationId: updateCustomSqlMonitor
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: monitorId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: Monitor updated
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      summary: Delete custom SQL monitor
      operationId: deleteCustomSqlMonitor
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      - name: monitorId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Monitor deleted
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/{datasetId}/computeWarehouse:
    get:
      summary: Get dataset compute warehouse configuration
      operationId: getDatasetComputeWarehouse
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Compute warehouse configuration
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasets/{datasetId}/diagnosticsWarehouse:
    get:
      summary: Get dataset diagnostics warehouse information
      operationId: getDatasetDiagnosticsWarehouse
      tags:
      - Datasets
      parameters:
      - name: datasetId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Diagnostics warehouse information
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    CustomSqlMonitorRequest:
      type: object
      properties:
        name:
          type: string
        sqlQuery:
          type: string
        resultMetric:
          type: string
        configuration:
          type: object
    PublicApiDatasetsResponse:
      allOf:
      - $ref: '#/components/schemas/PaginatedResponse'
      - type: object
        properties:
          content:
            type: array
            items:
              $ref: '#/components/schemas/DatasetsContentDTO'
    PaginatedResponse:
      type: object
      properties:
        content:
          type: array
          items:
            type: object
        first:
          type: boolean
        last:
          type: boolean
        number:
          type: integer
        size:
          type: integer
        totalElements:
          type: integer
        totalPages:
          type: integer
    DatasetsContentDTO:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        label:
          type: string
        qualifiedName:
          type: string
        datasourceId:
          type: string
        datasourceName:
          type: string
        tags:
          type: array
          items:
            type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
        cloudUrl:
          type: string
          format: uri
    DatasetRoleRequest:
      type: object
      required:
      - name
      properties:
        name:
          type: string
        viewDataset:
          type: boolean
        configureDataset:
          type: boolean
        manageDataset:
          type: boolean
        deleteDataset:
          type: boolean
    PublicApiUpdateDatasetDTO:
      type: object
      properties:
        label:
          type: string
        tags:
          type: array
          items:
            type: string
        attributes:
          type: object
        owners:
          type: array
          items:
            type: string
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    ColumnMetricMonitorRequest:
      type: object
      properties:
        columnName:
          type: string
        metricType:
          type: string
        configuration:
          type: object
  responses:
    Unauthorized:
      description: Unauthorized - authentication required
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    BadRequest:
      description: Bad request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    NotFound:
      description: Resource not found
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    TooManyRequests:
      description: Rate limit exceeded
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    Forbidden:
      description: Forbidden - insufficient permissions
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
    InternalServerError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: 'Base64-encoded API key ID and secret: base64(api_key_id:api_key_secret)'