> 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/implementations.md).

# Implementations

## List rule implementations

> Returns the rule implementations visible to the current user.\
> \
> Requires the \*\*'View quality'\*\* permission. Implementations whose domain the caller cannot view are excluded from the result set. Administrators and service accounts see all implementations.\
> \
> No pagination is applied; the full filtered list is returned. Each implementation includes its rule, results, source, and linked data structures. The response includes a \`\_actions\` object with the operations the caller can perform on the collection.\
> \
> This is a database‑backed listing, not an Elasticsearch query, so the exact filters available are limited to those documented above.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations":{"get":{"description":"Returns the rule implementations visible to the current user.\n\nRequires the **'View quality'** permission. Implementations whose domain the caller cannot view are excluded from the result set. Administrators and service accounts see all implementations.\n\nNo pagination is applied; the full filtered list is returned. Each implementation includes its rule, results, source, and linked data structures. The response includes a `_actions` object with the operations the caller can perform on the collection.\n\nThis is a database‑backed listing, not an Elasticsearch query, so the exact filters available are limited to those documented above.\n","operationId":"TdDqWeb.ImplementationController.index","parameters":[{"description":"Filter by rule business concept ID","in":"query","name":"rule_business_concept_id","required":false,"schema":{"type":"integer"}},{"description":"Filter by the active flag of the linked rule.","in":"query","name":"is_rule_active","required":false,"schema":{"enum":["true","false"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationIndexResponse"}}},"description":"Implementations response"},"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":"List rule implementations","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationIndexResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"data":{"description":"List of implementations","items":{"$ref":"#/components/schemas/Implementation"},"type":"array"}},"required":["data"],"title":"ImplementationIndexResponse","type":"object"},"Implementation":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":{"additionalProperties":false,"properties":{"href":{"description":"Endpoint URL for the action","nullable":true,"type":"string"},"id":{"description":"ID of the resource","nullable":true,"type":"integer"},"input":{"additionalProperties":true,"description":"Input parameters for the action","nullable":true,"type":"object"},"method":{"description":"HTTP method (POST, GET, PUT, DELETE)","type":"string"}},"type":"object"},"description":"Available actions for the implementation (e.g., edit, delete, execute, etc.)","nullable":true,"type":"object"},"data_structures":{"items":{"additionalProperties":false,"properties":{"data_structure":{"additionalProperties":true,"properties":{"current_version":{"additionalProperties":true,"type":"object"},"id":{"type":"integer"},"system":{"additionalProperties":true,"type":"object"}},"type":"object"},"data_structure_id":{"type":"integer"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"id":{"type":"integer"},"implementation_id":{"type":"integer"},"type":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"dataset":{"items":{"additionalProperties":false,"properties":{"alias":{"nullable":true,"type":"string"},"clauses":{"items":{"type":"object"},"nullable":true,"type":"array"},"join_type":{"nullable":true,"type":"string"},"structure":{"additionalProperties":true,"type":"object"}},"type":"object"},"nullable":true,"type":"array"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"domain":{"additionalProperties":false,"nullable":true,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"type":"object"},"domain_id":{"description":"Domain ID","nullable":true,"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"executable":{"description":"Whether the implementation is executable","type":"boolean"},"goal":{"description":"Goal value","nullable":true,"type":"number"},"id":{"description":"Implementation ID","type":"integer"},"implementation_key":{"description":"Unique implementation key","type":"string"},"implementation_ref":{"description":"Reference to parent implementation","nullable":true,"type":"integer"},"implementation_type":{"default":"default","description":"Type (default, raw, basic)","type":"string"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"links":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"minimum":{"description":"Minimum threshold","nullable":true,"type":"number"},"population":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"nullable":true,"type":"array"},"populations":{"items":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"type":"array"},"nullable":true,"type":"array"},"quality_event":{"additionalProperties":true,"nullable":true,"type":"object"},"raw_content":{"additionalProperties":false,"nullable":true,"properties":{"database":{"nullable":true,"type":"string"},"dataset":{"nullable":true,"type":"string"},"population":{"nullable":true,"type":"string"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"source_id":{"nullable":true,"type":"integer"},"validations":{"nullable":true,"type":"string"}},"type":"object"},"result_type":{"description":"Result type (percentage, number, etc.)","nullable":true,"type":"string"},"results":{"items":{"type":"object"},"nullable":true,"type":"array"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"active":{"type":"boolean"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"rule_id":{"description":"Rule ID","nullable":true,"type":"integer"},"segments":{"items":{"additionalProperties":false,"properties":{"structure":{"additionalProperties":true,"type":"object"}},"type":"object"},"nullable":true,"type":"array"},"status":{"description":"Implementation status","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"validation":{"items":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"type":"array"},"nullable":true,"type":"array"},"validations":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"nullable":true,"type":"array"},"version":{"default":1,"description":"Version number","type":"integer"}},"required":["id","implementation_key","status","version"],"title":"Implementation","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"}}}}
```

## Create rule implementation

> Creates a new rule implementation. Three creation modes are supported, determined by the payload:\
> \- \*\*Clone mode\*\* (\`operation: "clone"\` with \`implementation\_ref\`) – Creates a rule‑less implementation and copies relations from the referenced implementation. The relation clone runs synchronously against the remote cluster.\
> \- \*\*Rule‑bound mode\*\* (\`rule\_id\` present) – Creates an implementation bound to the given rule.\
> \- \*\*Rule‑less mode\*\* (no \`rule\_id\`, no clone) – Creates an implementation without a linked rule.\
> \
> \*\*Permissions:\*\* The exact permission depends on the resulting implementation type and whether it is rule‑bound:\
> \- \*\*'Manage form implementations'\*\* for \`default\` rule‑bound implementations.\
> \- \*\*'Manage native implementations'\*\* for \`raw\` implementations.\
> \- \*\*'Manage basic implementations'\*\* for \`basic\` implementations.\
> \- \*\*'Manage implementations without rule'\*\* is additionally required whenever the implementation has no \`rule\_id\`.\
> \- \*\*'Review implementations'\*\* is additionally required when the payload requests \`status: "published"\`.\
> \- \*\*'Manage Implementation segments'\*\* is additionally required when the payload includes \`segments\`.\
> All permissions are validated against the domain specified in the payload.\
> \
> The implementation is created in draft unless a published status is requested and permitted. A \`Location\` header points to the created resource.\
> \
> If the clone operation succeeds but the relation copy fails, the implementation is still created and the relation error is handled asynchronously.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations":{"post":{"description":"Creates a new rule implementation. Three creation modes are supported, determined by the payload:\n- **Clone mode** (`operation: \"clone\"` with `implementation_ref`) – Creates a rule‑less implementation and copies relations from the referenced implementation. The relation clone runs synchronously against the remote cluster.\n- **Rule‑bound mode** (`rule_id` present) – Creates an implementation bound to the given rule.\n- **Rule‑less mode** (no `rule_id`, no clone) – Creates an implementation without a linked rule.\n\n**Permissions:** The exact permission depends on the resulting implementation type and whether it is rule‑bound:\n- **'Manage form implementations'** for `default` rule‑bound implementations.\n- **'Manage native implementations'** for `raw` implementations.\n- **'Manage basic implementations'** for `basic` implementations.\n- **'Manage implementations without rule'** is additionally required whenever the implementation has no `rule_id`.\n- **'Review implementations'** is additionally required when the payload requests `status: \"published\"`.\n- **'Manage Implementation segments'** is additionally required when the payload includes `segments`.\nAll permissions are validated against the domain specified in the payload.\n\nThe implementation is created in draft unless a published status is requested and permitted. A `Location` header points to the created resource.\n\nIf the clone operation succeeds but the relation copy fails, the implementation is still created and the relation error is handled asynchronously.\n","operationId":"TdDqWeb.ImplementationController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationCreateRequest"}}},"description":"Implementation creation request","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationCreateResponse"}}},"description":"Implementation response"},"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":"Create rule implementation","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationCreateRequest":{"additionalProperties":false,"properties":{"rule_implementation":{"additionalProperties":false,"properties":{"dataset":{"items":{"type":"object"},"nullable":true,"type":"array"},"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"df_name":{"description":"Template name","nullable":true,"type":"string"},"domain_id":{"description":"Domain ID","nullable":true,"type":"integer"},"goal":{"description":"Goal value","nullable":true,"type":"number"},"implementation_key":{"description":"Unique implementation key","type":"string"},"implementation_ref":{"description":"Reference for clone","nullable":true,"type":"string"},"implementation_type":{"default":"default","description":"Type (default, raw, basic)","type":"string"},"minimum":{"description":"Minimum threshold","nullable":true,"type":"number"},"operation":{"description":"Operation (e.g., 'clone')","nullable":true,"type":"string"},"populations":{"items":{"type":"array"},"nullable":true,"type":"array"},"raw_content":{"additionalProperties":false,"nullable":true,"properties":{"database":{"nullable":true,"type":"string"},"dataset":{"nullable":true,"type":"string"},"population":{"nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"validations":{"nullable":true,"type":"string"}},"type":"object"},"result_type":{"description":"Result type","nullable":true,"type":"string"},"rule_id":{"description":"Rule ID (required for rule-bound)","nullable":true,"type":"integer"},"segments":{"items":{"type":"object"},"nullable":true,"type":"array"},"status":{"description":"Initial status","enum":["draft","published"],"nullable":true,"type":"string"},"validation":{"items":{"type":"array"},"nullable":true,"type":"array"}},"type":"object"}},"required":["rule_implementation"],"title":"ImplementationCreateRequest","type":"object"},"ImplementationCreateResponse":{"additionalProperties":true,"title":"ImplementationCreateResponse","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"}}}}
```

## Link data structure to implementation

> Links a data structure to an implementation.\
> \
> \*\*Permissions:\*\* Three permissions are required, each validated on the relevant resource:\
> \- \*\*'Link implementations to structures'\*\* on the implementation's domain.\
> \- \*\*'View structures'\*\* on the data structure's domain.\
> \- \*\*'Link structures'\*\* on the data structure's domain.\
> Administrators bypass all checks. Service accounts are not granted these permissions by default and cannot use this endpoint unless the corresponding ACLs are explicitly assigned to them.\
> \
> \*\*Request body:\*\*\
> \- \`data\_structure\_id\` (required, integer) – ID of the data structure to link.\
> \- \`type\` (required, string) – Role of the structure in the implementation. Common values are \`'dataset'\`, \`'population'\`, and \`'validation'\`.\
> \
> The link is created and the response includes the link ID and type. A \`Location\` header points to the implementation's \`show\` endpoint.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/{implementation_id}/data_structures":{"post":{"description":"Links a data structure to an implementation.\n\n**Permissions:** Three permissions are required, each validated on the relevant resource:\n- **'Link implementations to structures'** on the implementation's domain.\n- **'View structures'** on the data structure's domain.\n- **'Link structures'** on the data structure's domain.\nAdministrators bypass all checks. Service accounts are not granted these permissions by default and cannot use this endpoint unless the corresponding ACLs are explicitly assigned to them.\n\n**Request body:**\n- `data_structure_id` (required, integer) – ID of the data structure to link.\n- `type` (required, string) – Role of the structure in the implementation. Common values are `'dataset'`, `'population'`, and `'validation'`.\n\nThe link is created and the response includes the link ID and type. A `Location` header points to the implementation's `show` endpoint.\n","operationId":"TdDqWeb.ImplementationStructureController.create","parameters":[{"description":"Implementation ID","in":"path","name":"implementation_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationStructureCreateRequest"}}},"description":"Structure link request","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationStructureCreateResponse"}}},"description":"Structure link response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqNotFoundResponse"}}},"description":"Not found"},"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":"Link data structure to implementation","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationStructureCreateRequest":{"additionalProperties":false,"properties":{"data_structure_id":{"description":"ID of the data structure to link","type":"integer"},"type":{"description":"Link type (e.g., 'dataset', 'population')","type":"string"}},"required":["data_structure_id","type"],"title":"ImplementationStructureCreateRequest","type":"object"},"ImplementationStructureCreateResponse":{"additionalProperties":false,"properties":{"data":{"properties":{"data_structure_id":{"type":"integer"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"id":{"type":"integer"},"implementation_id":{"type":"integer"},"type":{"type":"string"}},"required":["id","implementation_id","data_structure_id","type"],"type":"object"}},"required":["data"],"title":"ImplementationStructureCreateResponse","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"},"TdDqNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqNotFoundResponse","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"}}}}
```

## Upload implementations from CSV

> Uploads quality implementations from a CSV file. The upload is processed \*\*synchronously\*\*: rows are parsed, validated, and persisted before the response is returned. Partial success is possible: valid rows are persisted and invalid rows are reported individually in \`errors\`.\
> \
> \*\*Permissions:\*\* The permission required depends on the resulting implementation type and on the requested status. All checks are applied per row, against the implementation's domain:\
> \- \*\*'Manage form implementations'\*\* for \`default\` (rule‑bound) implementations.\
> \- \*\*'Manage native implementations'\*\* for \`raw\` implementations.\
> \- \*\*'Manage basic implementations'\*\* for \`basic\` implementations.\
> \- \*\*'Manage implementations without rule'\*\* is additionally required whenever the row has no linked rule.\
> \- \*\*'Manage Implementation segments'\*\* is additionally required when the row defines segments.\
> \- \*\*'Review implementations'\*\* is required when the row requests \`status: "published"\` or when \`auto\_publish\` causes the workflow to publish.\
> Administrators and service accounts are always allowed.\
> \
> \*\*Request body (multipart/form-data):\*\*\
> \- \`implementations\` (required, file) – CSV file with one implementation per row.\
> \- \`auto\_publish\` (optional, string) – \`'true'\` or \`'false'\`. When \`'true'\`, the workflow may publish the row if the caller holds the required permission and the published content would change. Default: \`'false'\`.\
> \- \`lang\` (optional, string) – Language used for labels and translations during import. Defaults to the server‑configured application language; the browser language is not read by the API.\
> \
> \*\*File semantics:\*\*\
> \- \*\*Creation rows\*\* must provide:\
> &#x20; \- \`identifier\` (required).\
> &#x20; \- \`domain\_external\_id\` (required only if the row is \*\*not\*\* linked to a rule; when a rule is provided, the domain is inherited from the rule and any value in this column is ignored).\
> &#x20; \- \`rule\` (required only if the implementation should be linked to an existing rule).\
> &#x20; \- \`result\_type\` — one of \`percentage\`, \`errors\_number\`, \`deviation\` (or their translated equivalents).\
> &#x20; \- \`goal\`, \`threshold\`.\
> &#x20; \- \`implementation\_template\` (the template name, not the label).\
> &#x20; \- All template‑required fields.\
> \- \*\*Update rows\*\* must provide either:\
> &#x20; \- \`implementation\_ref\` — identifies the implementation. If the \`implementation\_key\` in the row differs from the stored one, the key is updated (allowing rename via file).\
> &#x20; \- or \`implementation\_key\` alone — the implementation is located by key.\
> \- \*\*Column semantics:\*\* a column that is \*\*not present\*\* in the CSV leaves the field unchanged; a column that is \*\*present but empty\*\* clears the field.\
> \- \*\*Mixed content:\*\* rows that create and rows that update can coexist in the same file, as can rows with and without a linked rule.\
> \
> \*\*Restrictions:\*\*\
> \- Rows targeting implementations in \`deprecated\`, \`pending\_approval\`, or \`versioned\` status are rejected individually.\
> \- Updating a \*\*published\*\* implementation creates a \*\*new draft version\*\* (\`v+1\`) instead of overwriting the published one. The published version remains visible until the new draft is published.\
> \- Changing the rule of an implementation also moves it to the rule's domain.\
> \- Only basic information is loaded. \`dataset\`, \`population\`, and \`validations\` must be completed through the web interface after the upload.\
> \
> \*\*Response:\*\* Contains two lists:\
> \- \`ids\` – IDs of the implementations that were created or updated.\
> \- \`errors\` – Per‑row errors, each with the row's identifier (implementation key or ref) and a message.\
> \
> \*\*Field formats (relevant for CSV content):\*\*\
> \- \*\*Number\*\* – Numeric string (e.g., \`42\`, \`3.14\`).\
> \- \*\*Date\*\* – \`yyyy-mm-dd\`, \`yyyy/mm/dd\`, \`dd-mm-yyyy\` or \`dd/mm/yyyy\`.\
> \- \*\*DateTime\*\* – Same date patterns, followed by \`hh:mm:ss\`.\
> \- \*\*Link\*\* – \`\[Link text]\(<https://example.com/)\\`.\\>
> \- \*\*User or Group\*\* – \`user:Full Name\` or \`group:Group Name\` / \`group:Group Alias\` (e.g., \`user:Antonio García\`, \`group:Data Team\`).\
> \- \*\*User\*\* – The user's full name without the \`user:\` prefix.\
> \- \*\*Group\*\* – Group name or alias without the \`group:\` prefix.\
> \- \*\*Table / Dynamic Table\*\* – Column headers separated by semicolons (\`;\`), with a line break inside the cell separating headers from data rows.\
> \- \*\*Multiple Values\*\* – Values separated by pipe (\`|\`), e.g. \`user1|user2|user3\`.\
> \- \*\*Rich Text\*\* – Downloaded and uploaded without formatting; remove the column unless uploading plain text content.\
> \- \*\*Dropdown / Radio / Checkbox\*\* – Values must match the template definition exactly (case‑sensitive).<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/upload":{"post":{"description":"Uploads quality implementations from a CSV file. The upload is processed **synchronously**: rows are parsed, validated, and persisted before the response is returned. Partial success is possible: valid rows are persisted and invalid rows are reported individually in `errors`.\n\n**Permissions:** The permission required depends on the resulting implementation type and on the requested status. All checks are applied per row, against the implementation's domain:\n- **'Manage form implementations'** for `default` (rule‑bound) implementations.\n- **'Manage native implementations'** for `raw` implementations.\n- **'Manage basic implementations'** for `basic` implementations.\n- **'Manage implementations without rule'** is additionally required whenever the row has no linked rule.\n- **'Manage Implementation segments'** is additionally required when the row defines segments.\n- **'Review implementations'** is required when the row requests `status: \"published\"` or when `auto_publish` causes the workflow to publish.\nAdministrators and service accounts are always allowed.\n\n**Request body (multipart/form-data):**\n- `implementations` (required, file) – CSV file with one implementation per row.\n- `auto_publish` (optional, string) – `'true'` or `'false'`. When `'true'`, the workflow may publish the row if the caller holds the required permission and the published content would change. Default: `'false'`.\n- `lang` (optional, string) – Language used for labels and translations during import. Defaults to the server‑configured application language; the browser language is not read by the API.\n\n**File semantics:**\n- **Creation rows** must provide:\n  - `identifier` (required).\n  - `domain_external_id` (required only if the row is **not** linked to a rule; when a rule is provided, the domain is inherited from the rule and any value in this column is ignored).\n  - `rule` (required only if the implementation should be linked to an existing rule).\n  - `result_type` — one of `percentage`, `errors_number`, `deviation` (or their translated equivalents).\n  - `goal`, `threshold`.\n  - `implementation_template` (the template name, not the label).\n  - All template‑required fields.\n- **Update rows** must provide either:\n  - `implementation_ref` — identifies the implementation. If the `implementation_key` in the row differs from the stored one, the key is updated (allowing rename via file).\n  - or `implementation_key` alone — the implementation is located by key.\n- **Column semantics:** a column that is **not present** in the CSV leaves the field unchanged; a column that is **present but empty** clears the field.\n- **Mixed content:** rows that create and rows that update can coexist in the same file, as can rows with and without a linked rule.\n\n**Restrictions:**\n- Rows targeting implementations in `deprecated`, `pending_approval`, or `versioned` status are rejected individually.\n- Updating a **published** implementation creates a **new draft version** (`v+1`) instead of overwriting the published one. The published version remains visible until the new draft is published.\n- Changing the rule of an implementation also moves it to the rule's domain.\n- Only basic information is loaded. `dataset`, `population`, and `validations` must be completed through the web interface after the upload.\n\n**Response:** Contains two lists:\n- `ids` – IDs of the implementations that were created or updated.\n- `errors` – Per‑row errors, each with the row's identifier (implementation key or ref) and a message.\n\n**Field formats (relevant for CSV content):**\n- **Number** – Numeric string (e.g., `42`, `3.14`).\n- **Date** – `yyyy-mm-dd`, `yyyy/mm/dd`, `dd-mm-yyyy` or `dd/mm/yyyy`.\n- **DateTime** – Same date patterns, followed by `hh:mm:ss`.\n- **Link** – `[Link text](https://example.com/)`.\n- **User or Group** – `user:Full Name` or `group:Group Name` / `group:Group Alias` (e.g., `user:Antonio García`, `group:Data Team`).\n- **User** – The user's full name without the `user:` prefix.\n- **Group** – Group name or alias without the `group:` prefix.\n- **Table / Dynamic Table** – Column headers separated by semicolons (`;`), with a line break inside the cell separating headers from data rows.\n- **Multiple Values** – Values separated by pipe (`|`), e.g. `user1|user2|user3`.\n- **Rich Text** – Downloaded and uploaded without formatting; remove the column unless uploading plain text content.\n- **Dropdown / Radio / Checkbox** – Values must match the template definition exactly (case‑sensitive).\n","operationId":"TdDqWeb.ImplementationUploadController.create","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ImplementationUploadCreateRequest"}}},"description":"CSV upload request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationUploadCreateResponse"}}},"description":"Upload response"},"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 implementations from CSV","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationUploadCreateRequest":{"additionalProperties":false,"properties":{"auto_publish":{"description":"Auto-publish flag (true/false)","nullable":true,"type":"string"},"implementations":{"description":"CSV file with implementations","format":"binary","type":"string"},"lang":{"description":"Language code (e.g., 'en', 'es')","nullable":true,"type":"string"}},"required":["implementations"],"title":"ImplementationUploadCreateRequest","type":"object"},"ImplementationUploadCreateResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"ids":{"items":{"type":"integer"},"type":"array"}},"required":["ids","errors"],"type":"object"}},"required":["data"],"title":"ImplementationUploadCreateResponse","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"}}}}
```

## Get implementation filters

> Returns the set of available filter values for quality implementation searches, scoped to what the caller is permitted to see.\
> \
> \*\*Permissions:\*\* The endpoint is accessible to any caller holding at least one of the following permissions on any domain:\
> \- \*\*'View quality'\*\*\
> \- \*\*'Manage form implementations'\*\*\
> \- \*\*'Manage native implementations'\*\*\
> \- \*\*'Manage confidential business concepts'\*\*\
> When the request includes an \`executable\` filter inside \`filters\`, the caller must additionally hold the \*\*'Execute implementations'\*\* permission, and the returned filter values are computed against the extended permission set (which also includes the executable-implementations scope).\
> \
> \*\*Request body:\*\*\
> \- \`filters\` (optional, object) – Optional criteria used to narrow the set of filter values returned (for example, restricting by implementation status or domain).\
> \- \`must\`, \`must\_not\` (optional, objects) – Alternative filter containers supported by the search layer. The \`executable\` marker is only read from \`filters\`.\
> \
> Soft‑deleted implementations are excluded by default; the endpoint applies a \`without: deleted\_at\` filter internally before computing aggregations. Returns aggregation metadata for the filters, not the implementations themselves. No pagination is applied.\
> \
> Service accounts receive a default filter limiting the scope to \`status = published\` when no explicit status filter is provided. Because filter values are derived from the implementations the caller can see, two users with different permission sets may receive different filter options for the same request.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementation_filters/search":{"post":{"description":"Returns the set of available filter values for quality implementation searches, scoped to what the caller is permitted to see.\n\n**Permissions:** The endpoint is accessible to any caller holding at least one of the following permissions on any domain:\n- **'View quality'**\n- **'Manage form implementations'**\n- **'Manage native implementations'**\n- **'Manage confidential business concepts'**\nWhen the request includes an `executable` filter inside `filters`, the caller must additionally hold the **'Execute implementations'** permission, and the returned filter values are computed against the extended permission set (which also includes the executable-implementations scope).\n\n**Request body:**\n- `filters` (optional, object) – Optional criteria used to narrow the set of filter values returned (for example, restricting by implementation status or domain).\n- `must`, `must_not` (optional, objects) – Alternative filter containers supported by the search layer. The `executable` marker is only read from `filters`.\n\nSoft‑deleted implementations are excluded by default; the endpoint applies a `without: deleted_at` filter internally before computing aggregations. Returns aggregation metadata for the filters, not the implementations themselves. No pagination is applied.\n\nService accounts receive a default filter limiting the scope to `status = published` when no explicit status filter is provided. Because filter values are derived from the implementations the caller can see, two users with different permission sets may receive different filter options for the same request.\n","operationId":"TdDqWeb.ImplementationFilterController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationFilterSearchRequest"}}},"description":"Filter search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationFilterSearchResponse"}}},"description":"Filter response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get implementation filters","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationFilterSearchRequest":{"additionalProperties":true,"title":"ImplementationFilterSearchRequest","type":"object"},"ImplementationFilterSearchResponse":{"properties":{"filters":{"additionalProperties":true,"type":"object"}},"title":"ImplementationFilterSearchResponse","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Search rule implementations

> Searches rule implementations using Elasticsearch, with the filters supplied as a JSON body.\
> \
> The set of implementations returned is filtered by the caller's search permissions on the implementations index. These include \*\*'View quality'\*\*, \*\*'Manage form implementations'\*\*, \*\*'Manage native implementations'\*\*, and \*\*'Manage confidential business concepts'\*\*. When the payload includes \`filters.executable = \[true]\`, the \*\*'Execute implementations'\*\* permission is also taken into account, which broadens the visible scope. Administrators and service accounts see all implementations.\
> \
> \*\*Request body:\*\*\
> \- \`page\`, \`size\` (optional) – Same meaning as the query parameters.\
> \- \`filters\`, \`must\`, \`must\_not\` (optional, objects) – Structured Elasticsearch‑style filters.\
> \- \`scroll\`, \`scroll\_id\` (optional) – Enable or continue a scroll session for large result sets. When both are present, \`page\` and \`size\` are ignored and the response returns a \`scroll\_id\` for the next page.\
> \
> The response includes an \`x-total-count\` header with the total number of matches, plus an \`implementations\` array, a \`filters\` object with facet counts when available, and a \`scroll\_id\` when scrolling is active.\
> \
> Service accounts receive a default filter (\`status: published\`) when no status filter is provided. Soft‑deleted implementations are not automatically excluded by this endpoint; include or exclude them explicitly via the filters.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/search":{"post":{"description":"Searches rule implementations using Elasticsearch, with the filters supplied as a JSON body.\n\nThe set of implementations returned is filtered by the caller's search permissions on the implementations index. These include **'View quality'**, **'Manage form implementations'**, **'Manage native implementations'**, and **'Manage confidential business concepts'**. When the payload includes `filters.executable = [true]`, the **'Execute implementations'** permission is also taken into account, which broadens the visible scope. Administrators and service accounts see all implementations.\n\n**Request body:**\n- `page`, `size` (optional) – Same meaning as the query parameters.\n- `filters`, `must`, `must_not` (optional, objects) – Structured Elasticsearch‑style filters.\n- `scroll`, `scroll_id` (optional) – Enable or continue a scroll session for large result sets. When both are present, `page` and `size` are ignored and the response returns a `scroll_id` for the next page.\n\nThe response includes an `x-total-count` header with the total number of matches, plus an `implementations` array, a `filters` object with facet counts when available, and a `scroll_id` when scrolling is active.\n\nService accounts receive a default filter (`status: published`) when no status filter is provided. Soft‑deleted implementations are not automatically excluded by this endpoint; include or exclude them explicitly via the filters.\n","operationId":"TdDqWeb.ImplementationSearchController.create","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"default":0,"type":"integer"}},{"description":"Page size. ","in":"query","name":"size","required":false,"schema":{"default":20,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationSearchRequest"}}},"description":"Implementation search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationSearchResponse"}}},"description":"Implementation 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 implementations","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria","properties":{"business_concept_id":{"description":"Filter by business concept ID(s)","items":{"type":"integer"},"type":"array"},"domain_id":{"description":"Filter by domain ID(s)","items":{"type":"integer"},"type":"array"},"implementation_status":{"description":"Filter by implementation status (e.g., 'draft', 'published')","items":{"type":"string"},"type":"array"},"rule_id":{"description":"Filter by rule ID(s)","items":{"type":"integer"},"type":"array"}},"type":"object"},"must":{"additionalProperties":true,"description":"Must conditions (e.g., rule_id)","type":"object"},"must_not":{"additionalProperties":true,"description":"Must not conditions","type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"},"status":{"description":"Filter by status (e.g., 'deleted')","nullable":true,"type":"string"}},"title":"ImplementationSearchRequest","type":"object"},"ImplementationSearchResponse":{"properties":{"filters":{"additionalProperties":true,"description":"Available filters with counts","properties":{"implementation_status":{"items":{"properties":{"count":{"type":"integer"},"key":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"implementations":{"items":{"additionalProperties":true,"properties":{"id":{"description":"Implementation ID","type":"integer"},"implementation_key":{"description":"Implementation key","type":"string"},"implementation_status":{"description":"Implementation status","type":"string"},"last_execution":{"description":"Last execution timestamp","format":"date-time","nullable":true,"type":"string"},"last_result":{"description":"Last result","nullable":true,"type":"string"},"name":{"description":"Implementation name","type":"string"},"rule_id":{"description":"Rule ID","type":"integer"}},"type":"object"},"type":"array"},"scroll_id":{"description":"Scroll ID for pagination","nullable":true,"type":"string"}},"title":"ImplementationSearchResponse","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"}}}}
```

## Search rule implementations by rule

> Returns the implementations linked to a specific rule. This endpoint is intended for clients that already know the rule ID and want to enumerate its implementations.\
> \
> Requires the \*\*'View quality'\*\* permission. The result set is further filtered by the caller's search permissions on the implementations index: \*\*'View quality'\*\*, \*\*'Manage form implementations'\*\*, \*\*'Manage native implementations'\*\*, and \*\*'Manage confidential business concepts'\*\*. Administrators and service accounts see all results.\
> \
> \*\*Request body:\*\*\
> \- \`must.rule\_id\` (required, integer) – The rule whose implementations should be returned. The rule ID is extracted from the request body; other filters from the payload are applied on top.\
> \
> The listing is capped at 1,000 results per request. Soft‑deleted implementations are excluded unless the request explicitly asks for them. The response includes a \`\_actions\` object for the caller.\
> \
> This endpoint is not paginated; use the general implementation search endpoint for large result sets or pagination.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rules/rule_implementations":{"post":{"description":"Returns the implementations linked to a specific rule. This endpoint is intended for clients that already know the rule ID and want to enumerate its implementations.\n\nRequires the **'View quality'** permission. The result set is further filtered by the caller's search permissions on the implementations index: **'View quality'**, **'Manage form implementations'**, **'Manage native implementations'**, and **'Manage confidential business concepts'**. Administrators and service accounts see all results.\n\n**Request body:**\n- `must.rule_id` (required, integer) – The rule whose implementations should be returned. The rule ID is extracted from the request body; other filters from the payload are applied on top.\n\nThe listing is capped at 1,000 results per request. Soft‑deleted implementations are excluded unless the request explicitly asks for them. The response includes a `_actions` object for the caller.\n\nThis endpoint is not paginated; use the general implementation search endpoint for large result sets or pagination.\n","operationId":"TdDqWeb.ImplementationController.search_rule_implementations","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationSearchRequest"}}},"description":"Implementation search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationSearchResponse"}}},"description":"Implementation 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 implementations by rule","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria","properties":{"business_concept_id":{"description":"Filter by business concept ID(s)","items":{"type":"integer"},"type":"array"},"domain_id":{"description":"Filter by domain ID(s)","items":{"type":"integer"},"type":"array"},"implementation_status":{"description":"Filter by implementation status (e.g., 'draft', 'published')","items":{"type":"string"},"type":"array"},"rule_id":{"description":"Filter by rule ID(s)","items":{"type":"integer"},"type":"array"}},"type":"object"},"must":{"additionalProperties":true,"description":"Must conditions (e.g., rule_id)","type":"object"},"must_not":{"additionalProperties":true,"description":"Must not conditions","type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"},"status":{"description":"Filter by status (e.g., 'deleted')","nullable":true,"type":"string"}},"title":"ImplementationSearchRequest","type":"object"},"ImplementationSearchResponse":{"properties":{"filters":{"additionalProperties":true,"description":"Available filters with counts","properties":{"implementation_status":{"items":{"properties":{"count":{"type":"integer"},"key":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"implementations":{"items":{"additionalProperties":true,"properties":{"id":{"description":"Implementation ID","type":"integer"},"implementation_key":{"description":"Implementation key","type":"string"},"implementation_status":{"description":"Implementation status","type":"string"},"last_execution":{"description":"Last execution timestamp","format":"date-time","nullable":true,"type":"string"},"last_result":{"description":"Last result","nullable":true,"type":"string"},"name":{"description":"Implementation name","type":"string"},"rule_id":{"description":"Rule ID","type":"integer"}},"type":"object"},"type":"array"},"scroll_id":{"description":"Scroll ID for pagination","nullable":true,"type":"string"}},"title":"ImplementationSearchResponse","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 rule implementation

> Retrieves a single rule implementation by its ID, including its rule, results, links, and data structures.\
> \
> Requires the \*\*'View quality'\*\* permission on the implementation's domain. Administrators and service accounts see all implementations.\
> \
> \*\*Behavior:\*\* The response includes:\
> \- \`quality\_event\` – Last recorded quality event for the implementation.\
> \- \`\_last\_rule\_result\_\` – Most recent rule result.\
> \- Filtered \`links\` – Only business concept links the caller can see.\
> \- Filtered \`data\_structures\` – Only structures the caller can view.\
> \- A \`\_actions\` object with the operations the caller can perform.\
> \
> Non‑admin users may receive fewer links or data structures than exist, depending on their permissions on the linked concepts and structures.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/{id}":{"get":{"description":"Retrieves a single rule implementation by its ID, including its rule, results, links, and data structures.\n\nRequires the **'View quality'** permission on the implementation's domain. Administrators and service accounts see all implementations.\n\n**Behavior:** The response includes:\n- `quality_event` – Last recorded quality event for the implementation.\n- `_last_rule_result_` – Most recent rule result.\n- Filtered `links` – Only business concept links the caller can see.\n- Filtered `data_structures` – Only structures the caller can view.\n- A `_actions` object with the operations the caller can perform.\n\nNon‑admin users may receive fewer links or data structures than exist, depending on their permissions on the linked concepts and structures.\n","operationId":"TdDqWeb.ImplementationController.show","parameters":[{"description":"Implementation ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationShowResponse"}}},"description":"Implementation 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 rule implementation","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationShowResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":{"additionalProperties":false,"properties":{"href":{"description":"Endpoint URL for the action","nullable":true,"type":"string"},"id":{"description":"ID of the resource","nullable":true,"type":"integer"},"input":{"additionalProperties":true,"description":"Input parameters for the action","nullable":true,"type":"object"},"method":{"description":"HTTP method (POST, GET, PUT, DELETE)","type":"string"}},"type":"object"},"description":"Available actions for the implementation (e.g., edit, delete, execute, etc.)","nullable":true,"type":"object"},"data":{"$ref":"#/components/schemas/Implementation"}},"required":["data"],"title":"ImplementationShowResponse","type":"object"},"Implementation":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":{"additionalProperties":false,"properties":{"href":{"description":"Endpoint URL for the action","nullable":true,"type":"string"},"id":{"description":"ID of the resource","nullable":true,"type":"integer"},"input":{"additionalProperties":true,"description":"Input parameters for the action","nullable":true,"type":"object"},"method":{"description":"HTTP method (POST, GET, PUT, DELETE)","type":"string"}},"type":"object"},"description":"Available actions for the implementation (e.g., edit, delete, execute, etc.)","nullable":true,"type":"object"},"data_structures":{"items":{"additionalProperties":false,"properties":{"data_structure":{"additionalProperties":true,"properties":{"current_version":{"additionalProperties":true,"type":"object"},"id":{"type":"integer"},"system":{"additionalProperties":true,"type":"object"}},"type":"object"},"data_structure_id":{"type":"integer"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"id":{"type":"integer"},"implementation_id":{"type":"integer"},"type":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"dataset":{"items":{"additionalProperties":false,"properties":{"alias":{"nullable":true,"type":"string"},"clauses":{"items":{"type":"object"},"nullable":true,"type":"array"},"join_type":{"nullable":true,"type":"string"},"structure":{"additionalProperties":true,"type":"object"}},"type":"object"},"nullable":true,"type":"array"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"domain":{"additionalProperties":false,"nullable":true,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"type":"object"},"domain_id":{"description":"Domain ID","nullable":true,"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"executable":{"description":"Whether the implementation is executable","type":"boolean"},"goal":{"description":"Goal value","nullable":true,"type":"number"},"id":{"description":"Implementation ID","type":"integer"},"implementation_key":{"description":"Unique implementation key","type":"string"},"implementation_ref":{"description":"Reference to parent implementation","nullable":true,"type":"integer"},"implementation_type":{"default":"default","description":"Type (default, raw, basic)","type":"string"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"links":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"minimum":{"description":"Minimum threshold","nullable":true,"type":"number"},"population":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"nullable":true,"type":"array"},"populations":{"items":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"type":"array"},"nullable":true,"type":"array"},"quality_event":{"additionalProperties":true,"nullable":true,"type":"object"},"raw_content":{"additionalProperties":false,"nullable":true,"properties":{"database":{"nullable":true,"type":"string"},"dataset":{"nullable":true,"type":"string"},"population":{"nullable":true,"type":"string"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"source_id":{"nullable":true,"type":"integer"},"validations":{"nullable":true,"type":"string"}},"type":"object"},"result_type":{"description":"Result type (percentage, number, etc.)","nullable":true,"type":"string"},"results":{"items":{"type":"object"},"nullable":true,"type":"array"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"active":{"type":"boolean"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"rule_id":{"description":"Rule ID","nullable":true,"type":"integer"},"segments":{"items":{"additionalProperties":false,"properties":{"structure":{"additionalProperties":true,"type":"object"}},"type":"object"},"nullable":true,"type":"array"},"status":{"description":"Implementation status","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"validation":{"items":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"type":"array"},"nullable":true,"type":"array"},"validations":{"items":{"additionalProperties":false,"properties":{"operator":{"additionalProperties":true,"type":"object"},"structure":{"additionalProperties":true,"type":"object"},"value":{"items":{"type":"object"},"nullable":true,"type":"array"}},"type":"object"},"nullable":true,"type":"array"},"version":{"default":1,"description":"Version number","type":"integer"}},"required":["id","implementation_key","status","version"],"title":"Implementation","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"}}}}
```

## Update rule implementation

> Updates an existing rule implementation.\
> \
> \*\*Permissions:\*\* The permission set is derived from the resulting implementation state:\
> \- \*\*'Manage form implementations'\*\* for \`default\` implementations.\
> \- \*\*'Manage native implementations'\*\* for \`raw\` implementations.\
> \- \*\*'Manage basic implementations'\*\* for \`basic\` implementations.\
> \- \*\*'Manage implementations without rule'\*\* when the implementation has no \`rule\_id\`.\
> \- \*\*'Manage Implementation segments'\*\* when the payload modifies the \`segments\` field.\
> \- \*\*'Review implementations'\*\* when the payload requests \`status: 'published'\`.\
> All permissions are validated against the implementation's domain. The implementation must be in an editable or versionable state; the request is rejected otherwise.\
> \
> If the response contains an \`error\` field, the update partially succeeded and the error describes what could not be applied.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/{id}":{"put":{"description":"Updates an existing rule implementation.\n\n**Permissions:** The permission set is derived from the resulting implementation state:\n- **'Manage form implementations'** for `default` implementations.\n- **'Manage native implementations'** for `raw` implementations.\n- **'Manage basic implementations'** for `basic` implementations.\n- **'Manage implementations without rule'** when the implementation has no `rule_id`.\n- **'Manage Implementation segments'** when the payload modifies the `segments` field.\n- **'Review implementations'** when the payload requests `status: 'published'`.\nAll permissions are validated against the implementation's domain. The implementation must be in an editable or versionable state; the request is rejected otherwise.\n\nIf the response contains an `error` field, the update partially succeeded and the error describes what could not be applied.\n","operationId":"TdDqWeb.ImplementationController.update","parameters":[{"description":"Implementation ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationUpdateRequest"}}},"description":"Implementation update request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationUpdateResponse"}}},"description":"Implementation response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqNotFoundResponse"}}},"description":"Not found"},"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":"Update rule implementation","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationUpdateRequest":{"additionalProperties":false,"properties":{"rule_implementation":{"additionalProperties":false,"properties":{"dataset":{"items":{"type":"object"},"nullable":true,"type":"array"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"domain_id":{"nullable":true,"type":"integer"},"goal":{"nullable":true,"type":"number"},"implementation_key":{"description":"Implementation key","nullable":true,"type":"string"},"minimum":{"nullable":true,"type":"number"},"populations":{"items":{"type":"array"},"nullable":true,"type":"array"},"raw_content":{"additionalProperties":true,"nullable":true,"type":"object"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"description":"Move implementation to another rule","nullable":true,"type":"integer"},"segments":{"items":{"type":"object"},"nullable":true,"type":"array"},"status":{"enum":["draft","published","pending_approval","rejected","deprecated"],"nullable":true,"type":"string"},"validation":{"items":{"type":"array"},"nullable":true,"type":"array"}},"type":"object"}},"required":["rule_implementation"],"title":"ImplementationUpdateRequest","type":"object"},"ImplementationUpdateResponse":{"additionalProperties":true,"title":"ImplementationUpdateResponse","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"},"TdDqNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqNotFoundResponse","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"}}}}
```

## Delete rule implementation

> Deletes a rule implementation. The actual behavior depends on the current status of the implementation:\
> \- \*\*Published\*\* implementations are soft‑deleted: the record is kept, its \`status\` becomes \`deprecated\` and \`deleted\_at\` is set. The record remains queryable through the deleted scope.\
> \- \*\*Deprecated\*\* implementations are hard‑deleted together with all versions sharing the same \`implementation\_ref\`. This removes the entire version group from the database.\
> \- \*\*Other non‑versioned statuses\*\* (e.g., \`draft\`, \`rejected\`) are hard‑deleted individually.\
> \- \*\*Versioned\*\* implementations cannot be deleted; the operation returns success without removing anything.\
> \
> \*\*Permissions:\*\* The exact check depends on the implementation's current status:\
> \- \*\*Published\*\* implementations require the \*\*'Review implementations'\*\* permission on the domain, and the implementation must be in a versionable state.\
> \- \*\*Other statuses\*\* require the permission set derived from the implementation's type (\*\*'Manage form implementations'\*\*, \*\*'Manage native implementations'\*\*, \*\*'Manage basic implementations'\*\*, \*\*'Manage implementations without rule'\*\*, and \*\*'Manage Implementation segments'\*\* if segments are present), all validated against the implementation's domain.\
> Administrators and service accounts are always allowed.\
> \
> After the delete, the affected implementations are reindexed in the search engine. If the implementation is in a state that cannot be deleted (e.g., versioned), the endpoint returns \`204 No Content\` without actually removing any record.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/{id}":{"delete":{"description":"Deletes a rule implementation. The actual behavior depends on the current status of the implementation:\n- **Published** implementations are soft‑deleted: the record is kept, its `status` becomes `deprecated` and `deleted_at` is set. The record remains queryable through the deleted scope.\n- **Deprecated** implementations are hard‑deleted together with all versions sharing the same `implementation_ref`. This removes the entire version group from the database.\n- **Other non‑versioned statuses** (e.g., `draft`, `rejected`) are hard‑deleted individually.\n- **Versioned** implementations cannot be deleted; the operation returns success without removing anything.\n\n**Permissions:** The exact check depends on the implementation's current status:\n- **Published** implementations require the **'Review implementations'** permission on the domain, and the implementation must be in a versionable state.\n- **Other statuses** require the permission set derived from the implementation's type (**'Manage form implementations'**, **'Manage native implementations'**, **'Manage basic implementations'**, **'Manage implementations without rule'**, and **'Manage Implementation segments'** if segments are present), all validated against the implementation's domain.\nAdministrators and service accounts are always allowed.\n\nAfter the delete, the affected implementations are reindexed in the search engine. If the implementation is in a state that cannot be deleted (e.g., versioned), the endpoint returns `204 No Content` without actually removing any record.\n","operationId":"TdDqWeb.ImplementationController.delete","parameters":[{"description":"Implementation ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"No content"},"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 rule implementation","tags":["Implementations"]}}},"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"}}}}
```

## Update rule implementation

> Updates an existing rule implementation.\
> \
> \*\*Permissions:\*\* The permission set is derived from the resulting implementation state:\
> \- \*\*'Manage form implementations'\*\* for \`default\` implementations.\
> \- \*\*'Manage native implementations'\*\* for \`raw\` implementations.\
> \- \*\*'Manage basic implementations'\*\* for \`basic\` implementations.\
> \- \*\*'Manage implementations without rule'\*\* when the implementation has no \`rule\_id\`.\
> \- \*\*'Manage Implementation segments'\*\* when the payload modifies the \`segments\` field.\
> \- \*\*'Review implementations'\*\* when the payload requests \`status: 'published'\`.\
> All permissions are validated against the implementation's domain. The implementation must be in an editable or versionable state; the request is rejected otherwise.\
> \
> If the response contains an \`error\` field, the update partially succeeded and the error describes what could not be applied.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/{id}":{"patch":{"description":"Updates an existing rule implementation.\n\n**Permissions:** The permission set is derived from the resulting implementation state:\n- **'Manage form implementations'** for `default` implementations.\n- **'Manage native implementations'** for `raw` implementations.\n- **'Manage basic implementations'** for `basic` implementations.\n- **'Manage implementations without rule'** when the implementation has no `rule_id`.\n- **'Manage Implementation segments'** when the payload modifies the `segments` field.\n- **'Review implementations'** when the payload requests `status: 'published'`.\nAll permissions are validated against the implementation's domain. The implementation must be in an editable or versionable state; the request is rejected otherwise.\n\nIf the response contains an `error` field, the update partially succeeded and the error describes what could not be applied.\n","operationId":"TdDqWeb.ImplementationController.update (2)","parameters":[{"description":"Implementation ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationUpdateRequest"}}},"description":"Implementation update request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationUpdateResponse"}}},"description":"Implementation response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqNotFoundResponse"}}},"description":"Not found"},"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":"Update rule implementation","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationUpdateRequest":{"additionalProperties":false,"properties":{"rule_implementation":{"additionalProperties":false,"properties":{"dataset":{"items":{"type":"object"},"nullable":true,"type":"array"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"domain_id":{"nullable":true,"type":"integer"},"goal":{"nullable":true,"type":"number"},"implementation_key":{"description":"Implementation key","nullable":true,"type":"string"},"minimum":{"nullable":true,"type":"number"},"populations":{"items":{"type":"array"},"nullable":true,"type":"array"},"raw_content":{"additionalProperties":true,"nullable":true,"type":"object"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"description":"Move implementation to another rule","nullable":true,"type":"integer"},"segments":{"items":{"type":"object"},"nullable":true,"type":"array"},"status":{"enum":["draft","published","pending_approval","rejected","deprecated"],"nullable":true,"type":"string"},"validation":{"items":{"type":"array"},"nullable":true,"type":"array"}},"type":"object"}},"required":["rule_implementation"],"title":"ImplementationUpdateRequest","type":"object"},"ImplementationUpdateResponse":{"additionalProperties":true,"title":"ImplementationUpdateResponse","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"},"TdDqNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqNotFoundResponse","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"}}}}
```

## Download implementations as XLSX

> Exports quality implementations as an Excel (XLSX) workbook. The export may contain published, draft or archived implementations that match the filters. A \`content-disposition\` header is set with the generated filename.\
> \
> \*\*Permissions:\*\*\
> Requires the \*\*'View quality'\*\* permission. The workbook is filtered to the implementations visible to the caller; administrators and service accounts see all implementations.\
> \
> \*\*File format:\*\*\
> \- \*\*Type:\*\* Excel (XLSX).\
> \- \*\*Structure:\*\* One sheet per implementation type. The sheet name is the \*\*template name\*\* (not the template label).\
> \- \*\*Columns per row:\*\*\
> &#x20; \- \*\*Common fields:\*\* implementation ref, identifier, type, domain ext id, domain, executable, rule, rule template, implementation template, result type, goal, threshold, records, errors, quality, execution, last execution, inserted at, updated at, concepts, structure domains.\
> &#x20; \- \*\*Template fields:\*\* every field defined by the implementation template.\
> &#x20; \- \*\*Dataset info:\*\* \`data\_set\_external\_id\_1\`, \`data\_set\_external\_id\_2\`, … as many as datasets are linked to the implementation.\
> &#x20; \- \*\*Validation field info:\*\* \`validation\_field\_1\`, \`validation\_field\_2\`, … as many as fields exist in the implementation's validation.\
> \- \*\*Language:\*\* headers and field values are rendered in the language set by the \`lang\` parameter, falling back to the server default.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/xlsx/download":{"post":{"description":"Exports quality implementations as an Excel (XLSX) workbook. The export may contain published, draft or archived implementations that match the filters. A `content-disposition` header is set with the generated filename.\n\n**Permissions:**\nRequires the **'View quality'** permission. The workbook is filtered to the implementations visible to the caller; administrators and service accounts see all implementations.\n\n**File format:**\n- **Type:** Excel (XLSX).\n- **Structure:** One sheet per implementation type. The sheet name is the **template name** (not the template label).\n- **Columns per row:**\n  - **Common fields:** implementation ref, identifier, type, domain ext id, domain, executable, rule, rule template, implementation template, result type, goal, threshold, records, errors, quality, execution, last execution, inserted at, updated at, concepts, structure domains.\n  - **Template fields:** every field defined by the implementation template.\n  - **Dataset info:** `data_set_external_id_1`, `data_set_external_id_2`, … as many as datasets are linked to the implementation.\n  - **Validation field info:** `validation_field_1`, `validation_field_2`, … as many as fields exist in the implementation's validation.\n- **Language:** headers and field values are rendered in the language set by the `lang` parameter, falling back to the server default.\n","operationId":"TdDqWeb.Implementation.XLSXController.download","parameters":[{"description":"Page number. Accepted but ignored. The export always streams the complete result set via a scroll query.","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Page size. Accepted but ignored. The export always streams the complete result set via a scroll query.","in":"query","name":"size","required":false,"schema":{"type":"integer"}},{"description":"Implementation status filter. Restricts the export to published or non‑published implementations. When omitted, both are included","in":"query","name":"impl_status","required":false,"schema":{"enum":["published","non_published"],"type":"string"}},{"description":"Header labels. Serialized map of custom column labels keyed by the original field name","in":"query","name":"header_labels","required":false,"schema":{"type":"string"}},{"description":"Content labels used to render dynamic content columns.","in":"query","name":"content_labels","required":false,"schema":{"type":"string"}},{"description":"Language for headers and content. Defaults to the server‑configured application language; the API does not read the browser language.","in":"query","name":"lang","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"$ref":"#/components/schemas/ImplementationXlsxDownloadResponse"}}},"description":"XLSX file"},"204":{"description":"No content - no implementations found"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download implementations as XLSX","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationXlsxDownloadResponse":{"format":"binary","title":"ImplementationXlsxDownloadResponse","type":"string"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Reindex implementations

> Triggers a full reindex of the implementations search index. The reindex is started asynchronously in the background. The endpoint returns \`202 Accepted\` immediately after the task is queued.\
> \
> \*\*Only administrators\*\* can reindex implementations.\
> \
> This is a heavy maintenance operation. Search results may be temporarily incomplete while the index is rebuilt.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/search/reindex_all":{"get":{"description":"Triggers a full reindex of the implementations search index. The reindex is started asynchronously in the background. The endpoint returns `202 Accepted` immediately after the task is queued.\n\n**Only administrators** can reindex implementations.\n\nThis is a heavy maintenance operation. Search results may be temporarily incomplete while the index is rebuilt.\n","operationId":"TdDqWeb.ImplementationSearchController.reindex","parameters":[],"responses":{"202":{"description":"Accepted"},"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":"Reindex implementations","tags":["Implementations"]}}},"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"}}}}
```

## Unlink data structure from implementation

> Removes the link between an implementation and a data structure.\
> \
> Requires the \*\*'Link implementations to structures'\*\* permission on the domain of the implementation associated with the link. Administrators bypass the check; service accounts are not granted this permission by default.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/data_structures/{id}":{"delete":{"description":"Removes the link between an implementation and a data structure.\n\nRequires the **'Link implementations to structures'** permission on the domain of the implementation associated with the link. Administrators bypass the check; service accounts are not granted this permission by default.\n","operationId":"TdDqWeb.ImplementationStructureController.delete","parameters":[{"description":"Implementation-structure link ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"No content"},"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":"Unlink data structure from implementation","tags":["Implementations"]}}},"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"}}}}
```

## Upload implementations from XLSX

> Uploads quality implementations from an Excel (XLSX) workbook. The upload is processed \*\*asynchronously\*\* by a background worker; the endpoint returns a \`job\_id\` for tracking. If the same file hash is uploaded while a previous job is still pending, the existing job is reused. Processing errors are reported per row via the job's event record.\
> \
> \*\*Permissions:\*\* The initial authorization check requires the \*\*'Review implementations'\*\* permission (via the \`:mutation, :submit\_implementation\` policy). In practice this means the caller must hold at least one of the following on the relevant domains:\
> \- \*\*'Manage implementations without rule'\*\*\
> \- \*\*'Manage form implementations'\*\*\
> \- \*\*'Manage native implementations'\*\*\
> \
> Per‑row permissions are validated by the worker once the job runs:\
> \- \*\*'Manage form implementations'\*\* for \`default\` (rule‑bound) implementations.\
> \- \*\*'Manage native implementations'\*\* for \`raw\` implementations.\
> \- \*\*'Manage basic implementations'\*\* for \`basic\` implementations.\
> \- \*\*'Manage implementations without rule'\*\* when the row has no linked rule.\
> \- \*\*'Manage Implementation segments'\*\* when the row defines segments.\
> \- \*\*'Review implementations'\*\* when the row requests \`status: "published"\` or when \`auto\_publish\` publishes content.\
> Administrators and service accounts are always allowed.\
> \
> \*\*Request body (multipart/form-data):\*\*\
> \- \`implementations\` (required, file) – XLSX workbook using the same format as the download endpoint.\
> \
> \*\*File semantics:\*\*\
> \- \*\*Creation rows\*\* must provide:\
> &#x20; \- \`Identifier\` (required).\
> &#x20; \- \`Domain ext id\` (required only if the row is \*\*not\*\* linked to a rule; when a rule is provided, the domain is inherited from the rule and any value in this column is ignored).\
> &#x20; \- \`Rule\` (required only if the implementation should be linked to an existing rule).\
> &#x20; \- \`Result Type\` — one of \`percentage\`, \`errors\_number\`, \`deviation\` (or their translated equivalents).\
> &#x20; \- \`Goal\`, \`Threshold\`.\
> &#x20; \- \`Implementation template\` (the template name, not the label).\
> &#x20; \- All template‑required fields.\
> \- \*\*Update rows\*\* must provide either:\
> &#x20; \- \`Implementation ref\` — identifies the implementation. If the \`implementation key\` in the file differs, the key is updated (allowing rename via file).\
> &#x20; \- or \`Implementation key\` alone — the implementation is located by key.\
> \- \*\*Column semantics:\*\* a column that is \*\*not present\*\* in the file leaves the field unchanged; a column that is \*\*present but empty\*\* clears the field.\
> \- \*\*Mixed content:\*\* rows that create and rows that update can coexist in the same workbook, as can rows with and without a linked rule.\
> \
> \*\*Restrictions:\*\*\
> &#x20; \- Rows targeting implementations in \`deprecated\`, \`pending\_approval\`, or \`versioned\` status are rejected individually by the worker.\
> &#x20; \- Updating a \*\*published\*\* implementation creates a \*\*new draft version\*\* (\`v+1\`) instead of overwriting the published one.\
> &#x20; \- Changing the rule of an implementation also moves it to the rule's domain.\
> &#x20; \- Only basic information is loaded. \`dataset\`, \`population\`, and \`validations\` must be completed through the web interface after the upload.\
> \
> \*\*Field formats (Excel uploads):\*\*\
> \- \*\*Number\*\* – Excel cell format Number or General.\
> \- \*\*Date\*\* – Excel cell format Date, or Text whose value matches one of: \`yyyy-mm-dd\`, \`yyyy/mm/dd\`, \`dd-mm-yyyy\`, \`dd/mm/yyyy\`.\
> \- \*\*DateTime\*\* – Excel cell format Date, or Text whose value matches one of: \`yyyy-mm-dd hh:mm:ss\`, \`yyyy/mm/dd hh:mm:ss\`, \`dd-mm-yyyy hh:mm:ss\`, \`dd/mm/yyyy hh:mm:ss\`.\
> \- \*\*Link\*\* – \`\[Link text] (<https://example.com/)\\`.\\>
> \- \*\*User or Group\*\* – \`user:Full Name\` or \`group:Group Name\` / \`group:Group Alias\`. Example: \`user:Antonio García\`, \`group:Data Team\`.\
> \- \*\*User\*\* – The user's full name without the \`user:\` prefix.\
> \- \*\*Group\*\* – Group name or alias without the \`group:\` prefix.\
> \- \*\*Table / Dynamic Table\*\* – Column headers separated by semicolons (\`;\`), with a line break inside the cell separating headers from data rows.\
> \- \*\*Multiple Values\*\* – Values separated by pipe (\`|\`), e.g. \`user1|user2|user3\`.\
> \- \*\*Rich Text\*\* – Downloaded and uploaded without formatting; remove the column unless uploading plain text content.\
> \- \*\*Dropdown / Radio / Checkbox\*\* – Values must match the template definition exactly (case‑sensitive).<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/xlsx/upload":{"post":{"description":"Uploads quality implementations from an Excel (XLSX) workbook. The upload is processed **asynchronously** by a background worker; the endpoint returns a `job_id` for tracking. If the same file hash is uploaded while a previous job is still pending, the existing job is reused. Processing errors are reported per row via the job's event record.\n\n**Permissions:** The initial authorization check requires the **'Review implementations'** permission (via the `:mutation, :submit_implementation` policy). In practice this means the caller must hold at least one of the following on the relevant domains:\n- **'Manage implementations without rule'**\n- **'Manage form implementations'**\n- **'Manage native implementations'**\n\nPer‑row permissions are validated by the worker once the job runs:\n- **'Manage form implementations'** for `default` (rule‑bound) implementations.\n- **'Manage native implementations'** for `raw` implementations.\n- **'Manage basic implementations'** for `basic` implementations.\n- **'Manage implementations without rule'** when the row has no linked rule.\n- **'Manage Implementation segments'** when the row defines segments.\n- **'Review implementations'** when the row requests `status: \"published\"` or when `auto_publish` publishes content.\nAdministrators and service accounts are always allowed.\n\n**Request body (multipart/form-data):**\n- `implementations` (required, file) – XLSX workbook using the same format as the download endpoint.\n\n**File semantics:**\n- **Creation rows** must provide:\n  - `Identifier` (required).\n  - `Domain ext id` (required only if the row is **not** linked to a rule; when a rule is provided, the domain is inherited from the rule and any value in this column is ignored).\n  - `Rule` (required only if the implementation should be linked to an existing rule).\n  - `Result Type` — one of `percentage`, `errors_number`, `deviation` (or their translated equivalents).\n  - `Goal`, `Threshold`.\n  - `Implementation template` (the template name, not the label).\n  - All template‑required fields.\n- **Update rows** must provide either:\n  - `Implementation ref` — identifies the implementation. If the `implementation key` in the file differs, the key is updated (allowing rename via file).\n  - or `Implementation key` alone — the implementation is located by key.\n- **Column semantics:** a column that is **not present** in the file leaves the field unchanged; a column that is **present but empty** clears the field.\n- **Mixed content:** rows that create and rows that update can coexist in the same workbook, as can rows with and without a linked rule.\n\n**Restrictions:**\n  - Rows targeting implementations in `deprecated`, `pending_approval`, or `versioned` status are rejected individually by the worker.\n  - Updating a **published** implementation creates a **new draft version** (`v+1`) instead of overwriting the published one.\n  - Changing the rule of an implementation also moves it to the rule's domain.\n  - Only basic information is loaded. `dataset`, `population`, and `validations` must be completed through the web interface after the upload.\n\n**Field formats (Excel uploads):**\n- **Number** – Excel cell format Number or General.\n- **Date** – Excel cell format Date, or Text whose value matches one of: `yyyy-mm-dd`, `yyyy/mm/dd`, `dd-mm-yyyy`, `dd/mm/yyyy`.\n- **DateTime** – Excel cell format Date, or Text whose value matches one of: `yyyy-mm-dd hh:mm:ss`, `yyyy/mm/dd hh:mm:ss`, `dd-mm-yyyy hh:mm:ss`, `dd/mm/yyyy hh:mm:ss`.\n- **Link** – `[Link text] (https://example.com/)`.\n- **User or Group** – `user:Full Name` or `group:Group Name` / `group:Group Alias`. Example: `user:Antonio García`, `group:Data Team`.\n- **User** – The user's full name without the `user:` prefix.\n- **Group** – Group name or alias without the `group:` prefix.\n- **Table / Dynamic Table** – Column headers separated by semicolons (`;`), with a line break inside the cell separating headers from data rows.\n- **Multiple Values** – Values separated by pipe (`|`), e.g. `user1|user2|user3`.\n- **Rich Text** – Downloaded and uploaded without formatting; remove the column unless uploading plain text content.\n- **Dropdown / Radio / Checkbox** – Values must match the template definition exactly (case‑sensitive).\n","operationId":"TdDqWeb.Implementation.XLSXController.upload","parameters":[{"description":"Language used for labels and translations during import. Defaults to the server‑configured application language; the API does not read the browser language.","in":"query","name":"lang","required":false,"schema":{"type":"string"}},{"description":"When `true`, the worker may publish rows if the caller holds **'Review implementations'** and the published content would change.","in":"query","name":"auto_publish","required":false,"schema":{"default":false,"type":"boolean"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ImplementationXlsxUploadRequest"}}},"description":"XLSX upload request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationXlsxUploadResponse"}}},"description":"Upload 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":"Upload implementations from XLSX","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationXlsxUploadRequest":{"additionalProperties":false,"properties":{"auto_publish":{"description":"Auto-publish flag (true/false)","nullable":true,"type":"string"},"implementations":{"description":"XLSX file with implementations","format":"binary","type":"string"},"lang":{"description":"Language code (e.g., 'en', 'es')","nullable":true,"type":"string"}},"required":["implementations"],"title":"ImplementationXlsxUploadRequest","type":"object"},"ImplementationXlsxUploadResponse":{"additionalProperties":false,"properties":{"job_id":{"description":"Job ID for tracking upload progress","type":"integer"}},"required":["job_id"],"title":"ImplementationXlsxUploadResponse","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"}}}}
```

## Create implementation result

> Creates a rule result for the specified implementation.\
> \
> Requires the \*\*'Manage quality execution results'\*\* permission on the domain of the implementation. Administrators and service accounts bypass the domain check.\
> \
> \*\*Request body:\*\*\
> \- \`rule\_result\` (required) – Object containing:\
> &#x20; \- \`records\` (required, integer) – Total number of records processed.\
> &#x20; \- \`errors\` (optional, integer) – Number of errors detected.\
> &#x20; \- \`params\` (optional, object) – Extra parameters for the execution.\
> &#x20; \- \`date\` (optional, ISO 8601 timestamp) – Accepted but ignored; the result date is set by the server.\
> &#x20; \- \`implementation\_key\` (optional, string) – Accepted but ignored; the key is taken from the URL.\
> &#x20; \- \`segments\` (optional, array) – Segment‑level results, each with \`records\`, \`errors\`, \`params\`, and \`name\`.\
> \
> The result is created and any segment results are inserted. The response includes \`segments\_inserted\`, the number of segment results created.\
> \
> If no published implementation matches the key, the endpoint returns \`404 Not Found\`.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.11.0"},"paths":{"/api/rule_implementations/{implementation_id}/results":{"post":{"description":"Creates a rule result for the specified implementation.\n\nRequires the **'Manage quality execution results'** permission on the domain of the implementation. Administrators and service accounts bypass the domain check.\n\n**Request body:**\n- `rule_result` (required) – Object containing:\n  - `records` (required, integer) – Total number of records processed.\n  - `errors` (optional, integer) – Number of errors detected.\n  - `params` (optional, object) – Extra parameters for the execution.\n  - `date` (optional, ISO 8601 timestamp) – Accepted but ignored; the result date is set by the server.\n  - `implementation_key` (optional, string) – Accepted but ignored; the key is taken from the URL.\n  - `segments` (optional, array) – Segment‑level results, each with `records`, `errors`, `params`, and `name`.\n\nThe result is created and any segment results are inserted. The response includes `segments_inserted`, the number of segment results created.\n\nIf no published implementation matches the key, the endpoint returns `404 Not Found`.\n","operationId":"TdDqWeb.ImplementationResultController.create","parameters":[{"description":"Implementation key","in":"path","name":"implementation_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationResultCreateRequest"}}},"description":"Result creation request","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ImplementationResultCreateResponse"}}},"description":"Result response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqNotFoundResponse"}}},"description":"Not found"},"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":"Create implementation result","tags":["Implementations"]}}},"components":{"schemas":{"ImplementationResultCreateRequest":{"additionalProperties":false,"properties":{"rule_result":{"additionalProperties":false,"properties":{"date":{"description":"Execution date (accepted but ignored)","format":"date-time","nullable":true,"type":"string"},"errors":{"description":"Number of errors","nullable":true,"type":"integer"},"implementation_key":{"description":"Implementation key (ignored, taken from URL)","nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"description":"Total records processed","type":"integer"},"segments":{"items":{"additionalProperties":false,"properties":{"errors":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"type":"integer"}},"type":"object"},"nullable":true,"type":"array"}},"required":["records"],"type":"object"}},"required":["rule_result"],"title":"ImplementationResultCreateRequest","type":"object"},"ImplementationResultCreateResponse":{"additionalProperties":false,"properties":{"data":{"properties":{"id":{"type":"integer"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"result":{"description":"Result as percentage or number","type":"string"},"segments_inserted":{"nullable":true,"type":"integer"}},"required":["id","result"],"type":"object"}},"required":["data"],"title":"ImplementationResultCreateResponse","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"},"TdDqNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqNotFoundResponse","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"}}}}
```
