Checks
Soda Cloud API Check Endpoints
This endpoint enables you to gather information about the checks that in exist in your organization's Soda Cloud account, including information about the datasets and agreements with which they are associated and the incidents to which they are linked. .
This GET is a paginated API that uses the following parameters to request specific details:
size: Supply an integer value between 10 and 1000, inclusive. The default value is 10.page: Supply an integer value. The default value is 0.datasetId: Optionally, use this parameter to collect only the information for checks associated with a specific dataset. Find thedatasetIdin the URL of the dataset page in Soda Cloud.dataStandardId: Optionally, use this parameter to collect only the information for checks belonging to a specific data standard. Find thedataStandardIdin the URL of the data standard page in Soda Cloud.scanId: Optionally, use this parameter to collect only the information for checks that produced a result in a specific scan run. Find thescanIdin the URL of the scan page in Soda Cloud, or use the value ofX-Soda-Scan-Idreturned when you triggered the scan.source: Optionally, use this parameter to collect only the information for checks that were defined in one place:soda-contractfor the checks of a data contract,data-standardfor the checks a data standard added,soda-metric-monitoringfor metric monitors,soda-cloudfor no-code checks written in Soda Cloud,soda-libraryorsoda-corefor the checks of a SodaCL scan,dbtfor ingested dbt tests, andsoda-sqlfor the checks of a legacy Soda SQL scan.checkIds: Optionally, use this parameter to collect only the information for a specific batch of checks. Provide multiple values as a comma-separated list of check IDs, which you can find on the individual check pages in Soda Cloud. This query parameter is limited to 1000 check IDs. You can supply other query parameters withcheckIds, but they do not filter or paginate the batch results.datasourceId: Optionally, use this parameter to collect only the information for checks on the datasets of a specific datasource. Find thedatasourceIdin the URL of the datasource page in Soda Cloud.name: Optionally, use this parameter to collect only the information for checks with exactly this name.column: Optionally, use this parameter to collect only the information for checks on exactly this column.group: Optionally, use this parameter to collect only the information for checks in the check group with exactly this name, as returned ingroup.name.evaluationStatus: Optionally, use this parameter to collect only the information for checks with a specific evaluation status. One ofpass,warn,fail,notEvaluated,excluded.checkType: Optionally, use this parameter to collect only the information for checks of a specific type, for examplemissingorfreshness, as returned incheckType.metricType: Optionally, use this parameter to collect only the information for checks on a specific metric, for examplerowCount, as returned inmetricType. An unknown metric type is rejected with a 400 error.attribute: Optionally, use this parameter to collect only the information for checks carrying a check attribute, written as a singlekey:valuepair, for exampleteam:Engineering. The key is the attribute's name, and it always matches exactly. For an attribute that allows several values, the check matches when any one of its selected values is the one you asked for. A value that is missing or a key that is not made up of letters, digits and underscores is rejected with a 400 error.from: Optionally, use this parameter to collect only the checks created on or after this moment, compared against each check'screatedAttimestamp. Supply an ISO8601 timestamp value. Example:2026-08-01T00:00:00+01:00to: Optionally, use this parameter to collect only the checks created on or before this moment, compared against each check'screatedAttimestamp. Supply an ISO8601 timestamp value. Example:2026-08-01T23:59:59+01:00caseInsensitive: Optionally, set this totrueto ignore letter case in every text match of this request:name,column,groupand the value ofattribute. The default isfalse, so those parameters match case-sensitively.sort: Optionally, sort the results byname(default) orcreatedAt.order: Optionally, sort inasc(default) ordescorder.
Without checkIds, the other filters can be combined and are applied together (AND). When checkIds is supplied, Soda Cloud returns the named checks you are allowed to view without applying other filters or pagination. Malformed or out-of-range parameter values may still be rejected during request parsing or validation.
If not specified, the query gathers information for all checks in the account and sorts the results by check name in ascending order.
This list also includes metric monitors, as checks whose source is soda-metric-monitoring. Listing monitors here is deprecated. Use GET /api/v1/monitors to list monitors, and GET /api/v1/monitors/{monitorId}/results to read their results; both support V4 datasets only. For the same reason, anomalyDetectionDetails in lastCheckResultValue is deprecated. Only a monitor's result fills that field.
Authorization
Soda only returns the checks linked to datasets to which the user has View dataset permissions. Soda Cloud Admins have access to all checks.See Manage dataset roles for more information.
Authentication
User authentication required: true
This endpoint accepts authentication via API keys in the Basic authentication header, or a pre-authenticated token in HTTP cookie token. Cookie sessions extend automatically on each request.
Tags
Checks
Rate limiting
60 requests/60 seconds
Successful response
Bad request
Unauthorized
Forbidden
Not found
Too many requests
Internal server error
GET /api/v1/checks HTTP/1.1
Host: cloud.soda.io
Authorization: Basic username:password
Accept: */*
{
"content": [
{
"attributes": {
"ANY_ADDITIONAL_PROPERTY": "anything"
},
"checkType": "text",
"cloudUrl": "text",
"column": "text",
"createdAt": "2026-01-01T00:00:00.000Z",
"datasets": [
{
"cloudUrl": "text",
"id": "text",
"name": "text",
"qualifiedName": "text"
}
],
"definition": "text",
"description": "text",
"evaluationStatus": "pass",
"group": {
"groupType": "text",
"identity": "text",
"name": "text"
},
"id": "text",
"incidents": [
{
"cloudUrl": "text",
"id": "text",
"name": "text",
"number": 1,
"status": "reported"
}
],
"lastCheckResultValue": {
"dataTimestamp": "2026-01-01T00:00:00.000Z",
"diagnostics": {
"aggregate": {
"checkRowsTested": 1,
"datasetRowsTested": 1
},
"aggregate_diff": {
"diff": 1,
"diffPercent": 1,
"function": "text",
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceValue": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetValue": 1
},
"duplicate": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text",
"missingCount": 1
},
"duplicate_diff": {
"duplicateCountDiff": 1,
"duplicateDiffPercent": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceDuplicateCount": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetDuplicateCount": 1
},
"failed_rows": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text"
},
"freshness": {
"actualTimestamp": "2026-01-01T00:00:00.000Z",
"actualTimestampUtc": "2026-01-01T00:00:00.000Z",
"datasetRowsTested": 1,
"expectedTimestamp": "2026-01-01T00:00:00.000Z",
"expectedTimestampUtc": "2026-01-01T00:00:00.000Z"
},
"freshness_diff": {
"freshnessDiff": 1,
"freshnessDiffUnit": "minutes",
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceMaxTimestamp": "2026-01-01T00:00:00.000Z",
"sourceMaxTimestampUtc": "2026-01-01T00:00:00.000Z",
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetMaxTimestamp": "2026-01-01T00:00:00.000Z",
"targetMaxTimestampUtc": "2026-01-01T00:00:00.000Z"
},
"fuzzy_duplicate": {
"candidateRowsScored": 1,
"checkRowsTested": 1,
"clusterCount": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"fuzzyDuplicateCount": 1,
"fuzzyDuplicatePercent": 1,
"meanConfidence": 1
},
"group_by": {
"diagnosticsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"groups": [
{
"group": "text",
"rowsTested": 1,
"status": "pass",
"value": 1
}
]
},
"hierarchy": {
"brokenPathCount": 1,
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"invalidValueCount": 1,
"missingValueCount": 1
},
"invalid": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text",
"missingCount": 1
},
"llm": {
"completionTokens": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"model": "text",
"promptTokens": 1,
"rowsChecked": 1,
"rowsFailed": 1,
"rowsFailedPercent": 1,
"tokensSpent": 1
},
"metric": {
"datasetRowsTested": 1
},
"metric_diff": {
"metricDiff": 1,
"metricDiffPercent": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceMetric": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetMetric": 1
},
"missing": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text"
},
"reference_diff": {
"diffCount": 1,
"diffPercent": 1,
"exclusiveInSource": 1,
"exclusiveInTarget": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1
},
"row_count": {
"checkRowsTested": 1,
"datasetRowsTested": 1
},
"row_count_diff": {
"rowCountDiff": 1,
"rowCountDiffPercent": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1
},
"rows_diff": {
"changed": 1,
"diffCount": 1,
"diffPercent": 1,
"exclusiveInSource": 1,
"exclusiveInTarget": 1,
"nullKeyRowsSource": 1,
"nullKeyRowsTarget": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1
},
"schema": {
"actual": [
{
"name": "text",
"type": "text"
}
],
"expected": [
{
"name": "text",
"type": "text"
}
]
},
"schema_diff": {
"missingInSource": [
{
"name": "text",
"type": "text"
}
],
"missingInTarget": [
{
"name": "text",
"type": "text"
}
],
"typeMismatch": [
{
"sourceColumn": "text",
"sourceType": "text",
"targetColumn": "text",
"targetType": "text"
}
]
}
},
"id": "text",
"measure": "time",
"value": 1,
"valueLabel": "text",
"valueSeries": {
"values": [
{
"label": "text",
"level": "pass",
"value": 1
}
]
}
},
"metricType": "text",
"name": "text",
"source": "soda-sql"
}
],
"first": true,
"last": true,
"number": 1,
"size": 1,
"totalElements": 1,
"totalPages": 1
}This endpoint allows you to delete a specific check in your organization's Soda Cloud account.
Authorization
Only users with Manage checks permission (V3 datasets) or Manage contracts permission (V4 datasets) can delete checks. Soda Cloud Admins can delete checks for all datasets. See Manage dataset roles for more information.
Authentication
User authentication required: true
This endpoint accepts authentication via API keys in the Basic authentication header, or a pre-authenticated token in HTTP cookie token. Cookie sessions extend automatically on each request.
Tags
Checks
Rate limiting
1000 requests/60 seconds
Bad request
Unauthorized
Forbidden
Not found
Too many requests
Internal server error
DELETE /api/v1/checks/{checkId} HTTP/1.1
Host: cloud.soda.io
Authorization: Basic username:password
Accept: */*
{
"code": "text",
"message": "text"
}This endpoint returns the history of one check's results, one row per result, newest first. Use it to see how the check evolved or since when it has been failing. GET /api/v1/checks only carries the check's latest result.
This GET is a paginated API that uses the following parameters to request specific details:
checkId: The ID of the check, which you can find on the check page in Soda Cloud. A metric monitor's id is still accepted here, but that is deprecated: read a monitor's results withGET /api/v1/monitors/{monitorId}/results, which supports V4 datasets only.anomalyDetectionDetailsis deprecated here for the same reason; a SodaCL anomaly detection check, which is not a monitor, keeps filling it on this route.from: Collect only the results whosedataTimestampis on or after this moment. Supply an ISO8601 timestamp value. Defaults to 30 days before now. Example:2026-08-01T00:00:00+01:00to: Collect only the results whosedataTimestampis on or before this moment. Supply an ISO8601 timestamp value. The window betweenfromandtomay span at most 30 days, so reading further back than that means asking for one window at a time. Example:2026-08-31T23:59:59+01:00size: Supply an integer value between 1 and 1000, inclusive. The default value is 100.page: Supply an integer value. The default value is 0.
Results are sorted by dataTimestamp in descending order, newest first.
Authorization
The check must be linked to a dataset to which the user has View dataset permissions; otherwise the check is reported as not found. Soda Cloud Admins have access to all checks. See Manage dataset roles for more information.
Authentication
User authentication required: true
This endpoint accepts authentication via API keys in the Basic authentication header, or a pre-authenticated token in HTTP cookie token. Cookie sessions extend automatically on each request.
Tags
Checks
Rate limiting
60 requests/60 seconds
Successful response
Bad request
Unauthorized
Forbidden
Not found
Too many requests
Internal server error
GET /api/v1/checks/{checkId}/results HTTP/1.1
Host: cloud.soda.io
Authorization: Basic username:password
Accept: */*
{
"content": [
{
"checkId": "text",
"dataTimestamp": "2026-01-01T00:00:00.000Z",
"diagnostics": {
"aggregate": {
"checkRowsTested": 1,
"datasetRowsTested": 1
},
"aggregate_diff": {
"diff": 1,
"diffPercent": 1,
"function": "text",
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceValue": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetValue": 1
},
"duplicate": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text",
"missingCount": 1
},
"duplicate_diff": {
"duplicateCountDiff": 1,
"duplicateDiffPercent": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceDuplicateCount": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetDuplicateCount": 1
},
"failed_rows": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text"
},
"freshness": {
"actualTimestamp": "2026-01-01T00:00:00.000Z",
"actualTimestampUtc": "2026-01-01T00:00:00.000Z",
"datasetRowsTested": 1,
"expectedTimestamp": "2026-01-01T00:00:00.000Z",
"expectedTimestampUtc": "2026-01-01T00:00:00.000Z"
},
"freshness_diff": {
"freshnessDiff": 1,
"freshnessDiffUnit": "minutes",
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceMaxTimestamp": "2026-01-01T00:00:00.000Z",
"sourceMaxTimestampUtc": "2026-01-01T00:00:00.000Z",
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetMaxTimestamp": "2026-01-01T00:00:00.000Z",
"targetMaxTimestampUtc": "2026-01-01T00:00:00.000Z"
},
"fuzzy_duplicate": {
"candidateRowsScored": 1,
"checkRowsTested": 1,
"clusterCount": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"fuzzyDuplicateCount": 1,
"fuzzyDuplicatePercent": 1,
"meanConfidence": 1
},
"group_by": {
"diagnosticsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"groups": [
{
"group": "text",
"rowsTested": 1,
"status": "pass",
"value": 1
}
]
},
"hierarchy": {
"brokenPathCount": 1,
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"invalidValueCount": 1,
"missingValueCount": 1
},
"invalid": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text",
"missingCount": 1
},
"llm": {
"completionTokens": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsSourceQuery": "text",
"model": "text",
"promptTokens": 1,
"rowsChecked": 1,
"rowsFailed": 1,
"rowsFailedPercent": 1,
"tokensSpent": 1
},
"metric": {
"datasetRowsTested": 1
},
"metric_diff": {
"metricDiff": 1,
"metricDiffPercent": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"sourceMetric": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1,
"targetMetric": 1
},
"missing": {
"checkRowsTested": 1,
"datasetRowsTested": 1,
"failedRowsCount": 1,
"failedRowsDataQuery": "text",
"failedRowsKeysQuery": "text",
"failedRowsPercent": 1,
"failedRowsSourceQuery": "text"
},
"reference_diff": {
"diffCount": 1,
"diffPercent": 1,
"exclusiveInSource": 1,
"exclusiveInTarget": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1
},
"row_count": {
"checkRowsTested": 1,
"datasetRowsTested": 1
},
"row_count_diff": {
"rowCountDiff": 1,
"rowCountDiffPercent": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1
},
"rows_diff": {
"changed": 1,
"diffCount": 1,
"diffPercent": 1,
"exclusiveInSource": 1,
"exclusiveInTarget": 1,
"nullKeyRowsSource": 1,
"nullKeyRowsTarget": 1,
"sourceCheckRowsTested": 1,
"sourceDatasetRowsTested": 1,
"targetCheckRowsTested": 1,
"targetDatasetRowsTested": 1
},
"schema": {
"actual": [
{
"name": "text",
"type": "text"
}
],
"expected": [
{
"name": "text",
"type": "text"
}
]
},
"schema_diff": {
"missingInSource": [
{
"name": "text",
"type": "text"
}
],
"missingInTarget": [
{
"name": "text",
"type": "text"
}
],
"typeMismatch": [
{
"sourceColumn": "text",
"sourceType": "text",
"targetColumn": "text",
"targetType": "text"
}
]
}
},
"evaluationStatus": "pass",
"feedback": {
"freeTextReason": "text",
"isCorrectlyClassified": true,
"reason": "expectedDailySeasonality",
"skipMeasurements": "previous",
"submittedAt": "2026-01-01T00:00:00.000Z"
},
"id": "text",
"incident": {
"cloudUrl": "text",
"id": "text",
"name": "text",
"number": 1,
"status": "reported"
},
"measure": "time",
"scanId": "text",
"scanTime": "2026-01-01T00:00:00.000Z",
"value": 1,
"valueLabel": "text",
"valueSeries": {
"values": [
{
"label": "text",
"level": "pass",
"value": 1
}
]
}
}
],
"first": true,
"last": true,
"number": 1,
"size": 1,
"totalElements": 1,
"totalPages": 1
}Last updated
Was this helpful?
