Soda Scans API

Data quality scan execution and monitoring

OpenAPI Specification

soda-co-scans-api-openapi.yml Raw ↑
openapi: 3.1.0
info:
  title: Soda Cloud REST Attributes Scans 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: Scans
  description: Data quality scan execution and monitoring
paths:
  /api/v1/scans/{scanId}:
    get:
      summary: Get scan status
      description: Retrieve the status and results of a scan by scan ID.
      operationId: getScanStatus
      tags:
      - Scans
      parameters:
      - name: scanId
        in: path
        required: true
        schema:
          type: string
        description: Scan identifier from the trigger response
      responses:
        '200':
          description: Scan status and results
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiScanStatusResponse'
        '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: Cancel a scan
      description: Cancels a queued or running scan. Changes state to canceled (if pending) or cancelationRequested (if submitted).
      operationId: cancelScan
      tags:
      - Scans
      parameters:
      - name: scanId
        in: path
        required: true
        schema:
          type: string
        description: Scan identifier
      responses:
        '200':
          description: Scan cancellation initiated
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '403':
          $ref: '#/components/responses/Forbidden'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
  /api/v1/scans/{scanId}/logs:
    get:
      summary: Get scan logs
      description: Retrieve paginated log entries for a specific scan.
      operationId: getScanLogs
      tags:
      - Scans
      parameters:
      - name: scanId
        in: path
        required: true
        schema:
          type: string
        description: Scan identifier
      - name: page
        in: query
        schema:
          type: integer
          default: 0
      - name: size
        in: query
        schema:
          type: integer
          minimum: 100
          maximum: 1000
          default: 1000
      responses:
        '200':
          description: Paginated scan log entries
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/PublicApiScanLogsResponse'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '429':
          $ref: '#/components/responses/TooManyRequests'
        '500':
          $ref: '#/components/responses/InternalServerError'
components:
  schemas:
    PublicApiScanLogsResponse:
      allOf:
      - $ref: '#/components/schemas/PaginatedResponse'
      - type: object
        properties:
          content:
            type: array
            items:
              type: object
              properties:
                index:
                  type: integer
                level:
                  type: string
                  enum:
                  - debug
                  - info
                  - warning
                  - error
                message:
                  type: string
                timestamp:
                  type: string
                  format: date-time
    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
    ErrorResponse:
      type: object
      properties:
        code:
          type: string
        message:
          type: string
    PublicApiScanStatusResponse:
      type: object
      required:
      - id
      - state
      - created
      - cloudUrl
      properties:
        id:
          type: string
        state:
          type: string
          enum:
          - queuing
          - executing
          - cancelationRequested
          - canceled
          - timeOutRequested
          - timedOut
          - failed
          - completedWithErrors
          - completedWithFailures
          - completedWithWarnings
          - completed
        created:
          type: string
          format: date-time
        cloudUrl:
          type: string
          format: uri
        checks:
          type: array
          items:
            type: object
            properties:
              id:
                type: string
              evaluationStatus:
                type: string
        errors:
          type: integer
        failures:
          type: integer
        warnings:
          type: integer
        scanTime:
          type: string
          format: date-time
        started:
          type: string
          format: date-time
        ended:
          type: string
          format: date-time
        submitted:
          type: string
          format: date-time
        runnerId:
          type: string
        scanDefinition:
          type: string
        postProcessingStages:
          type: array
          items:
            type: string
  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)'