openapi: 3.1.0 info: title: Soda Cloud REST Attributes Runners 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: Runners description: Scan runner agent management paths: /api/v1/runners: get: summary: List runners operationId: listRunners tags: - Runners parameters: - name: size in: query schema: type: integer minimum: 10 maximum: 1000 default: 10 - name: page in: query schema: type: integer default: 0 responses: '200': description: Paginated list of runners '401': $ref: '#/components/responses/Unauthorized' '429': $ref: '#/components/responses/TooManyRequests' post: summary: Create a runner description: Requires MANAGE_DATASOURCES_AND_AGENTS permission. Returns apiKeyId and apiKeySecret (only available at creation time). operationId: createRunner tags: - Runners responses: '200': description: Runner created with credentials content: application/json: schema: type: object properties: apiKeyId: type: string apiKeySecret: type: string '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '429': $ref: '#/components/responses/TooManyRequests' /api/v1/runners/{runnerId}: get: summary: Get a runner operationId: getRunner tags: - Runners parameters: - name: runnerId in: path required: true schema: type: string responses: '200': description: Runner details content: application/json: schema: $ref: '#/components/schemas/RunnerDTO' '401': $ref: '#/components/responses/Unauthorized' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' delete: summary: Delete a runner description: Only self-hosted runners can be deleted. Cannot delete in-use runners. Requires MANAGE_DATASOURCES_AND_AGENTS permission. operationId: deleteRunner tags: - Runners parameters: - name: runnerId in: path required: true schema: type: string responses: '200': description: Runner deleted '401': $ref: '#/components/responses/Unauthorized' '403': $ref: '#/components/responses/Forbidden' '404': $ref: '#/components/responses/NotFound' '429': $ref: '#/components/responses/TooManyRequests' components: schemas: ErrorResponse: type: object properties: code: type: string message: type: string RunnerDTO: type: object properties: id: type: string name: type: string label: type: string type: type: string enum: - SELF_HOSTED - SODA_HOSTED isOnline: type: boolean lastSeenTimestamp: type: string format: date-time versions: type: object properties: agent: type: string library: type: string runner: type: string responses: Unauthorized: description: Unauthorized - authentication required 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' securitySchemes: basicAuth: type: http scheme: basic description: 'Base64-encoded API key ID and secret: base64(api_key_id:api_key_secret)'