Soda Datasources API

Data source connection and configuration management

OpenAPI Specification

soda-co-datasources-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Soda Cloud REST Attributes Datasources 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: Datasources
  description: Data source connection and configuration management
paths:
  /api/v1/datasources:
    get:
      summary: List datasources
      operationId: listDatasources
      tags:
      - Datasources
      parameters:
      - name: size
        in: query
        schema:
          type: integer
          minimum: 10
          maximum: 1000
          default: 10
      - name: page
        in: query
        schema:
          type: integer
          default: 0
      - name: search
        in: query
        schema:
          type: string
      responses:
        '200':
          description: Paginated list of datasources
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PaginatedResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      summary: Create datasource
      description: Create a new V4 datasource from a YAML configuration.
      operationId: createDatasource
      tags:
      - Datasources
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateDatasourceRequest'
      responses:
        '200':
          description: Datasource created
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/actions/testConnection:
    post:
      summary: Test datasource connection
      description: Initiates an async connection test. Returns 202 with operation ID to poll.
      operationId: testDatasourceConnection
      tags:
      - Datasources
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - configurationFileContents
              - runnerId
              properties:
                configurationFileContents:
                  type: string
                runnerId:
                  type: string
      responses:
        '202':
          description: Test initiated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/actions/testConnection/{operationId}:
    get:
      summary: Poll connection test status
      operationId: getConnectionTestStatus
      tags:
      - Datasources
      parameters:
      - name: operationId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Operation status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationStatusResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/roles:
    get:
      summary: List datasource roles
      operationId: listDatasourceRoles
      tags:
      - Datasources
      parameters:
      - name: size
        in: query
        schema:
          type: integer
          default: 10
      - name: page
        in: query
        schema:
          type: integer
          default: 0
      responses:
        '200':
          description: List of roles
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      summary: Create datasource role
      operationId: createDatasourceRole
      tags:
      - Datasources
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasourceRoleRequest'
      responses:
        '200':
          description: Role created
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/roles/{roleId}:
    post:
      summary: Update datasource role
      operationId: updateDatasourceRole
      tags:
      - Datasources
      parameters:
      - name: roleId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/DatasourceRoleRequest'
      responses:
        '200':
          description: Role updated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      summary: Delete datasource role
      operationId: deleteDatasourceRole
      tags:
      - Datasources
      parameters:
      - name: roleId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Role deleted (async)
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/{datasourceId}:
    get:
      summary: Get datasource
      operationId: getDatasource
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Datasource details
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      summary: Update datasource
      operationId: updateDatasource
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                configurationFileContents:
                  type: string
                label:
                  type: string
                runnerId:
                  type: string
      responses:
        '200':
          description: Datasource updated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    delete:
      summary: Delete datasource
      description: Remove datasource and all associated resources (async operation).
      operationId: deleteDatasource
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Deletion initiated
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/{datasourceId}/diagnosticsWarehouse:
    get:
      summary: Get datasource diagnostics warehouse config
      operationId: getDatasourceDiagnosticsWarehouse
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Diagnostics warehouse configuration
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      summary: Update datasource diagnostics warehouse
      operationId: updateDatasourceDiagnosticsWarehouse
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
      responses:
        '200':
          description: Updated
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/{datasourceId}/discover:
    post:
      summary: Trigger on-demand discovery scan
      operationId: triggerDiscovery
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Discovery scan triggered
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/{datasourceId}/onboardDatasets:
    post:
      summary: Onboard datasets
      description: Async operation to onboard discovered datasets from a datasource.
      operationId: onboardDatasets
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
              - discoveredDatasetIds
              properties:
                discoveredDatasetIds:
                  type: array
                  items:
                    type: string
      responses:
        '202':
          description: Onboarding initiated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/{datasourceId}/onboardDatasets/{operationId}:
    get:
      summary: Poll onboarding operation status
      operationId: getOnboardingStatus
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      - name: operationId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: Onboarding status
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OperationStatusResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
        '429':
          $ref: '#/components/responses/TooManyRequests'
  /api/v1/datasources/{datasourceId}/responsibilities:
    get:
      summary: List datasource responsibilities
      operationId: listDatasourceResponsibilities
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      responses:
        '200':
          description: User/group permission assignments
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
    post:
      summary: Update datasource responsibilities
      operationId: updateDatasourceResponsibilities
      tags:
      - Datasources
      parameters:
      - name: datasourceId
        in: path
        required: true
        schema:
          type: string
      requestBody:
        content:
          application/json:
            schema:
              type: object
              properties:
                responsibilities:
                  type: array
                  items:
                    type: object
                    properties:
                      roleId:
                        type: string
                      type:
                        type: string
                        enum:
                        - user
                        - userGroup
                      userId:
                        type: string
                      userGroupId:
                        type: string
      responses:
        '200':
          description: Responsibilities updated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
components:
  schemas:
    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
    CreateDatasourceRequest:
      type: object
      required:
      - configurationFileContents
      properties:
        configurationFileContents:
          type: string
          description: YAML configuration for the datasource
        label:
          type: string
        runnerId:
          type: string
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    OperationStatusResponse:
      type: object
      properties:
        id:
          type: string
        state:
          type: string
          enum:
          - queued
          - processing
          - completed
          - failed
          - cancelled
        message:
          type: string
        createdAt:
          type: string
          format: date-time
        updatedAt:
          type: string
          format: date-time
    DatasourceRoleRequest:
      type: object
      required:
      - name
      properties:
        name:
          type: string
        viewDatasource:
          type: boolean
        createDatasets:
          type: boolean
        manageDatasourceSettings:
          type: boolean
        managePermissions:
          type: boolean
        deleteDatasource:
          type: boolean
  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'
  securitySchemes:
    basicAuth:
      type: http
      scheme: basic
      description: 'Base64-encoded API key ID and secret: base64(api_key_id:api_key_secret)'