> For the complete documentation index, see [llms.txt](https://docs.truedat.io/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.truedat.io/v8.12/api-integrations/data-quality-apis/rule-results.md).

# Rule Results

## List rule results

> Returns a paginated list of rule results.\
> \
> Requires administrative privileges (\*\*administrator or service account\*\*).\
> \
> The response includes an \`x-total-count\` header with the total number of matching records. Pagination is handled through the caller's parameters and the underlying search layer.\
> \
> If both \`since\` and \`from\` are omitted, no date filter is applied.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_results":{"get":{"description":"Returns a paginated list of rule results.\n\nRequires administrative privileges (**administrator or service account**).\n\nThe response includes an `x-total-count` header with the total number of matching records. Pagination is handled through the caller's parameters and the underlying search layer.\n\nIf both `since` and `from` are omitted, no date filter is applied.\n","operationId":"TdDqWeb.RuleResultController.index","parameters":[{"description":"Filter results since this date (ISO 8601)","in":"query","name":"since","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Field to compare 'since' against ('date' or 'updated_at')","in":"query","name":"from","required":false,"schema":{"enum":["date","updated_at"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultsIndexResponse"}}},"description":"Rule results response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List rule results","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultsIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/RuleResult"},"type":"array"}},"required":["data"],"title":"RuleResultsIndexResponse","type":"object"},"RuleResult":{"additionalProperties":false,"properties":{"date":{"format":"date-time","nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"has_remediation":{"nullable":true,"type":"boolean"},"id":{"type":"integer"},"implementation_id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"RuleResult","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Upload rule results

> Uploads quality execution results performed outside Truedat. The file is processed \*\*synchronously\*\* and the results are bulk‑loaded into the system.\
> \
> \*\*Permissions:\*\*\
> Requires the \*\*'Manage quality execution results'\*\* permission. The check is global (not domain‑scoped). Administrators and service accounts are always allowed.\
> \
> \*\*Request body (multipart/form-data):\*\*\
> \- \`rule\_results\` (required, file) – CSV file with the rule results.\
> \
> \*\*File format:\*\*\
> \- \*\*Type:\*\* CSV (UTF‑8).\
> \- \*\*Separator:\*\* semicolon (\`;\`).\
> \- \*\*Required headers:\*\* \`implementation\_key; date; result; records; errors\`\
> \- \*\*Column semantics:\*\*\
> \- \`implementation\_key\` – Key of the executed implementation. The implementation must exist and be in a published state; otherwise the row is rejected.\
> \- \`date\` – Execution timestamp, formatted as \`yyyy-mm-dd-hh-mm-ss\` (for example, \`2025-06-07-00-00-00\`).\
> \- \`result\` – Optional. If omitted, the value is computed as \`errors / records\`.\
> \- \`records\` – Total number of records evaluated in the execution.\
> \- \`errors\` – Total number of records that failed validation.\
> \
> \*\*Extra parameters (\`m:\` prefix):\*\*\
> Any additional column whose header starts with \`m:\` is collected into a \`params\` map on the record. The \`m:\` prefix is stripped from the key. Columns whose value is empty are ignored.\
> \
> \*\*Behavior:\*\*\
> The file is parsed row by row and the records are bulk‑loaded. The endpoint returns \`200 OK\` with an empty body once the load completes.\
> \
> If the CSV cannot be parsed (missing headers, invalid separator, non‑UTF‑8 content) the endpoint returns \`422 Unprocessable Entity\`. Rows referencing a missing or non‑published implementation are rejected individually; the remaining rows are still loaded.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_results":{"post":{"description":"Uploads quality execution results performed outside Truedat. The file is processed **synchronously** and the results are bulk‑loaded into the system.\n\n**Permissions:**\nRequires the **'Manage quality execution results'** permission. The check is global (not domain‑scoped). Administrators and service accounts are always allowed.\n\n**Request body (multipart/form-data):**\n- `rule_results` (required, file) – CSV file with the rule results.\n\n**File format:**\n- **Type:** CSV (UTF‑8).\n- **Separator:** semicolon (`;`).\n- **Required headers:** `implementation_key; date; result; records; errors`\n- **Column semantics:**\n- `implementation_key` – Key of the executed implementation. The implementation must exist and be in a published state; otherwise the row is rejected.\n- `date` – Execution timestamp, formatted as `yyyy-mm-dd-hh-mm-ss` (for example, `2025-06-07-00-00-00`).\n- `result` – Optional. If omitted, the value is computed as `errors / records`.\n- `records` – Total number of records evaluated in the execution.\n- `errors` – Total number of records that failed validation.\n\n**Extra parameters (`m:` prefix):**\nAny additional column whose header starts with `m:` is collected into a `params` map on the record. The `m:` prefix is stripped from the key. Columns whose value is empty are ignored.\n\n**Behavior:**\nThe file is parsed row by row and the records are bulk‑loaded. The endpoint returns `200 OK` with an empty body once the load completes.\n\nIf the CSV cannot be parsed (missing headers, invalid separator, non‑UTF‑8 content) the endpoint returns `422 Unprocessable Entity`. Rows referencing a missing or non‑published implementation are rejected individually; the remaining rows are still loaded.\n","operationId":"TdDqWeb.RuleResultController.create","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RuleResultUploadRequest"}}},"description":"Rule result upload request","required":false},"responses":{"200":{"description":"Rule result upload successful"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload rule results","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultUploadRequest":{"additionalProperties":false,"properties":{"rule_results":{"description":"CSV file with rule results (columns: implementation_key, date, result, records, errors, m:param1, ...)","format":"binary","type":"string"}},"required":["rule_results"],"title":"RuleResultUploadRequest","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnprocessableEntityResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Search rule results

> Searches rule results with the same semantics as the standard rule results listing, but accepts the filters as a JSON body rather than as query parameters.\
> \
> Requires the \*\*'View quality'\*\* permission. Results are further filtered to the rule results the caller is allowed to view.\
> \
> \*\*Request body:\*\*\
> \- \`page\`, \`size\` (optional) – Same meaning as the query parameters. Values provided in the body take precedence over query parameters.\
> \- \`filters\` (optional, object) – Filter criteria (for example, by status, implementation, or date range).\
> \
> Delegates to the standard rule results listing. The response shape matches the \`index\` endpoint, including the \`x-total-count\` header with the total number of matching records.\
> \
> This endpoint exists for clients that prefer sending search criteria in the request body. It is otherwise equivalent to \`GET /rule\_results\` with query parameters.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_results/search":{"post":{"description":"Searches rule results with the same semantics as the standard rule results listing, but accepts the filters as a JSON body rather than as query parameters.\n\nRequires the **'View quality'** permission. Results are further filtered to the rule results the caller is allowed to view.\n\n**Request body:**\n- `page`, `size` (optional) – Same meaning as the query parameters. Values provided in the body take precedence over query parameters.\n- `filters` (optional, object) – Filter criteria (for example, by status, implementation, or date range).\n\nDelegates to the standard rule results listing. The response shape matches the `index` endpoint, including the `x-total-count` header with the total number of matching records.\n\nThis endpoint exists for clients that prefer sending search criteria in the request body. It is otherwise equivalent to `GET /rule_results` with query parameters.\n","operationId":"TdDqWeb.RuleResultSearchController.create","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Page size","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultSearchRequest"}}},"description":"Rule result search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultSearchResponse"}}},"description":"Rule result search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search rule results","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria (e.g., status, implementation_id, date range)","type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"}},"title":"RuleResultSearchRequest","type":"object"},"RuleResultSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/RuleResult"},"type":"array"}},"required":["data"],"title":"RuleResultSearchResponse","type":"object"},"RuleResult":{"additionalProperties":false,"properties":{"date":{"format":"date-time","nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"has_remediation":{"nullable":true,"type":"boolean"},"id":{"type":"integer"},"implementation_id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"RuleResult","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Get a rule result

> Retrieves a single rule result by its ID.\
> \
> Requires the \*\*'View quality'\*\* permission. Administrators and service accounts are always allowed.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_results/{id}":{"get":{"description":"Retrieves a single rule result by its ID.\n\nRequires the **'View quality'** permission. Administrators and service accounts are always allowed.\n","operationId":"TdDqWeb.RuleResultController.show","parameters":[{"description":"Rule result ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultResponse"}}},"description":"Rule result response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a rule result","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RuleResult"}},"required":["data"],"title":"RuleResultResponse","type":"object"},"RuleResult":{"additionalProperties":false,"properties":{"date":{"format":"date-time","nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"has_remediation":{"nullable":true,"type":"boolean"},"id":{"type":"integer"},"implementation_id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"RuleResult","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Delete a rule result

> Deletes a single rule result record.\
> \
> Requires administrative privileges (\*\*administrator or service account\*\*).<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_results/{id}":{"delete":{"description":"Deletes a single rule result record.\n\nRequires administrative privileges (**administrator or service account**).\n","operationId":"TdDqWeb.RuleResultController.delete","parameters":[{"description":"Rule result ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Rule result deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a rule result","tags":["Rule Results"]}}},"components":{"schemas":{"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```
