OpenAPI Specification
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)'