# Introduction

Turn your data into a true business asset

Truedat is an enterprise data governance solution developed by Bluetab Solutions. It is used as part of our services in data governance programs.

## The problem

Obtaining information in a large company is a slow process.

* Finding data has a high human cost.
* Data consumption tools become obsolete very quickly.
* Poor data quality is common.
* Sharing quality status becomes a difficult task

## Our Solution

* **Data Understanding**: Gives you an end-to-end view from both business and technical perspectives.
* **Data Governance**: Lets you organize and enrich information through configurable workflows and monitor governance activity.
* **Data Delivery**: Lets you request, deliver, and use governed data through data lake management.

## Our approach

* **No license cost**: Truedat is installed in the environment of your choice, with no extra charges for users, assets, or usage.
* **Integration**: Our tool is ready to integrate with existing systems, and it can also connect to unexpected sources. We are integration experts.
* **Customization**: We do not expect you to adapt to our tool’s processes. We have built capabilities to customize and adapt Truedat to your organization.
* **Client-driven**: Solving real issues drives us. We deliver more than 20 releases each year, mostly with features requested by our clients.


# First steps

In this page we will describe in an orderly fashion the steps that we recommend you to take in order to know Truedat's main features. For more details refer to the User and Administration guides.

Once you have deployed your first version of Truedat you will get some testing data. You can use that data to explore the different features of the application. Once you are ready to try Truedat with your own data, follow this quick guide through your first steps.

## Change your password

Once you are in the application we recommend you to change your password to some password that you can remember in an easy way.

![](/files/-MaYXUnmaX86NwmbiLC-)

## Your first business concept

We have included a basic template for your concepts. [Templates ](https://docs.truedat.io/pages/-MKFpH49aSP73_wgxS3l#id-2.4TemplateManagement-TemplateManagement)will provide the form that you want to complete when creating a new concept and you can customize all the fields in a concept to your needs. For now, let's just stay with the default template in order to get the hang of things in Truedat.

![Create a concept with introducing all the fields](/files/-MaYYvBCeLeNBVJT3h05)

{% hint style="warning" %}
You will not be able to publish a concept until you have completed all mandatory fields. Learn more about [business concepts](/userguide/glossary#new-concept) in the user guide.
{% endhint %}

## Do you need to create a data domain?

In Truedat you may use just the default domain "Truedat" or you can use our [taxonomy](/administration/taxonomy) module to define your data domains hierarchy. This is a great way of organizing your data and will be very handy to allocate permissions to your uses through the use of [roles](/administration/taxonomy).

Let's create your first Domain as a root domain.

![](/files/-MaY_vRRKjTO0flz2jrA)

## Create your first system

[Systems ](/administration/systems)in Truedat are where all metadata imported automatically through the use of connectors are allocated and organized. As an administrator you can easily create a system in the Data Catalog screen.

![](/files/-MaYciU_g7WdyZt9tZM4)

## Setup a data source to import metadata

In Truedat you will be able to use different connectors depending on your installation. In order to know which connectors are available for you, create a new [source ](https://docs.truedat.io/pages/-MKFpH4B0ejgVcygQ0k-#id-2.6Managingconnectorsandsources-Source)and you will see the connectors installed in your application. Once you select your type of source you will need to input the required information for the selected source.

For this example we will be creating a new source to import metadata from AWS Glue

![](/files/-Mba5e-UI2Ihj1CzaxWI)

## Running your data source to import metadata

Once you have created your source, running it is a simple task. Just go to your source details, click run, select Catalog, click create and you will be redirected to the Job monitor page.

![](/files/-Mba79a0xA-K70ncuR-b)

{% hint style="warning" %}
This job may take a couple of minutes depending on the amount of data to be imported.&#x20;
{% endhint %}

Once the job has finished you will be able to navigate through your metada or search any data structure through the data catalog.


# User Guide

&#x20;**Objective**

The objective of this section is to show in a clear and concise way how to access the different functionalities of Truedat.

**Who is it for?**

To all users of the application.

**Access to Truedat**

Copy the Truedat access url and paste in any browser (Chrome, Microsoft Edge, Mozilla Firefox,...). A login screen will be shown. Depending on the installation of each client, different login options will be displayed, in some cases including the federation of credentials with their active directory or similar:

![](/files/-MKAunCWyVjn7F83vYur)

The example above shows two ways of access: an entry with username and password or an use with "Google Access". For the latter part an authorized account should be used to access the tool.

Once your credentials are validated the main screen will be shown:

![](/files/-MaY3uZnH4Khsmfto9pJ)

**Content**

The left side panel is made up of a set of modules with different functionalities. They are all interconnected. Each module will be explained exhaustively in the following sections of this guide. This is a short summary:&#x20;

* **Search**: Start screen and global search engine that allows to search all modules from a single place.
* **Glossary**: Administration and publication of business concepts, as well as the management of their links with other modules (Data Quality and Data Dictionary).
  * Concepts:
  * Drafts:
* **Data Catalog**: Technical metadata repository that is loaded automatically through integration with customer systems.
  * Structures:
  * Structures types:
  * Structure tags:
* **Data Quality**: Definition and administration of quality rules according to the quality principles defined in the organization. These rules are defined related to business concepts.
  * Quality rules:
  * Implementations:
  * Quality Dashboard:
* **Data Lineage**: Visualization of the data life cycle as well as the connection between each of the organization's systems, which allows us to have complete traceability of the data and the option to carry out impact analysis.
* **Data requests:** Management of data intake and delivery processes.
* **Dashboard**: Metrics for understanding government data status and quality.
* **Taxonomy:** Management of the data domains where the quality concepts, structures and rules will be classified. Additionally, this module will manage the assignment of roles of a user to a domain.
* **Administration**:
  * Users: Management of users and groups that can enter the application as well as consultation of the roles of these users.
  * Roles: Management of the different roles that can be assigned in the application as well as the permissions that are assigned to the people who have said roles.
  * Templates: Template management for the generation of dynamic fields in the glossary, catalog and quality modules.
  * Relations: Gestión de tipos de relación entre entidades de la aplicación.

**Version**

In the drop-down menu with the user icon located in the upper right, the user will be able to see the currently installed version of /truedat. This will be very useful to be able to report incidents to the /truedat team and know what features are available.

![](/files/-MKAunCa_slB2PhUOumD)


# Truedat AI Assistant

Truedat's AI Assistant is an intelligent feature designed to help you quickly find and understand information stored in your data governance platform. Instead of navigating through multiple sections, you can simply ask questions in natural language and get immediate answers about your business concepts, data structures, and quality implementations.

#### What Can the AI Assistant Help With?

The AI Assistant can help you:

* Discover Business Concepts: Find definitions, related terms, and understand business terminology used in your organization.
* Explore Data Structures: Get information about tables, fields, data types, and metadata.
* Understand Quality Rules: Learn about quality implementations, rules, and their results.
* Quick Information Retrieval: Access information faster without navigating through multiple menus.

#### How to Access the AI Assistant

The AI Assistant is available throughout Truedat:

1\. Look for the **AI Assistant icon** <img src="/files/D0ls5HdoG5tDtmpf929T" alt="" data-size="line"> in the top navigation bar.

2\. Click the icon to open the AI Assistant panel.

3\. The assistant panel will appear on the right side of your screen.

4\. You can minimize or close it at any time and resume your conversation later.

<br>


# Global search engine

The application's global search engine lets you search across the application. It currently works in the business glossary and data catalog modules.

Enter a search term to get suggestions. Click one to navigate directly to the matching entity, or press Enter to view the full list of results.

![](/files/-MKAunH-p2ebVYAsbniv)

From this list, you can view all results or results for a specific module. You can also open a selected result to see more details.


# Business Glossary

The Business Glossary provides clear definitions of your business data to the whole organization and helps avoid misunderstandings.

Business concepts are managed through a predefined workflow that relies on configured permissions. The diagram below shows the application's workflow for publishing concepts, along with an example of roles and the permissions each one can have.

<figure><img src="/files/Z88q0VJxAUejbxZWqX4O" alt=""><figcaption></figcaption></figure>

In the Business Glossary module, you can view and manage business concepts. These submenu options are available:

* **Concepts**: This view displays published business concepts. You may also have additional views for published concepts based on the concept type if the administrator configured them when defining the templates.
* **Drafts**: This view displays business concepts in Draft, Reviewing, or Rejected status that require user action. You will only see concepts for which you have permission to perform one of the required actions such as send for approval, publish, reject, or rectify.
* **Deprecated**: This view displays concepts that have been archived. You can either restore them to published status or permanently delete them.

![Business Glossary > Concepts](/files/8vs1xYxxIljiO2r8wVKy)

![Business Glossary > Drafts](/files/Xp4DVIEzhTszOypOwl8x)

In all views, you have the following options:

* **Search for concepts:** The search runs across all concept content and shows matching concepts as you type in the search field.
* **Filter:** This lets you filter by domain, status, type (template), and linked data fields, as well as any fields configured in the business concept [template](/administration/templates) as a list of values. Filters are only shown for fields with more than one value.
* **Save filters**: You can save your most-used filters. To do this, click **Save**, give the filter set a name, and the combination of filters will be displayed as a quick filter every time you return to this screen.
* **Download:** The list of concepts from the search result can be downloaded in Excel format.
* **New Concept:** Available only to users with the corresponding permission to create a concept in a domain.
* **Sort results:** Sort the list of concepts or search results by any displayed column by clicking the column header.

## **New Concept**

This option is only available to users with permission to "Create new concepts" in a domain.

**Domain**: Once users open the "New Concept" form, they can choose the domain where the concept will be created. Only domains where the user has permission to create a concept are available.

**Concept:** Name of the business term.

**Template:** Depending on the client's installation, one or more templates may be available.

* If there is only one template for business concepts, the field will not appear and the complete form will be displayed automatically.
* If you have more than one template, the "Templates" field will be displayed so that you can select the type of concept you want to register. Once selected, the configured dynamic form will be loaded through the corresponding template.

<figure><img src="/files/HN7C2MHGpAhL6NIfxGZ5" alt=""><figcaption></figcaption></figure>

Depending on the template, the corresponding form will be displayed. If there is only one template available for the selected domain, it will be automatically displayed.

The main mandatory fields are: domain, template and concept.

The rest of the fields will depend on the configuration of each installation.

When the form is complete, click on "Create" to create the new business concept in draft status.

Example of a concept where all the mandatory fields are completed:

![](/files/-MSXtBdXHnEGTRj09KQZ)

Example of a concept where some mandatory values are missing. It appears as Draft Not completed and has the Request approval button disabled.

![](/files/-MSXso6vMIZsKErUVm8m)

Mandatory fields are marked with a red asterisk so you can easily identify which fields must be completed before you can publish the concept.

![](/files/-MKAunEPbKxLBkAJ9IzA)

The template may include additional fields that are not required for publishing the concept but are recommended to provide a complete definition of the business concept. Only concepts with all mandatory and optional fields completed are shown as 100% complete.

If you have several languages set up in Truedat, you will have to complete the concept form in all the languages that have been marked as required. Fields with a fixed set of values will be automatically populated and will use the translations that must have been defined by an Administrator in the Languages module.

<figure><img src="/files/zSC2oLeO6b6OUHfRiC5k" alt=""><figcaption></figcaption></figure>

### Bulk upload of concepts

You can bulk upload concepts from an Excel file. Use this option to create new concepts and/or update existing ones. The upload file format is the same as the download file format, so if you need to update concepts, you can download the file, modify the required information, and upload the same file.

When uploading the file, if you have permission to publish concepts, you will be given the option to create or update and save the version directly in published status. Otherwise, the concept will be created or updated in draft status and will go through the standard approval workflow.

![](/files/xEytcve8385sdD6JLFGu)

<figure><img src="/files/lVroHqRQ5kLPpqh3EY3Z" alt=""><figcaption></figcaption></figure>

Keep the following in mind:

* To create a new concept, you must provide the name, the domain, and any required template fields.
* To update an existing concept, you need to make sure to include the concept id in the file.
* There should be a sheet in the Excel file for each of the template types. The sheets must be named with the name (not label) of the template.
* All fields must be completed with valid values:
  * The required fields must be completed.
  * Fields with a list of values must be completed with a valid value.

You can check the progress and result of the file load in the "My loads" menu option. If there are any errors, you will see the details. You can export them to a CSV file, review and correct them, and then try to load those records again.

## **Business Concept Screen - Workflow**

Clicking on any business concept in any subsection of the module, whether published or pending, displays the following screen:

![](/files/-MKAunE-GpMWzmM8dWny)

This screen is divided into 2 blocks.

1. **Detailed information**: where detailed information is displayed.
2. **Summary**: where the general information is always shown:
   1. **Status**: concept status (published, rejected or under review)
   2. **Version**: the version number of the concept.
   3. **Modification**: the last modification of the concept.
   4. **User**: the person who created or modified the concept.

Depending on the concept status and user permissions, different review and publish options are shown:

* For draft concepts: you can "Request approval", "Edit" or "Delete".\
  ![](/files/-MKAunE2WuEMF_LtUIPu)\
  \
  Deletion removes only the version currently in draft status without affecting an earlier published version if it exists.
* For published concepts: a "New version" can be created or you can "Archive" it.\
  ![](/files/-MKAunEC42-SmyVoV34w)

By clicking "New version", you can edit or delete it and, depending on the workflow, send the new version for approval or publication.

Clicking "Archive" removes the business concept from the list of published concepts. Use this option when a published term is no longer used but cannot be completely removed from the system because it has already been published. The application will notify you if the concept you are about to archive has related information such as links and quality rules.

![](/files/-MKAunEQDh3TAWfxioZT)

* Concepts in Review status: "Reject" and "Publish" options are displayed

![](/files/-MKAunE4ZlDZYMW3H9aa)

Clicking "Reject" will change the status of the term to "Rejected".

Clicking on "Publish" will change the status of the term to "Published" and will add the concept to the section.

* Concepts in Rejected status: there are two options available, "Rectify" and "Delete"\
  ![](/files/-MKAunEBubMMbwcu0pbI)\ <br>

Clicking on "Rectify" will send the concept for approval, going back to the draft status.

By clicking on "Delete" the option to permanently delete the concept version will appear. This delete action will only delete the version that has been rejected. If there are previously approved versions of the concept, they will not be affected.

Additionally, each concept has a series of tabs that provide different functionalities that are explained below.

## **Concept**

This is the main section of the module. It contains the details of all the attributes the user wants to display, such as description, type, values, formulas, managers, and areas.

![](/files/-MKAunE6OuCpMxMtHg_o)

Users can subscribe to changes on a concept and receive an email when changes are made to the concept, such as modifications, publication, structure links, or new quality rules.

![](/files/-MSXuJPZ5NNnCyLKXUDa)

You can share a concept. This action sends a notification and an email to the selected users, including the corresponding comment.

![](/files/-MSXvROthKdC1_ZFI6oW)

Users have the possibility to comment at the end of this section.

![](/files/-MKAunE7IQmfwox_Z6zM)

## **Linkage**

Links between the business concept and the metadata contained in the Data Catalog are displayed in this tab.

<figure><img src="/files/Hao7bBs5oxHWV97lX1QT" alt=""><figcaption></figcaption></figure>

You can navigate to the Data Catalog by clicking on the structure name.

The option to remove a link is also available if you have permissions to do so.

For users with permission to manage links, an "Add link" button appears. It lets you add a new data link and use filters and search to find the field or structure you want to link to:

<figure><img src="/files/GNmvfXxo9aUeDdSoKbrK" alt=""><figcaption></figcaption></figure>

#### AI-powered linkage

Manually linking logical business concepts to physical data structures can be very time-consuming. You can use link suggestions that rely on AI agents that analyze the information in the data catalog and provide links, along with an AI Confidence Score, for your review and acceptance.

Click the **Suggest** button to get a list of data structures that could be mapped to the business concept. You need specific permission to use this AI suggestion feature, in addition to the permissions that allow you to map concepts to structures.

<figure><img src="/files/iZnQ9UNTCuu08nv0W0sP" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/yUsYRc8o3tPloXS9J1om" alt=""><figcaption></figcaption></figure>

## **Related concepts**

To make this section available, you must configure [types of relationships](/administration/relations) between business concepts within the application. Once these relationship types are configured, this tab lets you view relationships between concepts and, if you have permission, create new relationships or delete existing ones.

A graph with all business relationships for the selected concept is displayed and can be used as the functional model for that concept. From this graph, you can navigate to the related concepts by clicking on them.

The number of displayed levels can be adjusted to simplify the graph. The default number of displayed levels can be customized in each installation.

<figure><img src="/files/SQaonjDB1nsPbCJHTlQN" alt=""><figcaption></figcaption></figure>

A table view of these relationships is also available:

<figure><img src="/files/7Hz40gIwxd8r1CgIqmsv" alt=""><figcaption></figcaption></figure>

#### Creation of a new relationship between concepts

In the Related Concepts tab, if you have permission to link concepts, you will see the "Add related concept" button. Click it, select the relationship type if required, and search for the concept to link. If you want to link multiple concepts at once, use the [Links Manager](#links-manager).

<figure><img src="/files/D7zp7iaAeb4N0riTgIAx" alt=""><figcaption></figcaption></figure>

## **Quality Rules**

In the Quality Rules tab, you can create a [new quality rule](https://confluence.bluetab.net/display/TRUED/1.4+Calidad+del+Dato), which is automatically linked to the concept where you create the rule. The concept domain is also assigned automatically to the quality rule.

<figure><img src="/files/9tyWXj2Y8Mi6GwRj2YGk" alt=""><figcaption></figcaption></figure>

This screen displays all quality rules related to business concepts. Clicking on a rule shows more detailed information, as shown in the [data quality section](https://confluence.bluetab.net/display/TRUED/1.4+Calidad+del+Dato).

The "Create quality rule" button allows you to generate a new rule related to the business concept and you will reach this screen:

<figure><img src="/files/QDiYmQwm1KmJzeb1BiH3" alt=""><figcaption></figcaption></figure>

## **Concept History**

In the History tab, you can check all versions that have been published or are currently being worked on.

![](/files/-MKAunEH07YKa_i2-v1v)

Clicking on a record shows the information for that version, letting you check what data the concept had at that time.

![](/files/-MKAunEIRnZ5ZDYzXUqN)

## **Audit**

Lastly, the Audit tab shows the details of all actions and related changes on the concept. You can see what changed, when, and by whom.

![](/files/-MKAunEJwNnwfByBIYkG)

## Links manager

If you need to link concepts to multiple data structures and other concepts, you can use the Links Manager option.

Go to the "Links manager" menu option under the "Glossary" module. Select the type of link you want to create, either to data structures or to other concepts. Then select the relationship type, if applicable. In the box on the left-hand side, search for and click the concept. In the box on the right-hand side, click the structures or concepts to link. Once you click, the link is created. If you click a structure or concept that is already linked, the link is removed.

<figure><img src="/files/lQy8qH6iLhx8ciW7Grpm" alt=""><figcaption></figcaption></figure>

## Concept sharing between domains

This feature is intended for multi-organization installations where multiple glossaries are managed. In these cases, there is usually a corporate domain where cross-business concepts are defined. Using the sharing functionality, users with the corresponding permissions can share concepts with other domains. This allows any user with permission to view concepts in the shared domain to see that specific concept.

A concept may be shared with multiple domains.

![](/files/-McQjc8ej4sQiTYUizpK)


# Data Catalog

This module lets you consult and enrich metadata obtained from your organization's systems. It provides search, filtering, and browsing options through the catalog. It also connects with both the glossary of concepts and the data quality glossary so you can navigate between modules.

When you access the Catalog, you get a list of available systems. For each system, you can see the volume of imported structures and the count by structure type when you hover over the number.

Systems can be grouped to provide an organized view, and you can collapse or expand each group.

<figure><img src="/files/L8XifonMpsy23DpEm38h" alt=""><figcaption></figcaption></figure>

You may also have additional catalog views where structures are grouped by criteria other than system, if your administrator has set them up in your installation. These alternative views appear as additional menu options in the Catalog module.

From here, you have several options to find the structure you want to consult.

* **Discover your system metadata**: Click a system to open a tree-like navigation and browse your metadata. You can also use the search box to filter the current list of structures and quickly find what you need.

![](/files/-MKAunFLoHJdEMKSsPGR)

* **Filtering**: You can filter using information discovered from the data source and additional information documented in your installation through data catalog templates. To filter by technical metadata fields, an administrator must configure those fields in the [Structure Types](/v8.7/administration/data-catalog-management) screen. Some filter examples are *structure type, last changed date, linked business concept, and with or without extra information such as notes or functional metadata*.
* **Search**: You can search across the complete metadata, including manual fields, structure path, and description.
* **Save filters**: Users can save their most frequently used filters. To do this, provide a name for the filter combination. It will then appear as an additional quick filter each time you enter the data catalog.

![](/files/-MSSvRbJN2jBkls9U7fJ)

## **Structures** <a href="#id-1.3datacatalog-1.3.1structures" id="id-1.3datacatalog-1.3.1structures"></a>

When viewing the details of a structure, you can see the following information:

* **Domain**: The data domain or domains the structure belongs to.
* **System**: The metadata repository the information is retrieved from.
* **Imported**: The date when the structure was first included in the catalog.
* **Updated:** The date when the structure information was last modified in the catalog.

Structure and field details may display several tabs, depending on the context.

* **Fields:** Structures composed of fields include a tab that lists them. If a structure has no fields, this tab is not displayed.
* **Notes:** If the structure type has an associated template, a tab is displayed to manage note information. Notes are manually managed metadata for a data structure. A workflow is available when this information needs review before approval.
* **Grants**: Displays the permissions granted to different users for the corresponding structure.

{% hint style="info" %}
To populate grants, local integration must be included.
{% endhint %}

* **Profiling:** This tab is shown when profiling information is available for the structure's child fields, or when distribution information is available for the structure you are viewing.
* **Quality**: Displays the list of implementations or quality rules that validate the structure you are consulting.
* **Linkage**: This tab is always shown. It displays existing links and lets authorized users create new ones.
* **Versions**: Displays the versions available for the structure and lets you browse them.
* **Audit**: Displays details of all manual changes made to the structure.

### **Domain modification** <a href="#id-1.3datacatalog-fields" id="id-1.3datacatalog-fields"></a>

When metadata is loaded into Truedat, a domain is assigned by the connector as specified in the [data source](/v8.7/administration/systems). In the data catalog, you can reassign the domain of a specific data structure or assign it to more than one domain. This is especially important if you plan to manage different permissions for data structures depending on the data domains they are assigned to. When changing a structure's domain, you can also automatically change the domain of all its children.

Bulk updates are also possible by uploading a CSV file. From the main Data Catalog screen, users with the `Manage Structure Domains` permission can bulk update the domain or domains of several structures by uploading a CSV file. The CSV file must use the following format:

Column headers: `external_id;domain_external_ids`

*external\_id*: the external ID of the structure whose domain or domains will be updated

*domain\_external\_ids*: the external ID of the new domain. If the structure has more than one domain, include them as a pipe-separated list (`|`).

### **Fields** <a href="#id-1.3datacatalog-fields" id="id-1.3datacatalog-fields"></a>

This section shows a list of the structure's fields, if any. For each field, it shows the field name, links to business concepts, a link to the field's traceability, and other metadata columns that may have been loaded from the system.

![](/files/-MKAunFMmBTpcSKox2V5)

From this field listing screen, you can perform the following actions:

* Navigate to a field's details by clicking the field name.
* Navigate to a field's traceability, if traceability is available for that field.
* Navigate to the concept associated with the field, if there is one, in the **Terms** column.

### Notes <a href="#id-1.3datacatalog-additionalinfo" id="id-1.3datacatalog-additionalinfo"></a>

Notes are used to record extra metadata in addition to the metadata obtained automatically by connectors. To use this functionality, you must define a [template](/v8.7/administration/templates) and assign it to the corresponding [structure type](/v8.7/administration/data-catalog-management).

Note creation can go through an approval workflow. Some [permissions](/v8.7/administration/userroles) are linked to this functionality and allow users to complete different steps in the process before publishing a note. If you do not need an approval workflow, you can simply set up a permission to publish notes directly and assign it to roles allowed to modify notes.

Users can perform different actions depending on their permissions and the note status, following the workflow used to manage structure notes.

![](/files/NXeByYcY00Lzv4A8wzzH)

![](/files/-Mdac3VLBQC8ZM2qe79y)

#### AI-powered note generation

Documenting newly ingested assets from scratch is tedious and time-consuming. You can ask AI to analyze the information available in Truedat, such as technical metadata and data profiles, and automatically draft the note content. You can then review it, amend it if needed, and publish it.

Administrators configure in the note templates which fields can be generated automatically by AI.

To use this functionality, you need a specific permission in addition to the permissions that allow you to create notes.

<figure><img src="/files/xIULlcCCwyTh4912JLmf" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/xAhMu8DN1WpcKIW1vbxp" alt=""><figcaption></figcaption></figure>

#### Viewing pending notes

Users with permission to manage notes — edit, send for approval, publish, reject, or un-reject — can view a list of notes pending action from them.

<figure><img src="/files/TcGMkdtaMOQDpG5Y3Fqt" alt=""><figcaption></figcaption></figure>

From the list, you can download the notes to an Excel file or navigate to a structure by clicking it and carrying out the relevant action. When reviewing a note, you can easily identify changes from previous versions because they are highlighted in a different color.

<figure><img src="/files/98fDQ1gGAFuVaQwstV2O" alt=""><figcaption></figcaption></figure>

#### Notes download

You can download a file with all published note information for structures. This file uses the same format required for uploads, so you can easily update note information in bulk before uploading it again.

![](/files/BN18E9LKWKuvwqYpEfQX)

#### Bulk load of notes

Users with permission to create notes can bulk upload this information from an Excel file. To do this, a template linked to the data structure type to which you want to add information must already be set up in the [Data Structures Type](/v8.7/administration/data-catalog-management) menu option.

The uploaded file must be an Excel file with one sheet for each structure type. The sheet name must match the structure type. In each sheet, the first column must be `external_id`, which is mandatory. The remaining columns correspond to the fields defined in the corresponding [template](/v8.7/administration/templates), in any order.

You can get the external IDs for your structures by [downloading the list of structures](/v8.7/userguide/catalog) from the data catalog screen. You can also download existing notes using the **Download editable structures metadata** option, modify the file by adding notes, and upload it again.

File example:

```
external_id;extended_description;gdpr
glue:/all_glue/default/table_without_columns;This is an example table without any columns;Yes
```

When creating the file to upload, keep the following points in mind:

* Column headers must match a field in the template of the structure being updated. If they do not match, those columns are ignored. If a column is not present in the file, the process ignores that field. It does not update the value if there was a previous note, and it creates the field with no content if needed. If a cell is left blank, that field is updated or created with no content.
* If you include a field that has a list of predefined values in the template, the values in the file must be one of the allowed values. Otherwise, the process fails.

{% hint style="danger" %}
You cannot upload note information for notes that are currently pending approval.
{% endhint %}

When loading the information, you get different options based on your permission level:

* If you can create notes, you get the **Upload notes** option. This creates a new version of the notes in draft status.
* If you have permission to publish notes from draft status, you get the **Upload and publish** option. This creates a new version of the note and publishes it directly, without going through the approval process.

<figure><img src="/files/VgxqfUXszoXbw1Pn7ZOr" alt=""><figcaption></figcaption></figure>

Once you click the upload button, the process starts, and you can see its progress in **Data Catalog → My loads**.

![](/files/gQzDYEcvHkpNfD41UluZ)

#### Bulk update of notes

Bulk updates of structure notes are possible, but only for admin roles. See [Bulk Updates in Administration](/v8.7/administration/updates) for more information.

### **Profiling** <a href="#id-1.3datacatalog-profiling" id="id-1.3datacatalog-profiling"></a>

Profiling a structure helps you better understand your data, the structure itself, and the ways it can be used to obtain information within the organization. It also helps you identify data quality issues early. To have profiling information available, the corresponding integration tasks must be completed so that profiling data can be obtained from the relevant systems.

Two types of profiling display are currently available:

#### **Outlined summary of fields in a structure**

The list of fields in the structure that have profiling information is displayed, together with the following information, if available:

* % unique values
* % null values
* Lowest value
* Highest value
* Mode, or most common value
* If a value distribution is available, an icon is displayed that links to the outlined field.

![](/files/-MKAunFOiNICeTxmCucz)

#### **Distribution of values for a field**

If value distribution information is available, the Profiling tab displays a graph with the different values available for that field.

![](/files/-MKAunFPljcoMehTBr5d)

#### **Value patterns**

If pattern information has been loaded using the profiling connector, you can also consult this distribution to better understand your data.

{% hint style="warning" %}
This feature is not available for all data sources.
{% endhint %}

![](/files/-MKAunFQUZwda8tCQ54o)

#### **Lineage and impact**

If traceability information is available for the selected structure, **Lineage** and **Impact** tabs are displayed so both diagrams can be viewed quickly. You can also navigate through the graph as explained in the [Data Lineage](https://confluence.bluetab.net/pages/viewpage.action?pageId=14156881) section.

**Lineage:** Shows the origin of the data. What information are you using to generate the data?

![](/files/-MKAunFY33f1rDxpV3S_)

**Impact:** Shows which other data structures use the data you are consulting. What would be impacted if you made a change to this data?

![](/files/-MKAunFZfZP474DWjCTn)

#### **Grants**

Using integration components, you can document in Truedat which users have access to certain structures. This allows users to see which structures they have been granted access to.

![](/files/-Mfl8yB6tT5wP6jR9GEa)

Users with permission to view a structure's grants get a tab that displays all grants that apply to that structure. This includes grants assigned directly to the structure and grants inherited from any ancestor.

![](/files/-MhE6xMDnTU1GXvgRimQ)

#### **Quality**

This section shows a list of quality implementations that reference the structure you are consulting. It also displays information about the rule each implementation belongs to and provides navigation to both the quality rule and the related implementation. The latest quality result is also displayed, if available.

![](/files/-MKAunFSYYZU8hTzc3AP)

### **Linkage**

This tab lets you consult and manage the links available for a structure or field.

![](/files/-MKAunFTi0zn-bLA3Alg)

### **Versions** <a href="#id-1.3datacatalog-versions" id="id-1.3datacatalog-versions"></a>

If several versions are loaded in the application, you can navigate between them. This version navigation lets you consult the fields that made up the structure in previous versions.

![](/files/-MKAunFUetdgpKEJj7ro)

When consulting previous versions, you will see which fields in the structure have changed compared with the current version. Fields are marked when they have been deleted or modified.

![](/files/-MKAunFVJwL7nGi8sM7a)

### **Audit** <a href="#id-1.3datacatalog-audit" id="id-1.3datacatalog-audit"></a>

The data structure audit shows all manual actions carried out on those structures. You can review the changes made to the additional information of each structure, as well as the people who made those changes.

![](/files/-MKAunFWK6gayZI6gd0c)

### Structure confidentiality <a href="#id-1.3datacatalog-structureconfidentiality" id="id-1.3datacatalog-structureconfidentiality"></a>

Users with the appropriate permissions can mark a structure as confidential. A structure marked as confidential is visible only to people who have permission to manage confidential structures and view confidential structures in the domain where the structure is located. If you do not want to use this functionality, do not enable the permission in any defined role.

![](/files/-MKAunFXjsRUl5ErQNpk)

## **Structure tagging** <a href="#id-1.3datacatalog-1.3.2massiveupdateofadditionalinformation" id="id-1.3datacatalog-1.3.2massiveupdateofadditionalinformation"></a>

If your administrator has [created structure tags](/v8.7/administration/data-catalog-management#data-structures-tags) and [assigned permissions](/v8.7/administration/userroles#data-dictionary-data-catalog) to you, you can link a tag to a structure and add comments explaining why the tag was assigned.

A tag can be assigned to all underlying structures by selecting **Inherited by children**.

![](/files/4U5AzMCLJRwwEOKWBG2C)

Once a tag has been linked to a structure, any user with permission to view that structure can also see the tag, description, and comments by hovering over the tag.

![](/files/QBLOgQNzqc5K9CSnqry7)

## **Sharing structures** <a href="#id-1.3datacatalog-1.3.2massiveupdateofadditionalinformation" id="id-1.3datacatalog-1.3.2massiveupdateofadditionalinformation"></a>

You can share your structures with others using the corresponding action in the upper-right corner of the structure information. This sends a notification and an email to the users specified in the form.

{% hint style="info" %}
You need to include SMTP server configuration in your installation to receive email notifications.
{% endhint %}

![](/files/-MeU_RXMGO-coZ7-ypd_)

## **Catalog information export** <a href="#cataloginformationdownload" id="cataloginformationdownload"></a>

After performing any search or filtering within the data catalog, you can export the metadata contained in the catalog in CSV format so it can be processed in a spreadsheet application such as Excel.

![](/files/-MKAunFAzsq4X_QvHgPx)


# Data Market

## Grants

Truedat can be used to document grants given to users to access data structures. To achieve this, a customized integration needs to be in place to include this information using Truedat's API.

Using the application side menu, you will have two views available: "My Grants" and "List of Grants".

### My Grants

In this view, users will have a complete list of all structures to which they have been granted access. This will include structures for which the grant has been provided and any other structure inheriting this grant.

![](/files/-MkbN72WNP5EZCJprH8x)

### List of Grants

Any user with permission to view grants will have this view available. In this view, all grants will be listed for review. Users will be able to apply filters by structure type, system, and domain.

![](/files/-MkbRy9swidB9n89qxs2)

## Grant Requests

Our data catalog may be used to manage user requests to access data (grant requests). This is done using a "shopping cart" where users include the structures to which access is being requested.

Users can request access to a data structure for themselves or for other users. To do so, the requester will need the permission "Create grant request for third parties", and the requestee will need the permission "Allow grant requests from third parties".

### Configuration

**Template**: To activate this feature, at least one template needs to be created in the "Grant request" scope. This template will define the information the user needs to complete when requesting access to the data. More than one type of template can be created if you need different forms.

**Permissions**: Provide permission "Approve grant request" to all roles that need to approve these requests.

### Shopping cart

Once this configuration has been created, users will have the option to add structures to their cart and check out the request, completing the data that has been set up beforehand.

There are two ways to add structures you need access to:

**1) Navigating the Data Catalog:**

In the Data Catalog, go to the structure you need access to and click on <img src="/files/JE8fagDBQhz9AT200PI4" alt="" data-size="line">. This will add the structure to your shopping cart. You can add as many structures as needed and then check out, which will register your request.

<figure><img src="/files/ETX9tjHjKl59oQ7FsqB4" alt=""><figcaption><p>Click on the Grant Request button</p></figcaption></figure>

<figure><img src="/files/N0qvcNVyxdRz6qcUByJw" alt=""><figcaption><p>Once you have added all the structures to the cart, click on Checkout</p></figcaption></figure>

**2) In "Structures grant requests" from the Data Market menu:**

On the list of structures, click on the Grant Request button. This will add the structure to the shopping cart.

<figure><img src="/files/9A6oeLRZZel3lrWydGbd" alt=""><figcaption><p>Click on the Request button on the right and once you have added all the structures to the cart, click on Checkout</p></figcaption></figure>

**Check out and submit request**

<figure><img src="/files/JXONwETnlxuG9mQALfZL" alt=""><figcaption><p>Complete the information required and click on Save to submit the request</p></figcaption></figure>

### My grant requests

This is a view for all users where you will get a list of all the requests you have created and their current status. You will be able to filter by status and order by last updated.

![](/files/K69oWWuLQuHC8JrMRBWd)

{% hint style="success" %}
This view may be customized in each installation to display the required columns.
{% endhint %}

Clicking on a grant request will take you to the detailed view, where you will be able to see who has approved or rejected it and which role is pending a response to this request.

![](/files/Kr4NdBotmWzBUppjnJRG)

### Approve grant requests

If you have a role with permission to approve or reject grant requests, you will have access to the menu option "Manage Grant Requests". On this screen, the "Approve View" lets you see grant requests that you are authorized to approve.

You can apply filters by user or by any data from the request or the structure's metadata. To approve or reject them, you can either select the requests to be approved or rejected from this list, or go to the grant request details, review them, and approve or reject them. If you have more than one role that can approve or reject grant requests, you will have to select the role you are using to approve or reject them.

If the grant request is rejected, the user who made the request will be notified in the notification system in Truedat and by email.

<figure><img src="/files/Q95VBkpALvwsjh9Iim86" alt=""><figcaption></figcaption></figure>

In this same screen, you can go to the Search view where you can search for grant requests already approved or rejected.

### Automate grant requests approvals

Grant requests can be automatically approved or rejected if they meet certain criteria. A user with permission to approve or reject grants can set up rules that will be checked when the grant request is submitted for approval. These rules will determine whether requests can be automatically approved or rejected or whether they have to go through the manual approval workflow.

In order to create a rule, go to "Grants" menu to the option "Approval Rules" and click on the "New Rule" button. The following information is required to create a rule:

* Name of the rule
* Domain where this rule is to be applied
* Role for which the approval or rejection will be automated
* Action to be taken if the rule is met: approve or reject
* Comment (optional)
* Conditions to be checked to determine whether the request can be automatically approved or rejected. It will validate whether a field is, or is not, equal to a certain value. This field can be from the request details, the structure's note, or the structure's technical metadata.
  * Context: Request metadata / Structure's note / Structure's metadata / Requester / Creator
  * Field:
    * Request metadata or structure's note: you must type the exact name of the field as defined in the Grants template or Data Catalog template (use the name, not the label).
    * Structure's metadata: type the name of the metadata field.
    * Requester or Creator: type either `user_name`, `email`, or `external_id`.
  * Operator: is equal to / is not equal to.
  * Value: value of the field.

<figure><img src="/files/rAVnKu7xFGBCkyhRUsXw" alt=""><figcaption></figcaption></figure>

## Access removal request

If you have been given access to a structure but would like to request its removal, you can do so in Truedat. Also, with the relevant permission, you can request the removal of another user’s access rights. These requests will then be sent to an external system for the actual removal, which will require integration with that system via APIs.

With the permission "Remove grant", the request will be submitted directly for action. If you do not have this permission, your request will have to be approved by a user with permission to "Approve grant request" before it is submitted.

#### Request grant removal

For your own access, you can go to the My Grants menu option. For another user's grant, go to the Grants menu option, search for the grant to be removed, then go to the grant details and click the Remove grant button.

If the request needs to be approved, because you do not have permission to "Remove grant", it will have to be approved by a user with permission to "Approve grants".

#### Approve grant removal requests

In the menu option "Approve grant requests", you will find not only requests for access, but also requests for access removal. Click on a request to go to its details and approve or reject it as appropriate. Requests that are approved will be submitted to the external system that manages access, and once access has been removed, the grant will be updated in Truedat with an expiration date to reflect that the access is no longer granted.

## Grant modification request

Once you have been granted access to a data structure, if you need to edit the grant, you will have to make a request to modify it. This request will go through the same approval workflow as new grant requests.

In the Data Catalog, go to the relevant structure, click on the Grants button <img src="/files/4nwX1q7xrMBoC45axYXL" alt="" data-size="line">, and select "Request grant change".

<figure><img src="/files/i40U947vLVR3FEmMQGaU" alt=""><figcaption></figcaption></figure>

You can also go to the "Structures grant requests" menu option in the Data Market module. Those with a green icon are the ones to which you have already been granted access, and you can request that the access be modified or removed.

Once the modification request is created, it will have to go through the approval workflow in the same way as a new grant request.

## Source systems integration

If there is a requirement to integrate this process with the source systems, a custom integration will need to be developed according to the installation requirements and architecture.


# Data Profiling

Truedat allows you to run profiling analysis on data sources that have this option enabled.

To run profiling analysis, first you need to set up a data source with this option enabled. Usually, this type of analysis is allowed in data sources where we can run SQL, since the profiling processing is delegated to the source database engine.

The option to run profiling depends on the [role and permissions](/administration/userroles#data-dictionary-data-catalog) you have for the given data structure.

## Executing Profiling Analysis

Once you have structures whose source allows profiling, and you have permission to run it, you just need to navigate to the structure for which you want to execute the profiling analysis:

![Find the execute profile option in the upper-right corner](/files/-MaDM9Ns_Yg4t6X-AWSC)

You will have to select which fields you want to analyze. This will be executed in your data source, so for efficiency, analyze only the information you need.

![You will need to manually refresh your screen](/files/-MaDMs8Xv9ZKWu6RWP0n)

![Refresh until results are available](/files/-MaDNd9VVwgEhxN3e3Qc)

## Profiling Analysis

Once you have run profiling, this information will be available to all users with permission to view it. This information will be displayed through the Data Catalog at the data structure level.

![Profiling view within table](/files/-MaDo7lurbTMlR4BfO2K)

![Field value distribution](/files/-MaDoEqHFONEoAIDNrVP)


# Data Quality

The data quality module lets you define and implement quality rules. It integrates with the glossary of concepts at the definition level and with the data catalog at the implementation level.

## **Quality rules list** <a href="#id-1.4dataquality-checkqualityrules" id="id-1.4dataquality-checkqualityrules"></a>

When you access the quality module, you will see a list of quality rules. By default, this list shows the concept the quality rule is linked to, if any, and the data domain it belongs to. The columns in this view can be customized in each installation and can display any field from the quality rule template. See the [Template management](/administration/templates) section for more information on templates.

You can filter the search by active or inactive rules, the domain the rule belongs to, the rule type used, and any template field defined as a fixed-value list.

## **Quality rules** <a href="#id-1.4dataquality-qualityrules" id="id-1.4dataquality-qualityrules"></a>

Quality rules define data quality from a business point of view. Here, you should explain why the rule is needed, how data quality affects the business, how the rule should be implemented, and any other information that is relevant from a business or functional perspective.

![](/files/UhjQMVyAKGxNanzoc59q)

A quality rule consists of standard fields common to all installations and fields that can be customized in each installation using the [template management](/administration/templates) feature.

#### Standard Fields <a href="#id-1.4dataquality-mandatoryfields" id="id-1.4dataquality-mandatoryfields"></a>

* **Name**: Name that identifies the validation and that will be displayed when this rule appears in a list. The goal of this field is to help you quickly identify the validation.
* **Description**: Detailed description of how this validation should be performed and what result is expected. A rich text field is available for this description.
* **Domain**: Domain in which the rule will be stored. This is important to define who has permission to modify the rule, create implementations, and execute implementations.
* **Concept**: Optionally, you can select a concept to which the rule applies.
* **Active**: If the rule is active, the quality implementations associated with it will be executed.

#### Customized fields <a href="#id-1.4dataquality-configurablefields" id="id-1.4dataquality-configurablefields"></a>

In each installation, the required fields can be configured through [template management](/administration/templates).

![](/files/HBxT0S9GY3qkkuKbFTFf)

#### Create new quality rule

Quality rules can be defined in three different ways:

* From a **business concept**. In this case, they provide a functional definition of the validations to be performed on the given business concept to ensure its validity. To define these rules, access a business concept and create the rule in the **Quality Rules** tab. The concept and domain will be assigned to the rule automatically.

![](/files/Z6maZThdeyeLat4PDEsN)

* From the **Data Quality module**. In this case, you need to enter the rule's domain and can optionally select a concept to link to the rule. In the main Data Quality Rules screen, click **New Quality Rule** to open the form and enter the rule information.

![](/files/cH01MmKuBtVZ1sC5KKK9)

* **Bulk upload** from a CSV file. You can also load the information from a CSV file. In the main Data Quality Rules screen, click the button on the right-hand side <img src="/files/4KeENbAxWoLyz8X9TNNu" alt="" data-size="line">. The file format depends on the template defined for your quality rules in your installation.

![](/files/Lx2Dd1AJDUVNMRHaSTp4)

## **Quality implementations** <a href="#id-1.4dataquality-qualityimplementations" id="id-1.4dataquality-qualityimplementations"></a>

Quality rules define validations at a functional level, and implementations define how those validations are applied to your data. The same rule can have several implementations because you may want to apply it to different data in your systems. Defining quality rules is not mandatory, so you can create quality implementations that are not linked to quality rules.

The creation of implementations can go through an approval process. Using the permissions linked to this functionality, certain roles can be given permission to create implementations in draft status and send them for approval, while a different role can be given permission to review implementations and approve or reject them.

<figure><img src="/files/ssTUdNsSqtPO44ORHWy7" alt=""><figcaption></figcaption></figure>

If you do not want to use this workflow, simply give the permissions to manage and review implementations to the quality roles defined in your installation.

You can access implementations in several ways:

* List all implementations through the sidebar menu, with data download, execution, search, and filter capabilities.
* View implementations related to a quality rule in a tab inside the quality rule.
* View implementations linked directly to a business concept in a tab inside the business concept.
* View implementations for a data asset in the data catalog.

Also, if your implementations go through an approval workflow, you can view the ones that are not yet published in the **Drafts** menu option under **Data Quality**.

![](/files/-MSSh8UnopaShUUJ-3pc)

### Quality Implementations setup <a href="#id-1.4dataquality-guidedformimplementations" id="id-1.4dataquality-guidedformimplementations"></a>

You can create a new implementation either linked to a quality rule or as a standalone implementation.

Depending on user permissions, two types of implementations can be registered: simple implementations created through a multi-step form, and raw or native implementations, which are usually more complex and are set up by entering SQL code. Depending on whether the implementation is linked to a rule, you will use either the **Quality Rules** menu option or the **Implementations** menu option.

**Option 1: Implementation linked to a rule**

Create the implementation from the quality rule in the **Implementations** tab.

There are 3 types of implementations you can create:

1\) Form implementation: Clicking **New Implementation** on the right-hand side of the screen opens a multi-step form that guides you through the creation process.

2\) Raw or native implementation: If you want to set up a more complex implementation, click **New Raw Implementation**.

3\) Basic implementation: Click **Create basic implementation** to register implementations with only the basic information (`id`, result type, threshold, and goal), without entering additional information related to the dataset or validation.

<figure><img src="/files/FiZWMMNSHLyiHQrmbx6c" alt=""><figcaption></figcaption></figure>

**Option 2: Standalone Implementation**

There are two ways to create implementations when they are not linked to a quality rule:

1\) From the list of implementations in the Data Quality module.

2\) From a concept in the Business Glossary module, if you want the implementation to be linked to a business concept.

There are 3 types of implementations you can create:

1\) Form implementation: Clicking **New Implementation** on the right-hand side of the screen opens a multi-step form that guides you through the creation process.

2\) Raw or native implementation: If you want to set up a more complex implementation, click **New Raw Implementation**.

3\) Basic implementation: You can also register implementations with only the basic information (`id`, result type, threshold, and goal), without entering additional information about the dataset or validation. To create this type of implementation, click the three-dot menu button and select **Create basic implementation**.

<figure><img src="/files/z8D5poX9PQHLUQmwlxA6" alt=""><figcaption><p>Option 1: From the Data Quality module</p></figcaption></figure>

<figure><img src="/files/PEhR3tla95f0evSLFSVx" alt=""><figcaption><p>Option 2: From the Business Glossary module</p></figcaption></figure>

### New implementation using multi-step form

Create the implementation by completing the following four sections:

#### Information

Enter the information associated with the quality implementation. You can provide:

* **Executable:** By default, all implementations can be executed by Truedat connectors. If you do not want a specific implementation to be executed by Truedat's quality engine, clear this option. This is useful if you have integrated an external quality engine and do not want Truedat to execute something that is already handled by a third party.
* **Implementation key**: Defines a unique identifier. You cannot use an existing identifier. If you do not enter a value, an identifier will be generated automatically.
* **Result type:** Defines whether this quality rule measures compliance based on a quality percentage, deviation, or an absolute number of errors.
  * Quality percentage: The measure is the percentage of records that match the quality criteria. Values range from 0% to 100%, where 100% represents the highest data quality.
  * Deviation: Used to compare two counts or amounts that should be similar. It gives the percentage difference between the data being checked and the reference data. Values range from 0% to 100%, where 0% represents the highest data quality.
  * Errors number: Used to check the absolute number of errors in your data, regardless of data volume. This is useful for large volumes of records with a small margin of error. Values are positive integers, where 0 errors represents the best possible quality.
* **Threshold value:** Minimum value resulting from the execution of the rule. Below this value, a quality error is considered to have occurred.
* **Goal value:** Target value for the rule. Between the threshold value and the goal value, a quality alarm is considered to occur.
* **Dynamic information:** Fill in the information defined by your [Quality Implementation template](/administration/templates), if one has been defined.

![](/files/NrGbbCvAn1Ikco10W4MU)

#### **Data set**

This is the data set on which quality will be measured. To define it, you must select one or more structures from the data catalog. You can also use a [reference data table](/administration/data-catalog-management#reference-data-management) if you have set one up in Truedat.

You can join information from several tables and even join a table to itself. To do this, select the join type (`inner join`, `left outer join`, `right outer join`, or `full outer join`) and the fields from both structures that must be used to make the join.

<figure><img src="/files/8NxOY4s0YzOtFBa5R5qU" alt=""><figcaption></figcaption></figure>

#### **Population**

The validation can be applied to the whole data set defined in the previous step, or to only a subset of that data set. To do this, apply filters to define the population to which the validation applies. You can define more than one population in the same dataset.

![](/files/57F9vJlmBb9i538e2ilY)

#### **Validation**

Using the available operators, define the conditions to apply to the validation. You must define at least one validation. You can include both AND and OR conditions. Clicking <img src="/files/kbige0rcHkTaLu5OCpGN" alt="" data-size="line"> creates an AND condition, and clicking <img src="/files/xcF5RtPgaIW7RACl56Yk" alt="" data-size="line"> creates an OR condition.

The result returned when this implementation is executed is determined by the number of records that meet the validations defined here.

<figure><img src="/files/D6BkHAVXyELNpGOi1NSQ" alt=""><figcaption><p>Validations screen</p></figcaption></figure>

#### **Operators** <a href="#id-1.4dataquality-operators" id="id-1.4dataquality-operators"></a>

Both the population step and the validation step use operators defined in the application. The product includes some default operators, but the operators used in each installation can be customized. It is important to note that any change to the operators implies changes in the quality engine if it is integrated into your installation.

An operator is always applied to a field in the selected data set and may, depending on the operator, require additional parameters.

Operators have the following characteristics:

* **Data types:** The data type is displayed when selecting a field in both the population step and the validation step. Depending on the selected type, different operators are available. Examples:<br>
  * Number: For a numeric data type, you will have operators such as greater than, less than, or equal to.
  * Text: For a text field, you will have operators that compare the length of the text.
  * Date: For a date field, you will have an operator that lets you check whether it is the last day of the month.
* **Scope**: Some operators are available in both the population step and the validation step, while others only make sense in one of them. For example, the operator that checks the format of data is available in validation, but not in the population filter.
* **Groupings:** To make operator selection easier, some operators are shown in groups.
* **Parameters:** Depending on the operator, a series of parameters may be required. These may be values entered by the user or other fields from the selected data set. Examples:<br>
  * No parameters: The **Is empty** operator does not need parameters.
  * One parameter: The **Is greater than** operator requires the user to enter the minimum value to check.
  * Two parameters: The **Between** operator requires the user to enter the minimum and maximum values to check.
  * Value from a list: The **Has a format of** operator shows a drop-down list with the available formats to check, such as date, number, or DNI.
  * Another field from the selected data set: The **Equals field** operator requires the user to select a field from the data set. A drop-down list is displayed so you can search for and select the field.
  * Another field in the data catalog: The **Referenced in** operator lets you select any field in the data catalog to perform a referential integrity test.

#### Segmentation

In this step, you can define drill-down criteria so quality results are presented not only as a total, but also by the defined segmentation. This step is optional and is available only to users with the **Manage Implementation Segments** permission.

![](/files/hwGOUpi4X87GxvtwymDe)

Once these steps are completed, the implementation is created. If you have permission to publish implementations, you can save the implementation in **Draft** status or directly in **Published** status.

For this implementation to be executed automatically, your installation must be integrated with a quality engine for the system where you want to run it.

### Native implementations <a href="#id-1.4dataquality-nativeimplementations" id="id-1.4dataquality-nativeimplementations"></a>

Native implementations can also be registered. The person creating the implementation must know the system where it will be executed in order to use the correct syntax for the target system. In this type of implementation, the following values must be filled in:

* **Implementation Key**: Defines a unique identifier. You cannot use an existing identifier. Identifiers do not allow spaces or restricted characters. If you do not enter a value, an identifier will be generated automatically.
* **Dynamic Information**: As defined by your implementation template, if one exists.
* **Data Source**: The source on which the validation will be executed.
* **Database**: In case the data source requires a database to be selected.
* **Dataset:** Defines the data set on which you want to perform the validation. In an SQL statement, this field would include the `FROM` section of the query, where joins and aliases for tables can be entered.
* **Population:** Defines the filter applied to the data from the previous point. This is used to define a subset of the data on which you want to perform the validation. In an SQL system, this field must contain valid syntax for the `WHERE` clause of a query.
* **Validation**: Enter the validation you want to perform on the data selected in the data field and filtered in the population field. In an SQL system, this field must contain valid syntax for the `WHERE` clause of a query.

![](/files/-MaSf_JqLB_xc3bxY3rd)

### Bulk upload of implementations <a href="#id-1.4dataquality-nativeimplementations" id="id-1.4dataquality-nativeimplementations"></a>

You can bulk upload implementations from an Excel file, but only for the **Information** fields. The file format depends on the template defined in your installation. To upload this information, go to the Implementations screen and, in the three-dot menu, select **Upload implementations**.

![](/files/Zfpsf2L0IvoVcOsl8LGp)

<figure><img src="/files/JIbNQfFp1Tf8QSUJ8CaI" alt=""><figcaption></figcaption></figure>

If you have permission to publish implementations, you can choose to upload them in draft status or directly in published status.

File format:

* `implementation_key` (optional): Only required to update existing implementations. Leave it blank to create new ones.
* `domain_external_id`: External ID of the implementation.
* `result_type`: This can be `percentage`, `errors_number`, or `deviation`.
* `minimum`: Threshold value.
* `goal`: Goal value.
* `template`: Name of the template.
* Template fields: Use the field name, not the label.

The implementations loaded this way are basic implementations with only the basic information. You can edit them later to complete the information related to **Data Set**, **Population** (optional), **Validation**, and **Segmentation** (optional). You can add this information by completing the multi-step form or the raw implementation form, using the relevant option: **Edit as form implementation** or **Edit as a raw implementation**.

### Linking implementations to business concepts <a href="#id-1.4dataquality-modifyingimplementations" id="id-1.4dataquality-modifyingimplementations"></a>

Quality implementations can be linked to business concepts in the **Link to concepts** tab. You can define different [types of relationships](/administration/relations) in the Admin module.

![](/files/r5yV2oMLyrSvQABZsJ9r)

### Linking implementations to structures

Quality implementations are automatically linked to the data structures used in the dataset and validations, and they are displayed in the **Structures** tab. You can delete or add links if the ones proposed automatically by the tool are not correct or relevant. This can happen with raw implementations, where the tool extracts the information from the SQL code and may not be accurate.

<figure><img src="/files/fODGPhb0PVJH9buDKRm8" alt=""><figcaption></figcaption></figure>

### Modifying implementations <a href="#id-1.4dataquality-modifyingimplementations" id="id-1.4dataquality-modifyingimplementations"></a>

If you edit a published implementation, a new version of the implementation will be created. This new version may go through the approval workflow, if required.

Basic implementations can be edited to include information about the dataset, population, and validation. To do this, you can edit them as a form implementation, which takes you through the multi-step form, or edit them as a native implementation. From the implementation details page, click the three-dot menu button and select the corresponding option.

<figure><img src="/files/JynzwUMALDTkSgeORnKs" alt=""><figcaption></figcaption></figure>

You can also upload a file to update implementations, but only the general information such as result type, goal, threshold, and any field from the custom template. Information related to the dataset, population, validation, or segmentation cannot be updated this way.

### Create duplicates of existing quality implementations <a href="#id-1.4dataquality-cloningofdeployments" id="id-1.4dataquality-cloningofdeployments"></a>

You can clone existing quality implementations in a simple way:

* The new quality implementation inherits all parameters from the previous implementation except the implementation key, because a new key must be defined for the cloned implementation.
* The new implementation is linked to the same rule as the implementation it was cloned from.
* The concepts linked to the implementation are also copied to the cloned implementation.

![](/files/-MaSfnPF4rP7hsyo0xnk)

### Implementations deactivation and deletion

You can deactivate your quality implementations. This prevents them from being executed through the scheduled process while keeping the information available for dashboards. To do this, edit the implementation and turn off the **Executable** slider.

![](/files/jHa6UmVeVZZcBHFbinpa)

If you no longer need an implementation, it can be deleted if you have the **Review Implementations** permission. Click the button on the right-hand side and select **Delete implementation**. The implementation will then be marked as **Deprecated**.

![](/files/dOVIbhQL3GBfxbdJUkIA)

All deprecated implementations can be accessed from the **DATA QUALITY** menu under the **Deprecated** submenu. From this list, you can view deprecated implementations, restore them to **Published** status, or permanently delete them.

<figure><img src="/files/LOj0H5gAXl2P5avewz9H" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/xjJUb9Pc4aQpYKVgxddF" alt=""><figcaption></figcaption></figure>

## **Execution of quality implementations** <a href="#id-1.4dataquality-executionofqualityrules" id="id-1.4dataquality-executionofqualityrules"></a>

Users with the required permissions can request the execution of quality implementations. To run these implementations, the data source must be correctly set up with data access.

There are two ways to execute implementations:

1\) From the implementations screen, use the slider next to **Execute Implementations** to enable execution requests. Once it is activated, select the implementations to run and click the execute button.

![](/files/4WWSRctCEVdYtO8f4wnx)

2\) From an implementation's details screen, if you want to execute only a specific implementation.

![](/files/YcUJ6K1IgKtUh0k7lmdR)

Once the execution has been requested, you are redirected to a screen where you can monitor the execution progress. Refresh the screen to see the current status.

![](/files/-MSSg3FlaV0xskYpxZYv)

You can view a list of the last 50 executions you requested by going to **My Executions** under **DATA QUALITY**.

<figure><img src="/files/kFvx581lHX0ap3CD9Zfk" alt=""><figcaption></figcaption></figure>

You can view a list of all executions for an implementation by opening the implementation and going to the **Executions** tab. You can filter the list to show failed and pending executions.

<figure><img src="/files/X4X5Qjv87ejlzn3Srkqo" alt=""><figcaption></figcaption></figure>

## **Quality implementation execution results** <a href="#id-1.4dataquality-qualityrunresults" id="id-1.4dataquality-qualityrunresults"></a>

The data quality module can receive and store quality execution results and display them on screen. When results are received, the result of each implementation linked to the rule is displayed.

In addition, clicking an implementation lets you see the history of all its executions.

![](/files/URbaboCzNSmTOlfH6CVb)

Click the execution date to see the details of that execution. The **Details** tab also shows information about the latest execution.

![](/files/8atxDhbHB6EcoKmQX75O)

If the implementation was defined with drill-down criteria, you can view results for each segment by clicking the icon <img src="/files/gLMxwwOORPW8FisOsaFa" alt="" data-size="line"> next to the result.

![](/files/KwTLxXBnQEFh8uvgUsX1)

![](/files/6INqcvK5GDdtRMYWNsIx)

Admin users can delete quality rule results. This should not happen often, but the option can help you remove erroneous uploads:

![](/files/-MKAunGw6zu_5bqx3d3q)

### **Quality execution errors**

If the latest execution for an implementation has finished with an error, this is displayed in both the implementations list and the implementation results tab so the user can identify the problem and fix it.

![List of implementations](/files/LGMbBilMLTWhHCxB1Tfg)

![Results screen of an implementation](/files/dYcbypfCYoHyf0VpzZRO)

## **Remediation plans** <a href="#id-1.4dataquality-qualityrunresults" id="id-1.4dataquality-qualityrunresults"></a>

Additional information, such as remediation plan details, can be recorded and linked to the result of an implementation execution. This additional information is managed by a type of template that must be defined beforehand by an admin user.

![](/files/5j7VbfyXzFZOxG7Ykxxe)

Only roles with the [permission](/administration/userroles) **Manage Remediation Plans** can create, edit, or delete remediation plans.

![](/files/NGO2Ga67n2887dHoA5mt)

### **Create remediation plan**

In the detail view of an implementation execution result, you can create a remediation plan linked to that result. Click **Create remediation plan** and fill in the information defined in the template.

![](/files/YhaFVllNeTvtS0YDPx4S)

### **View remediation plan**

In the **Results** tab of an implementation, the icon ![](/files/8Oo5is7ybJmKqQ1yldtj) is shown for results that have a remediation plan.

![](/files/CG9l5fJIyPokq9lXzaWC)

Clicking the icon ![](/files/8Oo5is7ybJmKqQ1yldtj) takes you to the execution details and the remediation plan.

![](/files/KQyyVOl6s5dpnyDpWT5O)

### **Edit or delete remediation plan**

Remediation plans can be edited and deleted by clicking the relevant button in the **Remediation Plan** section. Only users with the appropriate permission can do this.

![](/files/r6RkSOVP9vPdrqaohx6Z)

## **Notifications** <a href="#id-1.4dataquality-notifications" id="id-1.4dataquality-notifications"></a>

Users can subscribe to quality rules and quality implementations by clicking the subscription icon <img src="/files/AVK4QXqx38tkXEaAjS0N" alt="" data-size="line"> and choosing which events to watch: result below threshold, result between threshold and goal, result above goal, or failed execution. If the selected event occurs for the chosen quality rule or implementation, the user receives a notification in the bell at the top right and is also notified by email.

![](/files/2ChFKfK09TlbCVL9T4Az)

**Notifications periodicity:**

* **Immediately**: The user receives the notification when the result is received in Truedat.
* **Hourly**: Every hour, the user receives an email with all results received in Truedat that match the configuration.
* **Daily**: The user receives a digest email with all results that match the selected criteria.

**Notify results**: The user selects which result types are sent.

* **Goal**: Results that are above the goal.
* **< Goal:** Results that are between the threshold and the goal.
* **< Threshold:** Results that are below the threshold.
* **Failed:** Cases where execution fails and no result is produced.


# Data Lineage

This module allows you to visualize the information life cycle, as well as the interconnections between each system in the organization. This provides complete data traceability, as well as impact analysis in the event of changes to data structures or processes.

When entering the lineage module, you can select the resources you want to analyze, as well as the type of analysis you want to perform:

* **Traceability:** Shows the origin of the data. Where does the data come from?
* **Impact**: Shows how the data is used. Who are the consumers of the data, and to what extent are they impacted?
* **Levels:** Defines the number of levels displayed on the screen for navigation. This is especially useful for complex graphs, where viewing the entire graph makes understanding difficult.

![](/files/-MKAunFwSCvMcMA1J9G6)

Once you choose the analysis, a graph is displayed showing the consumers of the data and the flow they follow.

![](/files/-MKAunFxgC_Qg3QpDfgW)

If you choose a traceability analysis, the arrows point in the opposite direction. This is because the arrows always show the direction in which the data moves.

If an object name is cut off because it is too long, hover over the name to view it in full.

![](/files/-MKAunFylWGirwLkRCTI)

Once you request the graph, you can download the lineage information as a CSV file to open in MS Excel. This CSV includes all groups displayed in the lineage graph and the relationships between them. The relationships between resources in the graph, represented by arrows, are also included as lines in the file.

![](/files/-MKAunFz97ZQ5pGN0Gml)

Additionally, clicking the different objects represented in the graph shows different options:

* Traceability: Navigates to the traceability analysis of the selected object.
* Impact: Navigates to the impact analysis of the selected object.
* Exclude: Removes the selected node and any links it may have from the graph, then recalculates the display based on the current selection.
* View Data Catalog: This option only appears for elements available in the data catalog. Selecting it navigates to the catalog to view the details of the selected item.

If the lineage connector provides information about the process, you can view it by clicking the arrow that connects the objects.

### Data Lineage background process

Some lineage graphs might be very complex and require a long time to calculate. When installing Truedat, you can decide the maximum time allowed for a lineage calculation.

When requesting such a graph, you will see on the screen that the lineage is being calculated.

![](/files/123cf8S4iVSmH1FsxtAo)

You do not need to stay on this screen to wait for the result. You can leave the process running and return later to check the status from the **My Graphs** option in the lineage menu.

![](/files/ih734JKDYgSU122gIWgd)

{% hint style="success" %}
Once a graph has been calculated, the next time someone requests the graph with the same parameters, cached information is used to display it at a very low cost.
{% endhint %}


# Dashboards

The application integrates reporting software, Metabase, which can be configured to extract product metrics and display them to users. Each installation has a custom dashboard configuration that allows different metrics to be displayed:

* Number of concepts along the following axes
* The domains to which they belong
* Whether they have a link to a structure in the Data Catalog
* Whether they have defined quality rules
* Concept status
* Concept completeness. This indicates the percentage of optional fields completed along the following axes:<br>
  * The domains to which they belong
  * The field to analyze
  * The field group to which the field belongs
  * Concept status
* Data quality information along the following axes:
  * The domains to which the rule's concept belongs
  * Quality principles
  * Execution date
  * Dynamic fields generated in quality rules

Additionally, dashboard access can be controlled with permissions. This lets users view only data from their domains or filter by the domains they are allowed to access.

**Example of Glossary Dashboard:**

![](/files/-MKAunCe3noRB5MwWTuX)

**Example of Quality Dashboard:**

![](/files/-MKAunCfooNM-Wrb9Sta)


# Taxonomy

Data domains

Aa a user you will be able to see those domains and subdomains of your organization you have permissions to view. For each domain/subdomain you will find the following information:

#### Roles

On the Roles tab you will see all the users that have a role assigned in that domain.

#### Concepts

On the Concepts tab you can see all the concepts assigned to that domain and you can navigate from this screen to the Business Glossary and see all the details of a concept.

#### Structures

On the Structures tab you can see all the data structures that belong to that domain and you can navigate to the details of the structure in the Data Catalog.

#### Data Quality

On the Data Quality tab you can see all the quality implementations defined in that domain and you can navigate to the details of the implementation in the Data Quality module.


# Notifications

Truedat includes a notification engine that lets users watch events and receive notifications.

Users can subscribe to events in two ways:

* Self-subscription to documents with this feature enabled
* Bulk subscriptions enabled by an administrator for a given role

Notifications appear in the top menu bar.

![](/files/-MlB1vWKahTwr6U4X-nq)

{% hint style="info" %}
Email notifications are sent to users. To enable them, Truedat must integrate with your SMTP server.
{% endhint %}

## Self subscription

### Business Concepts

You can subscribe to any business concept you can access. This generates notifications for any changes to a concept, including status changes.

![](/files/-M__D4nCArDn8y4QrBv0)

### Quality Rules & Implementations

You can subscribe to a quality rule or implementation. You receive notifications when a quality result is generated. In the notification settings, select the notification frequency: immediately, hourly, or daily. Select the result types: goal reached, over the threshold but below the goal, below threshold, empty dataset, or failed execution.

<figure><img src="/files/rJiUbSpgYO6aO90pZWFC" alt=""><figcaption></figcaption></figure>

## Subscription by Role

Refer to the [Subscriptions](/administration/notifications) page in the administration section for details.


# Administration

All administration tools are described in this section


# Users

This section of the Truedat administration module lets you create and manage users and groups. Users can be created directly in this administration screen or through integration with an authentication service, such as Active Directory. This section describes how to manage users directly in the application. It does not cover authentication system integrations.

![](/files/-MSXwhaaPeJjySWViN-e)

## **Users**

We can perform the following actions on the user screen:

### **User registration**

To register a user, the following information must be entered:

* **User:** the username entered when logging in to the application.
* **Email:** used to send notifications in some features.
* **Full name:** used on screens that display user information.
* **Type:**
  * **Administrator:** has all privileges and can perform every action in the application.
  * **User:** a standard user whose permissions are managed through user roles.
  * **Service:** for users that need API access.
* **Groups:** groups to which the user belongs. If you enter a group that does not exist, it is registered automatically.
* **Password:** required to log in to the application.
* **Password Confirmation**

![](/files/-MSXws4dLk4uL-x7QNnB)

### **Edit user**

The following data of an existing user may be modified:

* User name
* Email
* Full name
* User type
* Groups to which it belongs

### **Details of a user**

Click a username to view the user's details. If the user has an assigned role, you can see its domains. Roles may be assigned directly or through group membership.

![](/files/-MSXxwdXsFCFOGOODbco)

### **Delete User**

Once a user is deleted from the application, they will not be able to log in again. User role assignments in domains will be deleted.

### Change Password

Administrators can set a new password for any user.

![](/files/-MSXyHo8hSynkePQSl8_)

### **Search**

A search engine is available to locate a specific user.

## **Groups**

This section lets you create, edit, and delete user groups.

![](/files/-MKFpH4qe1g89KPQJfo9)

### **New group or edit group**

You can create a new group or edit an existing one. Both actions use the same fields:

* Name
* Description
* Alias: if you add an alias, it is displayed instead of the name. For example, it appears in forms and filters. This is useful when groups are created automatically through an authentication system and need a clearer name.
* Users: select the users who belong to the group.

<figure><img src="/files/L8Y7nqCdpsie3g2O6kXH" alt=""><figcaption></figcaption></figure>

### **Delete group**

Deleting a group also removes:

* Membership in the group for affected users.
* Role and permission assignments to the group in any domain.


# User roles

Truedat does not include any preconfigured roles. User roles are configured for each installation. You can create as many roles as needed and customize each with the relevant permissions. Permissions defined in a role apply only to users assigned that role in a domain and its descendant subdomains.

<figure><img src="/files/lkKkA3RdO18Ze6gHhr0g" alt=""><figcaption></figcaption></figure>

To create a new role, click the button and enter its name:

<figure><img src="/files/wxktMtOD1ZbW0EHurFSK" alt=""><figcaption></figcaption></figure>

Select a role to edit its assigned permissions. Click its name to rename it:

<figure><img src="/files/jjghcdLxwcdZTOsZPZ50" alt=""><figcaption></figcaption></figure>

Permissions in the application are divided into the following modules:

## **Business Glossary Management**

Assigning any of these permissions gives users access to **Business Glossary → Drafts**, where they manage the glossary.

* **Create business concepts**: allows users to create concepts and bulk-upload them using a CSV file.
* **Delete business concepts**: allows users to delete business concepts in Draft status.
* **Deprecate business concepts**: allows users to delete business concepts that have already been published.
* **Manage business concept links**: allows users to establish relationships between concepts. It also allows them to link concepts to Data Catalog structures.
* **Manage business concept domain**: allows users to modify a concept's assigned domain.
* **Manage confidential business concepts**: allows users to mark business terms as confidential and view them. This permission is required alongside relevant concept permissions. For example, viewing confidential concepts in a domain requires both **View concepts** and **Manage confidential business concepts**.
* **Publish business concepts**: allows users to publish concepts in Reviewing status.
* **Reject business concepts**: allows users to reject concepts in Reviewing status.
* **Request business concept approval**: allows users to submit concepts in Draft status for review and approval.
* **Share business concept with domain**: allows users to share a concept with another domain. This can be useful in multi-entity organizations.
* **Update business concepts**: allows users to edit concept details in Draft and Published status.
* **View business concepts pending approval**: allows users to view concepts submitted for approval.
* **View draft business concepts**: allows users to view concepts in Draft status.
* **View rejected business concepts**: allows users to view rejected concepts.

## **Business Glossary Visualization**

Allows users to view the glossary:

* **View published business concepts**: allows users to view published concepts.
* **View versioned business concepts**: allows users to view earlier versions of published concepts.

## **Dashboards**

* **View dashboard**: allows users to view the data governance dashboard.

## **Data Catalog**

Permissions for viewing and managing data structures in the Data Catalog:

* **Link structures**: allows users to link a structure to concepts and implementations. It also requires **Manage business concept links** or **Link implementations to structures**.
* **Link tags to structures**: allows users to link tags to Data Catalog structures. An administrator must create tags first.
* **Link structure to structure**: allows users to link structures from different systems and delete those links. This permission is required in both structures' domains.
* **Manage confidential structures**: allows users to view confidential structures and, depending on their other permissions, manage them.
* **Manage structure domain**: allows users to update structure domains individually or through bulk upload.
* **Execute structure profiling**: allows users to run ad hoc data profiling on a Data Catalog structure.
* **View structures**: allows users to view Data Catalog structures.
* **View structure profiling**: allows users to view a structure's data profile, when available.
* **View protected metadata**: allows users to view metadata loaded into the Data Catalog as protected.
* **View note**: allows users to view the latest version of a note with functional metadata.
* **View notes history**: allows users to view earlier versions of a structure's notes.

## **Data Catalog structure notes**

Permissions for viewing and managing data-structure notes in the Data Catalog:

* **Create note**: allows users to create notes with functional metadata.
* **Delete note**: allows users to delete notes in Draft status.
* **Deprecate note**: allows users to delete published notes.
* **Edit note**: allows users to edit notes in Draft status. For published notes, it allows users to create a new version.
* **Publish note**: allows users to publish notes in Pending approval status.
* **Publish note from draft**: allows users to publish notes directly from Draft status without using the approval workflow.
* **Reject note**: allows users to reject notes sent for review.
* **Send note to approval**: to submit a draft note for review and approval.
* **Un-reject note**: allows users to return a rejected note to Draft status for editing and correction.

## **Data Quality**

* **Manage rules**: allows users to create, modify, and delete quality rules.
* **View quality**: allows users to view quality rules, published quality implementations, and the quality dashboard.

## **Quality Implementations Workflow**

* **Manage basic implementations**: allows users to create, modify, and delete basic quality implementations in Draft, Pending approval, or Rejected status. This permission is also required to upload implementations using a CSV file.
* **Manage form implementations**: allows users to create implementations using the multi-step form and modify or delete them in Draft, Pending approval, or Rejected status.
* **Manage native implementations**: allows users to create, modify, and delete native quality implementations in Draft, Pending approval, or Rejected status.
* **Manage implementations without rule**: is required alongside the permissions above to work with implementations not linked to a quality rule.
* **Review implementations**: allows users to review submitted implementations and publish or reject them. It also allows users to deprecate published implementations, restore archived implementations to Published status, or delete them permanently.

## **Quality Implementations Additional Actions**

* **Execute quality implementations**: allows users to run quality implementations on demand.
* **Link implementations to concepts**: allows users to link a quality implementation to a concept.
* **Link implementations to structures**: allows users to link a quality implementation to a data structure.
* **Manage remediation plans**: allows users to create and edit remediation plans linked to an implementation execution.
* **Manage quality execution results**: allows users to upload quality results using a CSV file.
* **Manage implementation segments**: when creating a form implementation, allows users to set segmentation criteria for drilling down results.

## Grants

* **Create grant request**: allows users to request access to data structures and modify existing grants.
* **Allow grant requests from third parties**: allows other users to request access on your behalf.
* **Create grant requests for third parties**: allows users to request access on behalf of another user.
* **Request grant removal**: allows users to request removal of data access. Requests from users with this permission do not require approval. Other users can request removal of their access, but a user with **Approve grant request** must approve it.
* **Request grant removal for third parties**: allows users to request removal of another user's grant. Requests do not require approval when the user also has **Request grant removal**.
* **View grants**: allows users to view granted access.

## Grants Management

* **Approve grant request**: allows users to approve or reject access requests and requests to modify or remove granted access.
* **Manage grants**: allows users to create, modify, and revoke grants.

## Lineage

* **View lineage**: allows users to view lineage in the Lineage module and from Data Catalog structures.

## **Taxonomy Structure**

Permissions for managing the taxonomy and data domains:

* Create domains
* Delete domains
* Modify domains
* View domains

## **Taxonomy Membership**

Permissions for managing user role assignments in a domain:

* Assign a role to a user or group in a domain
* Delete a user or group's role from a domain
* Update a user or group's role in a domain

## AI Agents

Permissions for using AI-supported functionality:

* Concept content suggestions: allows to request concept's content suggestions and translations.
* Note content suggestions: : allows to request note's content suggestions
* Link suggestions: allows users to request links between concepts and structures from either item.

\
**Default role**
----------------

A role can be designated as the platform's default role. Only one role can be the default. Its permissions apply when users query domains where they have no assigned role. When users have an assigned role in a domain, its permissions are added to those of the default role.

![](/files/-MKFpH5BZ6WuJAR_GpKy)

If no default role exists and a user has no role in any domain, they see a message when entering the application. The message instructs them to contact an administrator for the necessary permissions. Each installation can customize this message with the appropriate contact details.

![](/files/-MKFpH50I0PtI3LY568f)

## **Navigation menu**

Menu options depend on a user's permissions across modules. A menu option is visible when the user has at least one permission in that module for any domain. Otherwise, the option remains hidden. Users cannot perform actions or view information without the required permissions.


# Taxonomy and role assignment

This section lets you create a taxonomy that defines the domains used to classify information in the application. The taxonomy also lets you manage user permissions, which are assigned at the domain level.

## Taxonomy <a href="#id-2.3taxonomyandroleassignment-2.3.1taxonomy" id="id-2.3taxonomyandroleassignment-2.3.1taxonomy"></a>

Only users with administrator permissions can create root data domains. From the root level, users can assign taxonomy management roles to others. This lets them create multiple domains and assign a manager to each domain.

On the initial screen, you can search for a domain or navigate to the domain you want to manage.

On the main screen, you can search for an existing domain. You can also create a domain as a child of the domain you are viewing. From the main screen, the creation button creates a new root domain.

![](/files/EWIVaZXAM3lAohfq3LwX)

Depending on your permissions, you can register a new child domain, or subdomain, while viewing a domain. Provide the following information:

* Name: The domain name must be unique within the application. Unique names support a common language across the organization.
* External ID: Provide an external identifier. Use it to identify a domain when multiple domains share the same name. Connectors must send this identifier to identify a domain.
* Group: Assign the domain to a group to manage a multi-organization installation. Concept names must be unique within a group. Groups are inherited, so child domains use the same group unless specified otherwise.
* Type: This optional field distinguishes domain types when browsing the taxonomy. For example: Entity, Department, or Functional scope. If left empty, the displayed type is "Domain".
* Description: Add a short description that explains the data domain's purpose.

<figure><img src="/files/oVBsm0LDE25fnj4DxXgo" alt=""><figcaption></figcaption></figure>

You can edit an existing domain by modifying the same registration fields. If you have permission, you can also modify the parent domain. This lets you move a domain, including its subdomains and concepts, within the taxonomy.

You can also delete a domain, subject to the following restrictions. You cannot delete a domain if:

* An active concept is registered in the domain.
* The domain has child domains.
* ![](/files/-MKFpH4ZSi9mY3Pk2UmX)

## Role assignment

Each domain has a **Roles** tab where you can view and manage user roles.

The **Roles** tab lists users with roles in the selected domain. If you have permission, you can add, delete, or modify user roles in that domain.

## ![](/files/-MKFpH4b_9pgjaSAWjZq) <a href="#id-2.3taxonomyandroleassignment" id="id-2.3taxonomyandroleassignment"></a>

If you have the required permissions, you can assign one or more roles to a user in a domain. This grants the role permissions for that domain and all its descendants. Provide the following information:

* Member: The user to whom the role applies. The user must already exist in the application. If a directory service is integrated, the user must log in once before appearing in the selectable users list.
* Role: Select the role to apply to the user in this domain.
* Description: Optionally, add a description to clarify the user's role. This is for informational purposes only.

After a user role is registered, the user must log in again for changes to apply. If the user is currently logged in, changes apply after they log out and log back in.

## Concepts

The **Concepts** tab lists all concepts assigned to the domain. You can navigate to each concept's details in the Business Glossary.

## Structures

The **Structures** tab lists all data structures that belong to the domain. You can navigate to each structure's details in the Data Catalog.

## Data Quality

The **Data Quality** tab lists all implementations assigned to the domain. You can navigate to each implementation's details in the Data Quality module.


# Data Catalog management

## Systems

As an admin user, you must create the systems in Truedat where metadata from your sources will be loaded.

The only mandatory information for a new system is a name and an `external_id`. You can include additional information by first creating a template named "System" with the "Data Catalog" scope. The example below defines two additional fields: Description and Logo.

![](/files/oAZQ7OO8bb187tLLvVg7)

Systems can be grouped in the Data Catalog main view. To assign systems to groups, include the following field in the Systems template:

* Name: system\_group
* Widget: Text input
* Type: String
* Cardinality: One or none

Once you have the template, go to **Data Catalog** → **Structures**. In the right-hand menu, click **New System**.

Enter the Name and External ID for the new system. You can also enter the system type to display systems by type. Add any information defined in the template, such as Description or Logo.

![](/files/FklBojOwqF92uA5B8Slb)

![](/files/aNmADx8LelVfugV5HAjp)

## Data Structures Types

As part of Truedat customization, an admin user can configure the following parameters for a structure type:

* Template for additional information. Additional information is metadata that users with permission can enter manually in the application.
* Metadata to display in custom metadata tabs. Select metadata extracted from source systems to display in an additional metadata tab.
* Icon representing the structure type. See [Customise text](/administration/language-management) section.

![Menu Data Catalog > Structure Types](/files/-MhE36mH2LoptPorbWB-)

To associate a structure type with a template, provide the following information:

* **Type:** Select the structure type to associate. A list of all structure types in the data catalog is displayed.
* **Default translation:** Define text to display instead of the internal structure type value.
* **Template:** Select the template with the "dd" scope to associate with the structure type. A list of existing templates in that scope is displayed.\
  \
  You can assign the same template to one or more structure types. Templates are optional. If a structure type has no template, its **Additional information** tab is hidden.<br>
* **Metadata views:** Configure metadata views to display in separate tabs. For each tab, select its name and metadata. If metadata is marked as sensitive during loading, select `_protected` from **Available metadata fields**. All protected metadata is then displayed only to users with permission to view it.

<figure><img src="/files/wUHSAhXR6rCjPnJ23rEP" alt=""><figcaption></figcaption></figure>

Once registered, you can view the summary and delete existing configurations. Deleting and recreating an association does not delete metadata linked to a structure. Updating an association displays fields from the new template. Saving then stores the new data.

You can select metadata fields for structure searches in the **Filters** field. An admin user must reindex before these fields appear in the structure search screen filter list.

## Data Structures Tags

Use this screen to define the tag types allowed for data structures. You can limit tags to specific domains. This is useful in multi-organization environments. You can create and remove existing tags.

![Structure's tag management screen](/files/-MaTCtSE7ClY9umvkNaD)

If you delete a tag that is currently used, you are told how many structures use it. You must then confirm the deletion. Removing a tag also removes all its assignments to structures.

![](/files/-MaTDpOxt6b4ieRSULcU)

## Structure's functional name

Structures can be assigned a functional name in addition to the technical name that is imported from the source.

Create a field named `alias` in the Data Catalog templates. The name must be lowercase. Create a note for a structure and enter the alias. When the note is published, the alias appears in the Data Catalog. The technical name remains visible underneath. Structures without an alias show only the technical name.

![](/files/Lg4Eo3uAnV26OGAmQeXc)

## Catalog Views

The default data catalog view groups structures by the system where they were loaded. You can create custom views that group structures by technical or functional metadata, such as processing type or storage type.

To create a view, go to **Catalog Views** and select metadata to group structures. For metadata from Notes, enter the field name, not its label. Technical metadata must be defined as filterable. See [Data Structures Types](#data-structures-types).

A new menu option appears in the Data Catalog module. Create a translation message for the menu option: `sidemenu.metadata.[name of the metadata view]`. Create another message for the catalog view title: `metadata.[name of the metadata view]`.

<figure><img src="/files/JjdTzxcy0VfZKCN7OLHt" alt=""><figcaption><p>Create a new catalog view based on technical metadata: "region"</p></figcaption></figure>

<figure><img src="/files/kgMzYBbl3auhezqmJrFg" alt=""><figcaption><p>New catalog view: View by Region</p></figcaption></figure>

## Reference Data Management

This module lets you define reference datasets. These datasets typically contain code values, such as country lists and product codes.

As an admin, you can create reference datasets by uploading a UTF-8 CSV file. The file can be up to 2 MB and contain up to 10 columns. Use a semicolon as the field separator.

![](/files/cTfgkGnFjxXk70zRbkEs)

<figure><img src="/files/3HpQhJq8H3SR9i4SFs9B" alt=""><figcaption></figcaption></figure>

![](/files/rPJmpz6Mwz6ZBhHHWVyb)

You can assign these reference tables to data domains. Users need **View Structures** permission in that domain to view them. You can also use them when defining datasets in quality implementations.


# Source management

The initial sources catalog view displays a list of all sources. Each source includes:

* External ID (source)
* Type (system)
* Source status (active or disabled)
* Timestamp of the last execution
* Status of the last execution
* Message

![](/files/c5A4lXQZYW4qX5bvothb)

Click a source name to view its details.

![](/files/Qk7vQolOXcWyf7eCgqnu)

#### Source configuration

On the **Configuration** tab, you can view and edit source information. You can also disable or delete the source using the right-hand menu.

![](/files/g7FYUD4eBOHKHDT6S4nA)

To update one field, click the pencil icon that appears when hovering over it:

![](/files/aJAc91OZocGAA0j7yoFN)

#### Jobs information

On the **Jobs** tab, you can view jobs executed for this source. Information includes the execution time, job type, and status.

![](/files/atCXPlSbcEAZcraCnipt)

Click a job to view details of that execution:

![](/files/6OpRDYE11GKPmizoKM3j)

#### Execute new job

Request a new job on the **New job** tab. Available job types depend on the source and its connector. They include catalog, lineage, and profiling jobs.

![](/files/a3Dkv5KFpquPMRgZx466)

You can also access job information from **Administration** → **Jobs**.

## New source

As an admin user, create sources from which connectors extract metadata. To create a source, go to **Sources** in the **Admin** module. Then click **New Source**.

![](/files/kIhoCpsJIuEXrNIFWS0x)

Enter the following required system data:

* **External ID:** Identifier used by connectors to load metadata. It must be unique within the application.
* **Type:** System where metadata is loaded in Truedat. Create systems beforehand. See the Systems section in [Data Catalog management](/v8.8/administration/data-catalog-management). Depending on the system, you may need to enter additional information.

![](/files/h2BCJzIEMKEURDnHiuFQ)


# Template management

Truedat includes an administration module for managing dynamic forms used by different document types. It allows administrators to customize fields displayed in different features. We call each form definition a **template**.

Templates can be defined for:

* [Business Glossary](/userguide/glossary): Each template in the Business Glossary scope defines a new business concept type. You can customize the concept types and fields documented for each. Examples include metrics, attributes, business terms, and policies.
* [Data Catalog](/userguide/catalog): Although connectors discover most Data Catalog information automatically, you can define additional information for manual documentation. Use templates with the Data Catalog scope.
* Quality Rules: Typically, use one template to define custom fields for Quality Rules. This supports your Quality Model. It lets you define Quality Principles, criticality, weight, or other attributes.
* Quality Implementations: Typically, use one template to define custom fields for quality implementations.
* [Quality Executions](/): Define information used when manually requesting quality implementation executions. The quality engine may use this information, such as periodicity.
* [Grant request](/userguide/data-market): Define templates for requesting access to data.
* [Remediation plan](/userguide/quality): To add information such as a remediation plan to quality implementation results, define a template. It can include the plan name, implementation date, plan owner, and other relevant information.

## Template Management <a href="#id-2.4templatemanagement-templatemanagement" id="id-2.4templatemanagement-templatemanagement"></a>

Find this option in the administration panel. It includes a tab for each module that uses templates.

<figure><img src="/files/ghafdAuH8ryUQ7ZIG4A0" alt=""><figcaption></figcaption></figure>

To create a template, select **New template**. Complete the following form:

![](/files/xEbagzDLf4hsc4o1dDKh)

Common fields for all templates:

* **Name**: A unique application-wide code that identifies the template.
* **Label**: The template's display name. It appears when users select the template.
* **Scope**: The module where the template is used. Select one of the available options.
* **Subscope** (Business Glossary and Implementations only): Business concepts/Implementations using a template with a subscope appear in a separate menu after publication. The subscope becomes the menu name.<br>

Templates contain fields organized into groups. For long forms, define field groups to help users understand the document.

![](/files/-MSSOpuKfvCpElVhviXk)

The group name must be unique when saving the template. If there are groups with the same names, their fields will be merged into a single group.

Within each group, you can add fields and define their order.

Each field has the following options:

* **Label**: The text displayed for the field in the form.
* **Name**: A unique field code without spaces. You cannot modify this value after saving the template. Fields with the same name in other templates must have the same definition.
* **Description**: Optional. When set, a button appears in the form. Select it to view the description. <img src="/files/-MSSPn4aTKJdn4ZRKWEK" alt="" data-size="line">
* **Widget**: The component used to select the field value. See Widgets.
* **Type**: The field data type. Available types depend on the selected widget.
* **Cardinality**: Indicates whether the field accepts one or multiple values, and whether it is required:
  * **One or none**: An optional single value.
  * **One**: A required single value.
  * **None or more**: An optional list with multiple values.
  * **One or more**: A list with at least one value. Multiple values are allowed.
* **Editable**: When a field is non-editable, you cannot modify its value after completing the template.
* **Searchable**: All fields are searchable by default. Text searches look for matches in the field content. Disable this option to exclude the field from searches.
* **Values**: The values users can select. Options depend on the widget.
  * **Fixed list**: Add a list of possible field values.
  * **Key/Value list**: Define a saved code and displayed label for each value. You can change labels later without changing documents.
  * **Depending on another field**: Define a fixed list for each value of another template field. For example, the values available in a **Region** field can depend on the selected **Country**.\
    You can also define a default value based on the dependency field value.
  * **Dependent on domain:** Provide different possible values based on the domain selected for the concept, structure, quality rule, or quality implementation.
* **Default value:** For fixed-list or free-text values, enter a default value. The field is prepopulated when a document is created from the template.
* **Conditional visibility:** The field's visibility can depend on another field's value. This activates the field for specified values in a previous field.
* **Mandatory dependency:** The field can be required based on a previous field's value.
* **Subscribable**: When selected, this field can filter role-based subscriptions.

## Widgets <a href="#id-2.4templatemanagement-widgets" id="id-2.4templatemanagement-widgets"></a>

Widgets are components that you can select for a form. Each widget supports specific types, cardinalities, and values.

### Data entry widgets <a href="#id-2.4templatemanagement-widgetsforvaluesfreetext" id="id-2.4templatemanagement-widgetsforvaluesfreetext"></a>

| Widget / Example                                                    | Information                                                                                                                                                                                                                                                            |
| ------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![](/files/3XyADKG1ktEEChykj2Ru)                                    | <p><strong>Type</strong>: String<br><strong>Cardinality</strong>: None (autogenerated)<br>This field is automatically populated with an autogenerated id that cannot be modified.</p>                                                                                  |
| ![](/files/-MSSUbdnu3ox-6nZqhGg)![](/files/-MKFpH5LAHRFHoKKokds)    | For single values, a standard input appears. For multiple values, press Enter to add each value.                                                                                                                                                                       |
| ![](/files/-MKFpH5NnAM8NxDK4Wms)                                    | Text input in a box.                                                                                                                                                                                                                                                   |
| ![](/files/-MKFpH5M3OIDHNWvJWUT)![](/files/-MKFpH5KcnJtP2xkdtle)    | Add link-and-value pairs. When viewing, select the displayed text button to open the link.                                                                                                                                                                             |
| <img src="/files/WnURYPzDEnq1aXDmZo5D" alt="" data-size="original"> | Enter rich text. You can underline, bold, italicize, create numbered or bulleted lists, and add web links.                                                                                                                                                             |
| ![](/files/-MKFpH5VF8CbDx8giOND)                                    | <p><strong>Type</strong>: Table</p><p><strong>Cardinality</strong>: One or none</p><p>Define a table for template users to complete. Specify the table columns. Cells accept text input only.</p>                                                                      |
| <img src="/files/UIyD8kljO4eQRRPj4pBd" alt="" data-size="original"> | <p><strong>Type</strong>: Dynamic Table</p><p><strong>Cardinality</strong>: One or none</p><p>Define a table for template users to complete. Specify columns and their content type: text input, user drop-down, user or group drop-down, or text-input drop-down.</p> |
| ![](/files/-MKFpH5atqugevdx6BzX)                                    | <p><strong>Type</strong>: Text string</p><p><strong>Cardinality</strong>: One or none / One / None or more / One or more</p><p>Masks a text field so its value is not displayed when users enter data or view the template.</p>                                        |
| ![](/files/-MSSYnmiaq_84JC-Pbn3)                                    | <p><strong>Type</strong></p><ul><li>Integer</li><li>Decimal</li></ul><p><strong>Cardinality</strong>: One or none / One</p><p>Displays a field that accepts numeric data only.</p>                                                                                     |
| ![](/files/-MSSZX51qQ95MSnCkk2n)                                    | <p><strong>Type</strong>: Date</p><p><strong>Cardinality</strong>: One or none / One</p><p>Displays a calendar widget for selecting a date.</p>                                                                                                                        |
| ![](/files/-MSSZVL9YAgpBNbMtsyp)                                    | <p><strong>Type</strong>: Date Time</p><p><strong>Cardinality</strong>: One or none / One</p><p>Displays a calendar widget for selecting a date and time.</p>                                                                                                          |

### Fixed value widgets <a href="#id-2.4templatemanagement-fixedvaluewidgets" id="id-2.4templatemanagement-fixedvaluewidgets"></a>

For **users or groups of users in a role**, the Type must be **`User`** or **`User or Group`**. For **Fixed list**, **Code / description list**, or **Depending on another field**, the Type must be **`String`**:

|                                                                  |                                                                                                                                                                                                                                                                                                                                                                                                                                                                                     |
| ---------------------------------------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![](/files/-MKFpH5Ht1a0OaWUmE06)![](/files/ZCDCduK95Q5leETwa69E) | <p>Drop-down for selecting values.</p><p>You can choose:</p><ul><li>String</li><li>System</li><li>Domain</li><li>User</li><li>User or Group</li><li>Group</li><li>Hierarchy</li></ul><p>For <code>User</code>, <code>User or Group</code>, or <code>Group</code>, specify the role for the displayed user list.</p><p>For <code>Hierarchy</code>, select an available hierarchy and specify the minimum selectable level. The top level is <code>0</code> and allows any level.</p> |
| ![](/files/-MKFpH5GBDXtM3N3IST0)![](/files/-MKFpH5DmnzXmInFREd_) | <p>List for selecting one value.</p><p>You can choose:</p><ul><li>String</li><li>User</li><li>User or Group</li><li>Group</li></ul><p>For <code>User</code>, <code>User or Group</code>, or <code>Group</code>, specify the role for the displayed user list.</p>                                                                                                                                                                                                                   |
| ![](/files/-MKFpH5FYxn5LgY1_IfI)![](/files/-MKFpH5C91QJ1ck3OcZa) | <p>List for selecting multiple values.</p><p>You can choose:</p><ul><li>String</li><li>User</li><li>User or Group</li><li>Group</li></ul><p>For <code>User</code>, <code>User or Group</code>, or <code>Group</code>, specify the role for the displayed user list.</p>                                                                                                                                                                                                             |

### Special widgets <a href="#id-2.4templatemanagement-widgetsforothercases" id="id-2.4templatemanagement-widgetsforothercases"></a>

| Widget / Example                 | Description                                                                                                                                           |
| -------------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------- |
| ![](/files/-MKFpH5cMQqN-cz-dFhd) | <p><strong>Type</strong>: Image</p><p><strong>Cardinality</strong>: One or none / One</p><p>Allows you to attach an image up to 2 MB to the form.</p> |


# Hierarchies

As an administrator, you can create hierarchies for defining templates. In the **Administration** module, select **Hierarchies** to view all defined hierarchies and their details.

<figure><img src="/files/yZMEEHhOhnSvWYvhvMyL" alt=""><figcaption></figcaption></figure>

Legend:

<img src="/files/2TzTSMAGWupykIebrzlr" alt="" data-size="line">: Node with nodes underneath. Clicking on this icon will expand the sublevels.

<img src="/files/zA9KWKSXw3DbepZoQGTq" alt="" data-size="line">: Node with nodes underneath that are already visible. Clicking on this icon will collapse the sublevels.

<img src="/files/6Cd6Qfgo4iDWGdk8aXcn" alt="" data-size="line">: Node at the lowest level.

#### Create new hierarchy

You can create a new hierarchy in the web application or by uploading a CSV file. The file must use this structure: "id,name,parentId,description". Consider the following:

* The `id` and `parent_id` values must always be numeric.
* If `parent_id` is empty, the node is considered a first-level node.

#### Edit existing hierarchy

You can edit an existing hierarchy in the web application or by uploading a CSV file.


# Bulk Updates

## **Bulk update of concepts**&#x20;

From the main screen of the Business Glossary, admin users will have the option to perform a bulk update of concepts. In order to carry out this update, the following considerations must be taken into account:

1. You can only bulk update concepts of the same type, i.e. those that use the same template.
2. You will always have to choose the domain to which the concepts will be assigned to. If you want them to remain in the same domain, you must filter for that domain and select that domain in the update form. Therefore, concepts from different domains cannot be updated at the same time unless you want to also update their domain to a new one. If this is not the case, they must be updated in batches, each batch with the same domain.
3. The rest of the fields are optional and only those where a new value is entered will be updated on the concept. These fields will be the ones from the template.
4. Both published and drafts concepts can be updated in bulk, just go to the relevant screen (Concepts or Drafts).
5. A new version of the concept is not created.

![](/files/-MKFpH63FfGV3mrH-udU)

After filling in the fields to be updated, clicking the "Save" button will trigger a confirmation message that informs about the number of concepts that are going to be updated.

![](/files/-MKFpH64UlWlkk8BT_Ji)

## **Bulk update of structure's notes**

From the main screen of the data catalog, as an **administrator user** you will have the option of performing a massive update of the additional information associated with the structures. In order to carry out this massive update, the following must be taken into account:

* Additional information (notes) can only be massively updated for structures that have this option active, that is, have an associated template.
* Only one type of structure can be updated in each action. On the main screen of Structures in Data Catalog, you have to filter by the Type of structure to be updated and then on the menu on the right-hand side click on 'Update'.

![](/files/cXFGwVVF81L5UCJQNc8d)

![](/files/zTIcJctIy3NTOJrFMevG)

* All fields are optional and only those for which a value is entered will be updated on the structure. All the fields of the template / type by which it has been filtered will appear.

![](/files/vVBrizeiN4wnIdD4dRx3)

* Once the fields to be updated are filled in and when we press the "Save" button we will be asked for confirmation to carry out the update, informing us of the number of structures to be updated. There are 2 options: update the notes and leave them in Draft status so they will have to be published later or update and leave the notes alreadyin Published status.

![](/files/W9Fe8f1u24V7YsTHDLRu)


# Jobs

In this module, admin users can monitor jobs that extract metadata, execute quality rules, or profile the different sources configured in the application. A list displays execution results for all sources, sorted from most recent to oldest.

![](/files/-MKFpH5vpA_hSzJq-Ef0)

Click a job to view extended details about its execution.

![](/files/-MSSiBkZxVFn6qYBPtAD)


# Relationship types

As an admin user, you can set up the different types of relationships that a business concept can have with other resources. Do this in the 'Relations' option of the 'Administration' module.

<figure><img src="/files/jgjwxCjpGHL7tdN4j7cW" alt=""><figcaption></figcaption></figure>

## New type of relationship <a href="#id-2.5typesofrelationships-newkindofrelationship" id="id-2.5typesofrelationships-newkindofrelationship"></a>

To register a new type of relationship, you must give it a name and indicate the resource you are establishing the relationship with, which can be another business concept, a data structure or a quality implementation.

* **Concept**: concepts can be linked to other concepts and you may want to define different types of relationships, e.g. parent of, calculated from, etc.
* **Structure:** concepts can be linked to one or more data structures. You can link concepts to structures without setting up a relationship type. These relationships display as "Link to field" when viewing the concept's information. To mark a special relationship type, define it in this Administration module. It displays as "Master link to structure."
* **Implementation:** concepts can be linked to quality implementations. You can link concepts to implementations without giving the relationship a specific name. These relationships display as "Link to implementation" when viewing the concept's information. To create different relationship types, define them in this Administration module.

![](/files/Fsj9K34JGwumEGfmHCDp)

## Deleting a relationship type <a href="#id-2.5typesofrelationships-deletingarelationshiptype" id="id-2.5typesofrelationships-deletingarelationshiptype"></a>

A relationship type can be deleted so it can no longer be used when linking resources. Deleting a relationship type does not delete existing relationships of that type. Existing relationships continue to exist without a type. For example, if a concept is linked to a structure with a master relationship type, deleting that type preserves the link but removes its master designation.


# Search filters

An administrator can create search filters in the Data Catalog, Data Quality, and Business Glossary modules. They can save these filters so they are available by default to all users when they access the modules. Only an administrator can delete these global search filters. Users can view and use global filters. They can also create and save their own personal search filters.

<figure><img src="/files/vYwXYI16QjCterZm03wm" alt=""><figcaption><p>Click on "Save for all users" to create a global filter</p></figcaption></figure>

<figure><img src="/files/gBvM7UlxdAoc0tHcoPTf" alt=""><figcaption><p>Global filters will be highlighted in a different colour (orange in the example above)</p></figcaption></figure>


# Language management

## Set up new languages

Truedat is available in English and Spanish by default. You can also set up other languages. To do so, go to **Administration** → **Translations/Languages** → **Manage**.

<figure><img src="/files/UPWh64QEasTVlcUKnMld" alt=""><figcaption></figcaption></figure>

When you add a language, all messages and texts are copied from the default language. Update them with translations for the new language.

Truedat displays text in the user's browser language. If that language is not configured, it uses the default language.

## Customise texts

As an administrator, you can customise most text in Truedat. This includes menu options, labels, messages, and icons. Go to **Administration** → **Translations** to view all customisable text in the available languages.

<figure><img src="/files/RYmnRDlWMiJtQISG4AlR" alt=""><figcaption></figcaption></figure>

### Modify an existing text

To modify existing text, find it using the search box. Select the **Definition** and edit it. You can add a description or note for the message. Changes apply immediately and appear on the website. For example, change “concept” to “term” by searching for “concept”. Then update the definitions in the results.

<figure><img src="/files/ofbFnHHMBKe0AdJiGHWI" alt=""><figcaption></figcaption></figure>

### Create a new text

To create text, select **Create Message**. Complete the form with the Message ID, text for each language, and an optional description or note.

<figure><img src="/files/2asK6hFak8NCHb5lXFXz" alt=""><figcaption></figcaption></figure>

### Customise menu texts

The menu texts can be customised as follows:

The Message ID follows this pattern: "sidemenu.*\[name of the menu option]*". Search for “sidemenu”, then update the **Definition** for the menu option.

<figure><img src="/files/ju3W8GBBJhpur3UI6D7G" alt=""><figcaption></figcaption></figure>

### Customise menu icons

The menu icons can be customised as follows:

The Message ID follows this pattern: "sidemenu.*\[name of the menu option].*&#x69;con".

* sidemenu.admin.icon
* sidemenu.ai.icon
* sidemenu.catalog.icon
* sidemenu.dashboards.icon
* sidemenu.glossary.icon
* sidemenu.grants.icon
* sidemenu.ingest.icon
* sidemenu.lineage.icon
* sidemenu.members.icon
* sidemenu.quality.icon
* sidemenu.qx.icon
* sidemenu.search.icon
* sidemenu.taxonomy.icon

The **Definition** contains the icon name. Choose an icon from [Semantic UI React](https://react.semantic-ui.com/elements/icon/).

<figure><img src="/files/yEIhpTyxlL5VQwatGSVr" alt=""><figcaption></figcaption></figure>

### Customise page header icons

The page header icons can be customised as follows:

The Message ID follows this pattern: "*\[name of the page].*&#x68;eade&#x72;*.*&#x69;con".

* Glossary pages:
  * concepts.header.icon
  * conceptsUpload.header.icon
  * domains.header.icon
* Data Catalog pages:
  * structureType.header.icon
  * structureTypes.header.icon
  * bulkUploadEvents.header.icon
  * grant.header.icon
  * structuresGrant.header.icon
  * referenceDatasets.header.icon
  * pendingStructureNotes.header.icon
  * tag.header.icon
  * tags.header.icon
  * lineage.events.header.icon
  * task.header.icon
* Data Quality pages:
  * implementations.header.icon
  * quality.header.icon
* Task automation pages:
  * ai.actions.header.icon
  * ai\_sandbox.header.icon
  * prompts.header.icon
  * providers.header.icon
  * resourceMappings.header.icon
* Members pages:
  * group.header.icon
  * role.header.icon
  * roles.header.icon
  * user.password.header.icon
  * users.header.icon
* Administration pages:
  * templates.header.icon
  * hierarchies.header.icon
  * relationTags.header.icon
  * i18n.header.icon
  * elastic\_index.header.icon
  * subscriptions.header.icon
  * configurations.header.icon
  * jobs.header.icon
  * sources.header.icon

### Customise filter fields

You can use template fields to filter searches. By default, each filter displays its template field name. To display more meaningful text, create a message with the appropriate text.

The Message ID follows this pattern: filters.*\[name of the field in the template]*

The **Definition** contains the displayed text.

Example: A template field is named `basic_list`. To display “Basic list” instead, create the appropriate message.

<figure><img src="/files/OAg31FiVBHEgj0wf9Iog" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/hrSxpODzcpWwcbgkOeOi" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/OX9gPGif0Ou5B1O11Li2" alt=""><figcaption></figcaption></figure>

### Customise values of filter fields

You can also customise values displayed in a filter. This applies when a template field uses a list of values.

The Message ID follows this pattern: filters.*\[name of the field in the template].\[value from the template]*

The **Definition** contains the displayed text.

Example: A template field named `basic_list` has the values 1, 2, 3, and 4. To display “First” instead of “1”, create the appropriate message.

<figure><img src="/files/J6e77njD2lKHCl1TARKp" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/wj620puYvqeo7o7UBZZM" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/oucwFtrCuEKXoLBnbDJ1" alt=""><figcaption></figcaption></figure>

### Create a structure type icon

You can customise icons associated with structure types using a message.

The Message ID for a structure type icon follows this pattern: "structure.type.*\[structure type]*.icon". To customise an icon by field type, such as string, numeric, or boolean, use: "structure.type.*\[field\_type]*.icon".

The **Definition** contains the icon name. Choose an icon from [Semantic UI React](https://react.semantic-ui.com/elements/icon/).

<figure><img src="/files/m9TNIjzml37jD0alhbzu" alt=""><figcaption></figcaption></figure>

<figure><img src="/files/DMmS3m5cki6vZ1YueyD5" alt=""><figcaption><p>Create a new Message ID and enter the icon name “folder” as its definition.</p></figcaption></figure>

<figure><img src="/files/kaQsON5ijNplirkY4F6C" alt=""><figcaption></figcaption></figure>

### Share button for concepts and structures

Use the following messages to customise Share icons:

* shareLink.concepts.icon
* shareLink.structures.icon

The **Definition** contains the icon name. Choose an icon from [Semantic UI React](https://react.semantic-ui.com/elements/icon/).

<figure><img src="/files/fOrcwdhyrk5BL0VhYF83" alt=""><figcaption></figcaption></figure>

### Translate template fields

Use the following messages to localise template labels, field group names, fields, and values:

* templates.{label}
* templates.groups.{group\_name}
* fields.{label}
* fields.{label}.{value}

{% hint style="info" %}
For **Dropdown** → **Key/value list** fields, use the value, not the key, in the translation message.
{% endhint %}

<figure><img src="/files/B9Rebn0VkQiRuVzt0okr" alt=""><figcaption></figcaption></figure>


# Subscriptions

Truedat can send email notifications to application users based on subscriptions to different events. Users can subscribe through different subscription types.

## Subscribers: <a href="#id-2.11notifications-subscribers" id="id-2.11notifications-subscribers"></a>

* **User/Email**: Subscribe a single user to events. This subscriber type lets you define which user receives notifications for each event.
* **Role**: Subscribe all users with a specific role in the selected domain. For example, users with the "Data Owner" role for a concept receive notifications when that concept changes.
* **Role in taxonomy:** Same as **Role**, but includes users with the role in the selected domain or any subdomain.

## Resources:

Subscriptions link to a selected application resource. Available resources depend on the event type:

* Structure
* Domain: resources assigned to this specific domain.
* Domain and children: resources assigned to this specific domain or any of its subdomains.
* Concept
* Quality Rule
* Quality Implementation
* Source

## Events:

The following events currently support subscriptions:

### Events without parameters:

* Concepts:
  * Concept deprecated
  * Concept published
  * Concept rejection canceled
  * Concept submitted (for approval)
  * Delete concept draft
  * New Concept draft
  * Update concept draft
  * Comment created
* Data Structures:
  * Tag added to structure
  * Tag modified
  * Tag deleted from structure
  * Structure Note deleted
  * Structure Note deprecated
  * Structure Note return to draft
  * Structure Note pending to approval
  * Structure Note published
  * Structure Note rejected
  * Structure Note updated
  * Structure Note versioned
* Grants:
  * New grant request pending approval
  * Grant request approval: new approval
  * Grant request approval: consensus
  * Grant request rejected (\*)
  * Grant request canceled
  * Grant request: process started (processing)
  * Grant request: process completed (processed)
  * Grant request: process failure
  * Access to a structure has been granted (\*\*)
  * Access to a structure has been revoked
* Relationships:
  * Relation created (between concept and other concepts or structures)
  * Relation deleted
  * Relation deprecated (automatically detects a removed relation element)
* Sources:
  * Jobs status changes
* Quality:
  * Rule created
  * Implementation created
  * Remediation plan created

(\*) When a grant request is rejected, the requesting user is automatically notified. No subscription is required.

(\*\*) Subscriptions to this event work differently from other events. Although the subscription is configured for a role, only the user granted access is notified. Other users with that role are not notified.

### Events with parameters

* Rule result created:
  * :red\_circle: < Threshold
  * :large\_orange\_diamond: > Threshold, \<Goal
  * :white\_check\_mark: > Goal
  * <img src="/files/oZIz0dwZL2DsjO3IL7mQ" alt="" data-size="line"> Empty data set
  * <img src="/files/S3cJ580nJv3DjfmnI9D6" alt="" data-size="line"> Failed execution
* Implementation status updated:
  * Draft
  * Pending approval
  * Rejected
  * Published
  * Versioned
  * Deleted

## Subscriptions administration

Use the administration option to create subscriptions that alert users about events affecting concepts where they have a specific role.

### New Subscription

1. Select the subscriber type. Depending on the type, select from a list of roles or users, or enter free text. For **Role** and **Role in taxonomy**, the domain is determined by the selected resource.
2. Select the [resource type](/administration/notifications#resources) for the notifications. Depending on the resource type, select the corresponding entity. **Domain** and **Domain and children** work differently:
   * **Domain**: Includes only entities directly linked to the selected domain.
   * **Domain and children**: Includes entities linked to the selected domain or any subdomain.
3. **Periodicity**: Choose immediate emails when an event occurs, or periodic notifications daily or hourly.
4. **Events**: Select the events for this subscription. Some events cannot be combined in one subscription. Compatibility depends on each event type's required parameters.

<figure><img src="/files/42mehlS6arAU87fk4tim" alt=""><figcaption></figcaption></figure>

### Examples of Role and Role in taxonomy

<figure><img src="/files/z8mprK5EIpTVfEjW5S8b" alt=""><figcaption></figcaption></figure>

For the **Published concept** event:

{% tabs %}
{% tab title="Role + Domain" %}
Subscriber: Role (Data Owner) | Resource: Domain (Domain 1)

Notifications:

* When 'Concept 1' is published, 'Data owner 1' is notified.
  {% endtab %}

{% tab title="Role + Domain and children" %}
Subscriber: Role (Data Owner) | Resource: Domain and children (Domain 1)

Notifications:

* When either 'Concept 1' or 'Concept 1.1' or 'Concept 1.2' are published, 'Data owner 1' is notified.
  {% endtab %}

{% tab title="Role in taxonomy + Domain and children" %}
Subscriber: Role in taxonomy (Data Owner) | Resource: Domain and children (Domain 1)

Notifications:

* When 'Concept 1' is published, 'Data owner 1' will be notified.
* When 'Concept 1.1' is published, both 'Data owner 1' and 'Data owner 1.1' are notified.
* When 'Concept 1.2' is published, both 'Data owner 1' and 'Data owner 1.2' are notified.
  {% endtab %}
  {% endtabs %}

### Subscription details

From the subscription view, an administrator can review the configuration and perform these actions:

* **Edit subscription:** You cannot modify the subscriber or resource. Changes create a new subscription.
* **Delete subscription**

![](/files/-MTL58gaCw1hKP9zM4Gb)


# Tasks

As an administrator, you can manually reindex Grants and Structures.

<figure><img src="/files/dksx08NKfRq4uJj2r5d0" alt=""><figcaption></figcaption></figure>


# API Integrations


# Data Catalog, Data Lineage and Grants APIs


# Data Catalog, Data Lineage and Grants APIs

**🔄 Changelog: To learn about the changes introduced in each version, please refer to** [**Truedat Docs**](https://docs.truedat.io)**.**


# Nodes

## Get node

> Retrieves a specific node by ID, optionally filtered by domain

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/nodes/{id}":{"get":{"description":"Retrieves a specific node by ID, optionally filtered by domain","operationId":"TdDdWeb.NodeController.show","parameters":[{"description":"Node ID","in":"path","name":"id","required":true,"schema":{"type":"string"}},{"description":"Domain ID","in":"query","name":"domain_id","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodeShowResponse"}}},"description":"Node retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get node","tags":["Nodes"]}}},"components":{"schemas":{"NodeShowResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of node groups and their resources for the specified node","items":{"$ref":"#/components/schemas/NodeIndexItem"},"type":"array"}},"required":["data"],"title":"NodeShowResponse","type":"object"},"NodeIndexItem":{"additionalProperties":false,"properties":{"groups":{"items":{"$ref":"#/components/schemas/NodeGroup"},"type":"array"},"parent":{"nullable":true,"type":"string"},"resources":{"items":{"$ref":"#/components/schemas/NodeResource"},"type":"array"}},"required":["parent"],"title":"NodeIndexItem","type":"object"},"NodeGroup":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["external_id","name"],"title":"NodeGroup","type":"object"},"NodeResource":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["external_id","name"],"title":"NodeResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List nodes

> Retrieves all nodes, optionally filtered by domain

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/nodes":{"get":{"description":"Retrieves all nodes, optionally filtered by domain","operationId":"TdDdWeb.NodeController.index","parameters":[{"description":"Domain ID","in":"query","name":"domain_id","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/NodesIndexResponse"}}},"description":"Nodes retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List nodes","tags":["Nodes"]}}},"components":{"schemas":{"NodesIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of node groups and their resources","items":{"$ref":"#/components/schemas/NodeIndexItem"},"type":"array"}},"required":["data"],"title":"NodesIndexResponse","type":"object"},"NodeIndexItem":{"additionalProperties":false,"properties":{"groups":{"items":{"$ref":"#/components/schemas/NodeGroup"},"type":"array"},"parent":{"nullable":true,"type":"string"},"resources":{"items":{"$ref":"#/components/schemas/NodeResource"},"type":"array"}},"required":["parent"],"title":"NodeIndexItem","type":"object"},"NodeGroup":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["external_id","name"],"title":"NodeGroup","type":"object"},"NodeResource":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"name":{"type":"string"},"type":{"type":"string"}},"required":["external_id","name"],"title":"NodeResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update nodes domains

> Updates the domains for all nodes

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/lineage/update_nodes_domains":{"get":{"description":"Updates the domains for all nodes","operationId":"TdDdWeb.NodeController.update_nodes_domains","parameters":[],"responses":{"204":{"description":"Nodes domains updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update nodes domains","tags":["Nodes"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Structure Types

## Get data structure type

> Retrieves details for the specified data structure type.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_types/{id}":{"get":{"description":"Retrieves details for the specified data structure type.","operationId":"TdDdWeb.DataStructureTypeController.show","parameters":[{"description":"Data structure type ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureTypeResponse"}}},"description":"Data structure type details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get data structure type","tags":["Data Structure Types"]}}},"components":{"schemas":{"DataStructureTypeResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructureType"}},"required":["data"],"title":"DataStructureTypeResponse","type":"object"},"DataStructureType":{"additionalProperties":false,"properties":{"filters":{"items":{"type":"string"},"nullable":true,"type":"array"},"id":{"type":"integer"},"metadata_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata_views":{"items":{"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"template":{"nullable":true,"properties":{"content":{"items":{"type":"object"},"nullable":true,"type":"array"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"template_id":{"nullable":true,"type":"integer"},"translation":{"nullable":true,"type":"string"}},"required":["id","name"],"title":"DataStructureType","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update data structure type

> Updates the specified data structure type with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_types/{id}":{"put":{"description":"Updates the specified data structure type with the provided payload.","operationId":"TdDdWeb.DataStructureTypeController.update","parameters":[{"description":"Data structure type ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureTypeUpdateRequest"}}},"description":"Data structure type payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureTypeResponse"}}},"description":"Data structure type updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update data structure type","tags":["Data Structure Types"]}}},"components":{"schemas":{"DataStructureTypeUpdateRequest":{"additionalProperties":false,"properties":{"data_structure_type":{"additionalProperties":false,"properties":{"filters":{"items":{"type":"string"},"type":"array"},"metadata_views":{"items":{"type":"object"},"type":"array"},"name":{"type":"string"},"template_id":{"type":"integer"},"translation":{"type":"string"}},"type":"object"}},"required":["data_structure_type"],"title":"DataStructureTypeUpdateRequest","type":"object"},"DataStructureTypeResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructureType"}},"required":["data"],"title":"DataStructureTypeResponse","type":"object"},"DataStructureType":{"additionalProperties":false,"properties":{"filters":{"items":{"type":"string"},"nullable":true,"type":"array"},"id":{"type":"integer"},"metadata_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata_views":{"items":{"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"template":{"nullable":true,"properties":{"content":{"items":{"type":"object"},"nullable":true,"type":"array"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"template_id":{"nullable":true,"type":"integer"},"translation":{"nullable":true,"type":"string"}},"required":["id","name"],"title":"DataStructureType","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update data structure type

> Updates the specified data structure type with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_types/{id}":{"patch":{"description":"Updates the specified data structure type with the provided payload.","operationId":"TdDdWeb.DataStructureTypeController.update (2)","parameters":[{"description":"Data structure type ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureTypeUpdateRequest"}}},"description":"Data structure type payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureTypeResponse"}}},"description":"Data structure type updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update data structure type","tags":["Data Structure Types"]}}},"components":{"schemas":{"DataStructureTypeUpdateRequest":{"additionalProperties":false,"properties":{"data_structure_type":{"additionalProperties":false,"properties":{"filters":{"items":{"type":"string"},"type":"array"},"metadata_views":{"items":{"type":"object"},"type":"array"},"name":{"type":"string"},"template_id":{"type":"integer"},"translation":{"type":"string"}},"type":"object"}},"required":["data_structure_type"],"title":"DataStructureTypeUpdateRequest","type":"object"},"DataStructureTypeResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructureType"}},"required":["data"],"title":"DataStructureTypeResponse","type":"object"},"DataStructureType":{"additionalProperties":false,"properties":{"filters":{"items":{"type":"string"},"nullable":true,"type":"array"},"id":{"type":"integer"},"metadata_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata_views":{"items":{"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"template":{"nullable":true,"properties":{"content":{"items":{"type":"object"},"nullable":true,"type":"array"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"template_id":{"nullable":true,"type":"integer"},"translation":{"nullable":true,"type":"string"}},"required":["id","name"],"title":"DataStructureType","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List data structure types

> Returns all available data structure types that the current user can read.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_types":{"get":{"description":"Returns all available data structure types that the current user can read.","operationId":"TdDdWeb.DataStructureTypeController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureTypeListResponse"}}},"description":"Data structure type list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List data structure types","tags":["Data Structure Types"]}}},"components":{"schemas":{"DataStructureTypeListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/DataStructureType"},"type":"array"}},"required":["data"],"title":"DataStructureTypeListResponse","type":"object"},"DataStructureType":{"additionalProperties":false,"properties":{"filters":{"items":{"type":"string"},"nullable":true,"type":"array"},"id":{"type":"integer"},"metadata_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata_views":{"items":{"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"template":{"nullable":true,"properties":{"content":{"items":{"type":"object"},"nullable":true,"type":"array"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"template_id":{"nullable":true,"type":"integer"},"translation":{"nullable":true,"type":"string"}},"required":["id","name"],"title":"DataStructureType","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Suggestions

## Search data structure suggestions

> Returns suggested data structures based on the provided query and search parameters, respecting caller permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/suggestions":{"post":{"description":"Returns suggested data structures based on the provided query and search parameters, respecting caller permissions.","operationId":"TdDdWeb.SuggestionController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSuggestionsRequest"}}},"description":"Suggestion filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSearchResponse"}}},"description":"Data structure suggestions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search data structure suggestions","tags":["Suggestions"]}}},"components":{"schemas":{"DataStructureSuggestionsRequest":{"additionalProperties":true,"properties":{"query":{"description":"Search query text","nullable":true,"type":"string"},"resource":{"additionalProperties":false,"description":"Resource to get suggestions for","properties":{"id":{"description":"Resource ID","type":"integer"},"links":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"type":{"description":"Resource type (e.g., 'concepts')","type":"string"},"version":{"description":"Resource version","nullable":true,"type":"integer"}},"required":["type","id"],"type":"object"},"size":{"default":10,"description":"Number of suggestions to return","minimum":1,"nullable":true,"type":"integer"}},"title":"DataStructureSuggestionsRequest","type":"object"},"DataStructureSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/DataStructure"},"type":"array"},"filters":{"additionalProperties":true,"type":"object"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"DataStructureSearchResponse","type":"object"},"DataStructure":{"additionalProperties":false,"properties":{"my_grant_request":{"nullable":true,"type":"object"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"inserted_at":{"format":"date-time","type":"string"},"note_last_changed_by":{"nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"type":{"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"my_grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"},"note_last_changed_at":{"format":"date-time","nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"string"},"class":{"nullable":true,"type":"string"},"versions":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"original_name":{"nullable":true,"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"note":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"description":{"nullable":true,"type":"string"},"name":{"type":"string"},"id":{"type":"integer"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"field_type":{"nullable":true,"type":"string"},"system_id":{"nullable":true,"type":"integer"},"classes":{"additionalProperties":true,"nullable":true,"type":"object"},"metadata_versions":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"system":{"$ref":"#/components/schemas/System"},"ancestry":{"items":{"type":"object"},"nullable":true,"type":"array"},"parents":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"linked_concepts":{"nullable":true,"type":"boolean"},"group":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"confidential":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"non_published_note":{"additionalProperties":true,"nullable":true,"type":"object"},"data_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"version":{"nullable":true,"type":"integer"},"relations":{"additionalProperties":true,"nullable":true,"type":"object"}},"required":["id","name","type","system"],"title":"DataStructure","type":"object"},"Domain":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"parents":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","external_id","name"],"title":"Domain","type":"object"},"DataStructureVersion":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"children":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"class":{"nullable":true,"type":"string"},"classes":{"additionalProperties":{"type":"string"},"nullable":true,"type":"object"},"data_fields":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data_structure":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"}},"type":"object"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"grant":{"$ref":"#/components/schemas/DataStructure"},"grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"group":{"nullable":true,"type":"string"},"implementation_count":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"nullable":true,"type":"string"},"note":{"$ref":"#/components/schemas/Note"},"parents":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"system":{"$ref":"#/components/schemas/System"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"version":{"type":"integer"}},"required":["version"],"title":"DataStructureVersion","type":"object"},"Note":{"additionalProperties":true,"description":"Dynamic content of the published note","title":"Note","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"UserPermissions":{"additionalProperties":true,"properties":{"confidential":{"type":"boolean"},"profile_permission":{"type":"boolean"},"request_grant":{"type":"boolean"},"update":{"type":"boolean"},"update_grant_removal":{"type":"boolean"},"view_lineage":{"type":"boolean"},"view_profiling_permission":{"type":"boolean"}},"title":"UserPermissions","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Grant Requests

## List grant requests

> Returns grant requests visible to the current user, optionally filtered by group, user, status, or action.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests":{"get":{"description":"Returns grant requests visible to the current user, optionally filtered by group, user, status, or action.","operationId":"TdDdWeb.GrantRequestController.index (2)","parameters":[{"description":"Grant request group ID (required only when accessing from group route)","in":"path","name":"grant_request_group_id","required":false,"schema":{"type":"integer"}},{"description":"Filter by current user (use 'me')","in":"query","name":"user","required":false,"schema":{"enum":["me"],"type":"string"}},{"description":"Filter by status","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Filter by action (e.g., 'approve')","in":"query","name":"action","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestListResponse"}}},"description":"List of grant requests"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List grant requests","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"meta":{"additionalProperties":true,"nullable":true,"type":"object"},"permissions":{"items":{"type":"string"},"nullable":true,"type":"array"}},"required":["data"],"title":"GrantRequestListResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Bulk approve grant requests

> Approves or rejects multiple grant requests in bulk according to the provided approval parameters and returns created approvals.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/bulk_approval":{"post":{"description":"Approves or rejects multiple grant requests in bulk according to the provided approval parameters and returns created approvals.","operationId":"TdDdWeb.GrantRequestBulkApprovalController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestBulkApprovalRequest"}}},"description":"Grant request bulk approval payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestBulkApprovalResponse"}}},"description":"Grant request approvals created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk approve grant requests","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestBulkApprovalRequest":{"additionalProperties":false,"properties":{"comment":{"description":"Optional comment","nullable":true,"type":"string"},"filters":{"additionalProperties":true,"description":"Search filters for grant requests","nullable":true,"type":"object"},"is_rejection":{"default":false,"description":"Whether this is a rejection","type":"boolean"},"must":{"additionalProperties":true,"description":"Must conditions for search","nullable":true,"type":"object"},"role":{"description":"Approval role","type":"string"}},"required":["role"],"title":"GrantRequestBulkApprovalRequest","type":"object"},"GrantRequestBulkApprovalResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":false,"properties":{"comment":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"is_rejection":{"type":"boolean"},"role":{"type":"string"}},"required":["id","role","is_rejection"],"type":"object"},"type":"array"}},"required":["data"],"title":"GrantRequestBulkApprovalResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Reindex all grant requests

> Triggers a full reindex of grant requests for search.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/search/reindex_all":{"get":{"description":"Triggers a full reindex of grant requests for search.","operationId":"TdDdWeb.GrantRequestSearchController.reindex_all","parameters":[],"responses":{"202":{"description":"Reindexing accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Reindex all grant requests","tags":["Grant Requests"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List grant request groups

> Returns grant request groups available to the current user, optionally filtered by a comma-separated list of IDs.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_request_groups":{"get":{"description":"Returns grant request groups available to the current user, optionally filtered by a comma-separated list of IDs.","operationId":"TdDdWeb.GrantRequestGroupController.index","parameters":[{"description":"Comma-separated list of group IDs to filter","in":"query","name":"ids","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestGroupListResponse"}}},"description":"List of grant request groups"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List grant request groups","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestGroupListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":["data"],"title":"GrantRequestGroupListResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List grant requests

> Returns grant requests visible to the current user, optionally filtered by group, user, status, or action.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_request_groups/{grant_request_group_id}/grant_requests":{"get":{"description":"Returns grant requests visible to the current user, optionally filtered by group, user, status, or action.","operationId":"TdDdWeb.GrantRequestController.index","parameters":[{"description":"Grant request group ID (required only when accessing from group route)","in":"path","name":"grant_request_group_id","required":false,"schema":{"type":"integer"}},{"description":"Filter by current user (use 'me')","in":"query","name":"user","required":false,"schema":{"enum":["me"],"type":"string"}},{"description":"Filter by status","in":"query","name":"status","required":false,"schema":{"type":"string"}},{"description":"Filter by action (e.g., 'approve')","in":"query","name":"action","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestListResponse"}}},"description":"List of grant requests"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List grant requests","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"meta":{"additionalProperties":true,"nullable":true,"type":"object"},"permissions":{"items":{"type":"string"},"nullable":true,"type":"array"}},"required":["data"],"title":"GrantRequestListResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Download grant requests as XLSX

> Generates an XLSX file containing grant requests matching the request filters.\
> \
> The payload mirrors \`POST /api/grant\_requests/search\` so that the active\
> view (Approve or Search) can be reused as-is. As in the search endpoint,\
> the Approve view filters (\`Search.apply\_approve\_filters/1\`) are applied\
> whenever the payload carries them, and the payload is used verbatim\
> otherwise. Results are always restricted to the domains and structures\
> the user can see, regardless of the payload.\
> \
> Every record matching the query is exported, so the pagination and\
> cursor properties of the search payload are ignored.<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/xlsx/download":{"post":{"description":"Generates an XLSX file containing grant requests matching the request filters.\n\nThe payload mirrors `POST /api/grant_requests/search` so that the active\nview (Approve or Search) can be reused as-is. As in the search endpoint,\nthe Approve view filters (`Search.apply_approve_filters/1`) are applied\nwhenever the payload carries them, and the payload is used verbatim\notherwise. Results are always restricted to the domains and structures\nthe user can see, regardless of the payload.\n\nEvery record matching the query is exported, so the pagination and\ncursor properties of the search payload are ignored.\n","operationId":"TdDdWeb.GrantRequestController.download","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestsDownloadRequest"}}},"description":"Grant request download request","required":false},"responses":{"200":{"content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"format":"binary","type":"string"}}},"description":"XLSX file downloaded"},"204":{"description":"No grant requests available for download"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download grant requests as XLSX","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestsDownloadRequest":{"additionalProperties":false,"description":"Request body for `POST /api/grant_requests/xlsx/download`.\n\nMirrors `GrantRequestSearchRequest` so that the payload sent by the\nManage grant requests view (Search or Approve) can be forwarded\nverbatim. Dynamic template fields are not listed here because the\nschema depends on the active templates at runtime; the headers for\neach dynamic column are returned in the same order produced by the\nserver, prefixed by the eight fixed columns.\n\nThe download always exports every record matching the query, so the\npagination and cursor properties of the search payload (`page`,\n`size`, `scroll`, `scroll_id`) are accepted but ignored.\n","properties":{"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"header_labels":{"additionalProperties":{"type":"string"},"description":"Localized header labels keyed by column name.","type":"object"},"lang":{"description":"Locale used to translate the status and request type columns and the template fields. Defaults to the default locale.","nullable":true,"type":"string"},"must":{"additionalProperties":true,"nullable":true,"type":"object"},"must_not":{"additionalProperties":true,"nullable":true,"type":"object"},"page":{"description":"Accepted and ignored.","nullable":true,"type":"integer"},"query":{"nullable":true,"type":"string"},"scroll":{"description":"Accepted and ignored.","nullable":true,"type":"string"},"scroll_id":{"description":"Accepted and ignored.","nullable":true,"type":"string"},"search_by":{"default":"all","description":"Accepted and ignored. The Approve view filters are applied whenever the payload carries them, as in the search endpoint.","enum":["approve","all"],"type":"string"},"size":{"description":"Accepted and ignored.","nullable":true,"type":"integer"},"sort":{"description":"Sort criteria. A unique tiebreaker is appended when missing, so that the export cursor cannot skip records.","items":{"oneOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"nullable":true,"type":"array"}},"required":["header_labels"],"title":"GrantRequestsDownloadRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get grant request by ID

> Retrieves the grant request with the specified ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/{id}":{"get":{"description":"Retrieves the grant request with the specified ID.","operationId":"TdDdWeb.GrantRequestController.show","parameters":[{"description":"Grant request ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestShowResponse"}}},"description":"Grant request retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get grant request by ID","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestShowResponse":{"additionalProperties":false,"properties":{"data":{"properties":{"_embedded":{"additionalProperties":true,"type":"object"},"all_pending_roles":{"items":{"type":"string"},"nullable":true,"type":"array"},"approvals":{"items":{"type":"object"},"nullable":true,"type":"array"},"data_structure_id":{"nullable":true,"type":"integer"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"dynamic_content":{"additionalProperties":true,"type":"object"},"filters":{"additionalProperties":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"format":"date_time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"pending_roles":{"items":{"type":"string"},"nullable":true,"type":"array"},"request_type":{"nullable":true,"type":"string"},"status":{"nullable":true,"type":"string"},"status_reason":{"nullable":true,"type":"string"},"type":{"type":"string"},"updated_at":{"format":"date_time","nullable":true,"type":"string"}},"required":["id"],"type":"object"}},"required":["data"],"title":"GrantRequestShowResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete grant request

> Deletes the grant request identified by the provided ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/{id}":{"delete":{"description":"Deletes the grant request identified by the provided ID.","operationId":"TdDdWeb.GrantRequestController.delete","parameters":[{"description":"Grant request ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Grant request deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete grant request","tags":["Grant Requests"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get available grant request filters

> Returns the set of available filters for grant requests according to caller permissions and provided parameters.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests_filters/search":{"post":{"description":"Returns the set of available filters for grant requests according to caller permissions and provided parameters.","operationId":"TdDdWeb.GrantRequestFilterController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestSearchRequest"}}},"description":"Grant request filter request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestFilterResponse"}}},"description":"Available filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get available grant request filters","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria","nullable":true,"properties":{"status":{"description":"Filter by status(es)","items":{"type":"string"},"type":"array"},"type":{"description":"Filter by type(s)","items":{"type":"string"},"type":"array"}},"type":"object"},"must":{"additionalProperties":true,"description":"Must conditions for query","nullable":true,"type":"object"},"page":{"default":0,"description":"Page number (0-indexed)","minimum":0,"nullable":true,"type":"integer"},"query":{"description":"Search query string","nullable":true,"type":"string"},"scroll":{"description":"Scroll ID for pagination (e.g., '1m' for 1 minute)","nullable":true,"type":"string"},"scroll_id":{"description":"Scroll ID to continue a previous search","nullable":true,"type":"string"},"size":{"default":20,"description":"Page size","maximum":100,"minimum":1,"nullable":true,"type":"integer"}},"title":"GrantRequestSearchRequest","type":"object"},"GrantRequestFilterResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"GrantRequestFilterResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create grant request status

> Creates or updates the status of a grant request for the given request ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/{grant_request_id}/status":{"post":{"description":"Creates or updates the status of a grant request for the given request ID.","operationId":"TdDdWeb.GrantRequestStatusController.create","parameters":[{"description":"Grant request ID","in":"path","name":"grant_request_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestStatusCreateRequest"}}},"description":"Grant request status payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestStatusCreateResponse"}}},"description":"Grant request status created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create grant request status","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestStatusCreateRequest":{"additionalProperties":false,"properties":{"reason":{"nullable":true,"type":"string"},"status":{"enum":["approved","rejected","cancelled","processing"],"type":"string"}},"required":["status"],"title":"GrantRequestStatusCreateRequest","type":"object"},"GrantRequestStatusCreateResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":true,"description":"Embedded resources","type":"object"},"all_pending_roles":{"description":"All pending roles","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"domain_ids":{"description":"Domain IDs","items":{"type":"integer"},"nullable":true,"type":"array"},"dynamic_content":{"additionalProperties":true,"description":"Dynamic content","type":"object"},"filters":{"additionalProperties":true,"description":"Applied filters","type":"object"},"id":{"description":"Grant request ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"description":"Request metadata","type":"object"},"pending_roles":{"description":"Pending roles for current user","items":{"type":"string"},"nullable":true,"type":"array"},"request_type":{"description":"Request type","nullable":true,"type":"string"},"status":{"description":"Current status","nullable":true,"type":"string"},"status_reason":{"description":"Reason for status change","nullable":true,"type":"string"},"type":{"description":"Type of grant request","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["id","inserted_at"],"type":"object"}},"required":["data"],"title":"GrantRequestStatusCreateResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search grant requests

> Searches grant requests using the provided criteria and returns paginated results with total count and optional filters.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/search":{"post":{"description":"Searches grant requests using the provided criteria and returns paginated results with total count and optional filters.","operationId":"TdDdWeb.GrantRequestSearchController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestSearchRequest"}}},"description":"Grant request search","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestSearchResponse"}}},"description":"Grant request search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search grant requests","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria","nullable":true,"properties":{"status":{"description":"Filter by status(es)","items":{"type":"string"},"type":"array"},"type":{"description":"Filter by type(s)","items":{"type":"string"},"type":"array"}},"type":"object"},"must":{"additionalProperties":true,"description":"Must conditions for query","nullable":true,"type":"object"},"page":{"default":0,"description":"Page number (0-indexed)","minimum":0,"nullable":true,"type":"integer"},"query":{"description":"Search query string","nullable":true,"type":"string"},"scroll":{"description":"Scroll ID for pagination (e.g., '1m' for 1 minute)","nullable":true,"type":"string"},"scroll_id":{"description":"Scroll ID to continue a previous search","nullable":true,"type":"string"},"size":{"default":20,"description":"Page size","maximum":100,"minimum":1,"nullable":true,"type":"integer"}},"title":"GrantRequestSearchRequest","type":"object"},"GrantRequestSearchResponse":{"additionalProperties":false,"properties":{"_permissions":{"description":"User permissions for the search results","items":{"type":"string"},"nullable":true,"type":"array"},"data":{"description":"List of grant requests matching the search","items":{"additionalProperties":false,"properties":{"created_by":{"additionalProperties":false,"nullable":true,"properties":{"email":{"type":"string"},"full_name":{"type":"string"},"user_name":{"type":"string"}},"required":["email","full_name","user_name"],"type":"object"},"created_by_id":{"nullable":true,"type":"integer"},"current_status":{"nullable":true,"type":"string"},"data_structure_id":{"nullable":true,"type":"integer"},"data_structure_version":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"description":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"external_id":{"type":"string"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"mutable_metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"name":{"type":"string"},"note":{"nullable":true,"type":"string"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"}},"required":["data_structure_id","external_id","name"],"type":"object"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"grant":{"additionalProperties":true,"nullable":true,"type":"object"},"group_id":{"type":"integer"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"modification_grant_id":{"nullable":true,"type":"integer"},"request_type":{"nullable":true,"type":"string"},"user":{"additionalProperties":false,"properties":{"email":{"type":"string"},"full_name":{"type":"string"},"user_name":{"type":"string"}},"required":["email","full_name","user_name"],"type":"object"},"user_id":{"type":"integer"}},"required":["id","group_id","user_id","current_status","inserted_at","user"],"type":"object"},"type":"array"},"filters":{"additionalProperties":true,"description":"Aggregation filters available (facets)","nullable":true,"type":"object"},"scroll_id":{"description":"Scroll ID for pagination","nullable":true,"type":"string"}},"required":["data"],"title":"GrantRequestSearchResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create grant request approval

> Creates an approval record for the specified grant request.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_requests/{grant_request_id}/approvals":{"post":{"description":"Creates an approval record for the specified grant request.","operationId":"TdDdWeb.GrantRequestApprovalController.create","parameters":[{"description":"Grant request ID","in":"path","name":"grant_request_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestApprovalCreateRequest"}}},"description":"Grant request approval payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestApprovalCreateResponse"}}},"description":"Grant request approval created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create grant request approval","tags":["Grant Requests"]}}},"components":{"schemas":{"GrantRequestApprovalCreateRequest":{"additionalProperties":false,"properties":{"approval":{"additionalProperties":false,"properties":{"comment":{"description":"Optional comment","nullable":true,"type":"string"},"role":{"description":"Approval role","type":"string"}},"required":["role"],"type":"object"}},"required":["approval"],"title":"GrantRequestApprovalCreateRequest","type":"object"},"GrantRequestApprovalCreateResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"properties":{"user":{"additionalProperties":true,"type":"object"}},"type":"object"},"comment":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"is_rejection":{"type":"boolean"},"role":{"type":"string"}},"required":["id","role","is_rejection","inserted_at"],"type":"object"}},"required":["data"],"title":"GrantRequestApprovalCreateResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Profiling

## Create profile result

> Creates or updates a profile result for the specified data structure.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/profile_results":{"post":{"description":"Creates or updates a profile result for the specified data structure.","operationId":"TdDdWeb.ProfileController.create","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileCreateRequest"}}},"description":"Profile create payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileCreateResponse"}}},"description":"Profile created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create profile result","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileCreateRequest":{"additionalProperties":false,"properties":{"profile":{"$ref":"#/components/schemas/ProfileValue"}},"required":["profile"],"title":"ProfileCreateRequest","type":"object"},"ProfileValue":{"additionalProperties":true,"properties":{"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"title":"ProfileValue","type":"object"},"ProfileCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ProfileResource"}},"required":["data"],"title":"ProfileCreateResponse","type":"object"},"ProfileResource":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"id":{"type":"integer"},"updated_at":{"nullable":true,"type":"string"},"value":{"$ref":"#/components/schemas/ProfileValue"}},"required":["id","data_structure_id","value"],"title":"ProfileResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityChangesetResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityChangesetResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Show profile execution group

> Retrieves a profile execution group by ID and returns only executions visible to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profile_execution_groups/{id}":{"get":{"description":"Retrieves a profile execution group by ID and returns only executions visible to the current user.","operationId":"TdDdWeb.ProfileExecutionGroupController.show","parameters":[{"description":"Profile execution group ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionGroupResponse"}}},"description":"Profile execution group details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show profile execution group","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileExecutionGroupResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ProfileExecutionGroupResource"}},"required":["data"],"title":"ProfileExecutionGroupResponse","type":"object"},"ProfileExecutionGroupResource":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"properties":{"executions":{"description":"List of profile executions in this group","items":{"$ref":"#/components/schemas/ProfileExecutionResource"},"type":"array"}},"type":"object"},"created_by_id":{"description":"User ID who created the group","nullable":true,"type":"integer"},"id":{"description":"Profile execution group ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","type":"string"}},"required":["id"],"title":"ProfileExecutionGroupResource","type":"object"},"ProfileExecutionResource":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/ProfileExecutionEmbedded"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"ProfileExecutionResource","type":"object"},"ProfileExecutionEmbedded":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/ProfileDataStructureEmbedded"},"latest":{"$ref":"#/components/schemas/ProfileLatestEmbedded"},"profile":{"$ref":"#/components/schemas/ProfileEmbedded"},"profile_events":{"items":{"$ref":"#/components/schemas/ProfileEventResource"},"type":"array"}},"title":"ProfileExecutionEmbedded","type":"object"},"ProfileDataStructureEmbedded":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"source_id":{"nullable":true,"type":"integer"}},"required":["id","external_id"],"title":"ProfileDataStructureEmbedded","type":"object"},"ProfileLatestEmbedded":{"additionalProperties":false,"properties":{"ancestry":{"items":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"name":{"type":"string"}},"required":["data_structure_id","name"],"type":"object"},"type":"array"},"name":{"type":"string"}},"required":["name"],"title":"ProfileLatestEmbedded","type":"object"},"ProfileEmbedded":{"additionalProperties":true,"properties":{"data_structure_id":{"nullable":true,"type":"integer"},"id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"nullable":true,"type":"string"}},"title":"ProfileEmbedded","type":"object"},"ProfileEventResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"message":{"nullable":true,"type":"string"},"profile_execution_id":{"type":"integer"},"type":{"nullable":true,"type":"string"}},"required":["id","profile_execution_id"],"title":"ProfileEventResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List profile executions

> Retrieves profile executions filtered by query parameters and scoped to the current user's permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profile_executions":{"get":{"description":"Retrieves profile executions filtered by query parameters and scoped to the current user's permissions.","operationId":"TdDdWeb.ProfileExecutionController.index","parameters":[{"description":"Filter by profile execution group ID","in":"query","name":"profile_group_id","required":false,"schema":{"type":"integer"}},{"description":"Alias for profile_group_id filter","in":"query","name":"execution_group_id","required":false,"schema":{"type":"integer"}},{"description":"Filter pending executions without profile or events","in":"query","name":"status","required":false,"schema":{"enum":["pending"],"type":"string"}},{"description":"Filter by data source external ID","in":"query","name":"source","required":false,"schema":{"type":"string"}},{"description":"Filter by multiple data source external IDs","in":"query","name":"sources","required":false,"schema":{"items":{"type":"string"},"type":"array"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionListResponse"}}},"description":"Profile executions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List profile executions","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileExecutionListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/ProfileExecutionResource"},"type":"array"}},"required":["data"],"title":"ProfileExecutionListResponse","type":"object"},"ProfileExecutionResource":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/ProfileExecutionEmbedded"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"ProfileExecutionResource","type":"object"},"ProfileExecutionEmbedded":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/ProfileDataStructureEmbedded"},"latest":{"$ref":"#/components/schemas/ProfileLatestEmbedded"},"profile":{"$ref":"#/components/schemas/ProfileEmbedded"},"profile_events":{"items":{"$ref":"#/components/schemas/ProfileEventResource"},"type":"array"}},"title":"ProfileExecutionEmbedded","type":"object"},"ProfileDataStructureEmbedded":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"source_id":{"nullable":true,"type":"integer"}},"required":["id","external_id"],"title":"ProfileDataStructureEmbedded","type":"object"},"ProfileLatestEmbedded":{"additionalProperties":false,"properties":{"ancestry":{"items":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"name":{"type":"string"}},"required":["data_structure_id","name"],"type":"object"},"type":"array"},"name":{"type":"string"}},"required":["name"],"title":"ProfileLatestEmbedded","type":"object"},"ProfileEmbedded":{"additionalProperties":true,"properties":{"data_structure_id":{"nullable":true,"type":"integer"},"id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"nullable":true,"type":"string"}},"title":"ProfileEmbedded","type":"object"},"ProfileEventResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"message":{"nullable":true,"type":"string"},"profile_execution_id":{"type":"integer"},"type":{"nullable":true,"type":"string"}},"required":["id","profile_execution_id"],"title":"ProfileEventResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Upload profiling data

> Uploads profiling data via multipart form and returns an accepted response.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profiles/upload":{"post":{"description":"Uploads profiling data via multipart form and returns an accepted response.","operationId":"TdDdWeb.ProfileController.upload","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ProfileUploadRequest"}}},"description":"Profiling upload","required":false},"responses":{"202":{"description":"Profile upload accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload profiling data","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileUploadRequest":{"additionalProperties":false,"properties":{"profiling":{"description":"CSV file with profiling data","format":"binary","type":"string"}},"required":["profiling"],"title":"ProfileUploadRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search profile executions

> Searches profile execution records using the given search parameters and returns matching executions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profile_executions/search":{"post":{"description":"Searches profile execution records using the given search parameters and returns matching executions.","operationId":"TdDdWeb.ProfileExecutionSearchController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionSearchRequest"}}},"description":"Search parameters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionSearchResponse"}}},"description":"Profile executions search results"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search profile executions","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileExecutionSearchRequest":{"additionalProperties":false,"properties":{"execution_group_id":{"description":"Alias for profile_group_id filter","nullable":true,"type":"integer"},"profile_group_id":{"description":"Filter by profile execution group ID","nullable":true,"type":"integer"},"source":{"description":"Filter by data source external ID","nullable":true,"type":"string"},"sources":{"description":"Filter by multiple data source external IDs","items":{"type":"string"},"nullable":true,"type":"array"},"status":{"description":"Filter executions without profile or events","enum":["pending"],"nullable":true,"type":"string"}},"title":"ProfileExecutionSearchRequest","type":"object"},"ProfileExecutionSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/ProfileExecutionResource"},"type":"array"}},"required":["data"],"title":"ProfileExecutionSearchResponse","type":"object"},"ProfileExecutionResource":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/ProfileExecutionEmbedded"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"ProfileExecutionResource","type":"object"},"ProfileExecutionEmbedded":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/ProfileDataStructureEmbedded"},"latest":{"$ref":"#/components/schemas/ProfileLatestEmbedded"},"profile":{"$ref":"#/components/schemas/ProfileEmbedded"},"profile_events":{"items":{"$ref":"#/components/schemas/ProfileEventResource"},"type":"array"}},"title":"ProfileExecutionEmbedded","type":"object"},"ProfileDataStructureEmbedded":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"source_id":{"nullable":true,"type":"integer"}},"required":["id","external_id"],"title":"ProfileDataStructureEmbedded","type":"object"},"ProfileLatestEmbedded":{"additionalProperties":false,"properties":{"ancestry":{"items":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"name":{"type":"string"}},"required":["data_structure_id","name"],"type":"object"},"type":"array"},"name":{"type":"string"}},"required":["name"],"title":"ProfileLatestEmbedded","type":"object"},"ProfileEmbedded":{"additionalProperties":true,"properties":{"data_structure_id":{"nullable":true,"type":"integer"},"id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"nullable":true,"type":"string"}},"title":"ProfileEmbedded","type":"object"},"ProfileEventResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"message":{"nullable":true,"type":"string"},"profile_execution_id":{"type":"integer"},"type":{"nullable":true,"type":"string"}},"required":["id","profile_execution_id"],"title":"ProfileEventResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search profiles

> Searches profiles matching the provided criteria and returns matching results.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profiles/search":{"post":{"description":"Searches profiles matching the provided criteria and returns matching results.","operationId":"TdDdWeb.ProfileController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSearchRequest"}}},"description":"Search profiles payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileSearchResponse"}}},"description":"Search results"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search profiles","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileSearchRequest":{"additionalProperties":false,"properties":{"limit":{"description":"Maximum number of profiles to return","type":"integer"},"offset":{"description":"Number of profiles to skip","type":"integer"},"since":{"description":"Return profiles updated at or after this timestamp (ISO 8601)","type":"string"}},"title":"ProfileSearchRequest","type":"object"},"ProfileSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/ProfileResource"},"type":"array"}},"required":["data"],"title":"ProfileSearchResponse","type":"object"},"ProfileResource":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"id":{"type":"integer"},"updated_at":{"nullable":true,"type":"string"},"value":{"$ref":"#/components/schemas/ProfileValue"}},"required":["id","data_structure_id","value"],"title":"ProfileResource","type":"object"},"ProfileValue":{"additionalProperties":true,"properties":{"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"title":"ProfileValue","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create profile event

> Creates a new profile event for the given profile execution.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profile_executions/{profile_execution_id}/profile_events":{"post":{"description":"Creates a new profile event for the given profile execution.","operationId":"TdDdWeb.ProfileEventController.create","parameters":[{"description":"Profile execution ID","in":"path","name":"profile_execution_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileEventCreateRequest"}}},"description":"Profile event","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileEventCreateResponse"}}},"description":"Profile event"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create profile event","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileEventCreateRequest":{"additionalProperties":false,"properties":{"profile_event":{"additionalProperties":false,"properties":{"message":{"description":"Event message","maxLength":1000,"type":"string"},"type":{"description":"Event type","type":"string"}},"type":"object"}},"required":["profile_event"],"title":"ProfileEventCreateRequest","type":"object"},"ProfileEventCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ProfileEventResource"}},"required":["data"],"title":"ProfileEventCreateResponse","type":"object"},"ProfileEventResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"message":{"nullable":true,"type":"string"},"profile_execution_id":{"type":"integer"},"type":{"nullable":true,"type":"string"}},"required":["id","profile_execution_id"],"title":"ProfileEventResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityChangesetResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityChangesetResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Show profile execution

> Retrieves a specific profile execution by ID, including its profile and associated events.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profile_executions/{id}":{"get":{"description":"Retrieves a specific profile execution by ID, including its profile and associated events.","operationId":"TdDdWeb.ProfileExecutionController.show","parameters":[{"description":"Profile execution ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionResponse"}}},"description":"Profile execution"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show profile execution","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileExecutionResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ProfileExecutionResource"}},"required":["data"],"title":"ProfileExecutionResponse","type":"object"},"ProfileExecutionResource":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/ProfileExecutionEmbedded"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"ProfileExecutionResource","type":"object"},"ProfileExecutionEmbedded":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/ProfileDataStructureEmbedded"},"latest":{"$ref":"#/components/schemas/ProfileLatestEmbedded"},"profile":{"$ref":"#/components/schemas/ProfileEmbedded"},"profile_events":{"items":{"$ref":"#/components/schemas/ProfileEventResource"},"type":"array"}},"title":"ProfileExecutionEmbedded","type":"object"},"ProfileDataStructureEmbedded":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"source_id":{"nullable":true,"type":"integer"}},"required":["id","external_id"],"title":"ProfileDataStructureEmbedded","type":"object"},"ProfileLatestEmbedded":{"additionalProperties":false,"properties":{"ancestry":{"items":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"name":{"type":"string"}},"required":["data_structure_id","name"],"type":"object"},"type":"array"},"name":{"type":"string"}},"required":["name"],"title":"ProfileLatestEmbedded","type":"object"},"ProfileEmbedded":{"additionalProperties":true,"properties":{"data_structure_id":{"nullable":true,"type":"integer"},"id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"nullable":true,"type":"string"}},"title":"ProfileEmbedded","type":"object"},"ProfileEventResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"message":{"nullable":true,"type":"string"},"profile_execution_id":{"type":"integer"},"type":{"nullable":true,"type":"string"}},"required":["id","profile_execution_id"],"title":"ProfileEventResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List profile execution groups

> Returns profile execution groups visible to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profile_execution_groups":{"get":{"description":"Returns profile execution groups visible to the current user.","operationId":"TdDdWeb.ProfileExecutionGroupController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionGroupListResponse"}}},"description":"List profile execution groups"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List profile execution groups","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileExecutionGroupListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/ProfileExecutionGroupResource"},"type":"array"}},"required":["data"],"title":"ProfileExecutionGroupListResponse","type":"object"},"ProfileExecutionGroupResource":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"properties":{"executions":{"description":"List of profile executions in this group","items":{"$ref":"#/components/schemas/ProfileExecutionResource"},"type":"array"}},"type":"object"},"created_by_id":{"description":"User ID who created the group","nullable":true,"type":"integer"},"id":{"description":"Profile execution group ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","type":"string"}},"required":["id"],"title":"ProfileExecutionGroupResource","type":"object"},"ProfileExecutionResource":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/ProfileExecutionEmbedded"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"ProfileExecutionResource","type":"object"},"ProfileExecutionEmbedded":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/ProfileDataStructureEmbedded"},"latest":{"$ref":"#/components/schemas/ProfileLatestEmbedded"},"profile":{"$ref":"#/components/schemas/ProfileEmbedded"},"profile_events":{"items":{"$ref":"#/components/schemas/ProfileEventResource"},"type":"array"}},"title":"ProfileExecutionEmbedded","type":"object"},"ProfileDataStructureEmbedded":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"source_id":{"nullable":true,"type":"integer"}},"required":["id","external_id"],"title":"ProfileDataStructureEmbedded","type":"object"},"ProfileLatestEmbedded":{"additionalProperties":false,"properties":{"ancestry":{"items":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"name":{"type":"string"}},"required":["data_structure_id","name"],"type":"object"},"type":"array"},"name":{"type":"string"}},"required":["name"],"title":"ProfileLatestEmbedded","type":"object"},"ProfileEmbedded":{"additionalProperties":true,"properties":{"data_structure_id":{"nullable":true,"type":"integer"},"id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"nullable":true,"type":"string"}},"title":"ProfileEmbedded","type":"object"},"ProfileEventResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"message":{"nullable":true,"type":"string"},"profile_execution_id":{"type":"integer"},"type":{"nullable":true,"type":"string"}},"required":["id","profile_execution_id"],"title":"ProfileEventResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create profile execution group

> Creates a new profile execution group from the provided payload and returns the created record.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/profile_execution_groups":{"post":{"description":"Creates a new profile execution group from the provided payload and returns the created record.","operationId":"TdDdWeb.ProfileExecutionGroupController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionGroupCreateRequest"}}},"description":"Profile execution group payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ProfileExecutionGroupResponse"}}},"description":"Profile execution group created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create profile execution group","tags":["Data Profiling"]}}},"components":{"schemas":{"ProfileExecutionGroupCreateRequest":{"additionalProperties":false,"properties":{"data_structure_ids":{"description":"Data structure IDs to profile. At least one of this or parent_structure_id must be provided.","items":{"type":"integer"},"minItems":1,"type":"array"},"parent_structure_id":{"description":"Parent data structure ID. Creates executions for all visible child fields. At least one of this or data_structure_ids must be provided.","type":"integer"}},"title":"ProfileExecutionGroupCreateRequest","type":"object"},"ProfileExecutionGroupResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ProfileExecutionGroupResource"}},"required":["data"],"title":"ProfileExecutionGroupResponse","type":"object"},"ProfileExecutionGroupResource":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"properties":{"executions":{"description":"List of profile executions in this group","items":{"$ref":"#/components/schemas/ProfileExecutionResource"},"type":"array"}},"type":"object"},"created_by_id":{"description":"User ID who created the group","nullable":true,"type":"integer"},"id":{"description":"Profile execution group ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","type":"string"}},"required":["id"],"title":"ProfileExecutionGroupResource","type":"object"},"ProfileExecutionResource":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/ProfileExecutionEmbedded"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"ProfileExecutionResource","type":"object"},"ProfileExecutionEmbedded":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/ProfileDataStructureEmbedded"},"latest":{"$ref":"#/components/schemas/ProfileLatestEmbedded"},"profile":{"$ref":"#/components/schemas/ProfileEmbedded"},"profile_events":{"items":{"$ref":"#/components/schemas/ProfileEventResource"},"type":"array"}},"title":"ProfileExecutionEmbedded","type":"object"},"ProfileDataStructureEmbedded":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"source_id":{"nullable":true,"type":"integer"}},"required":["id","external_id"],"title":"ProfileDataStructureEmbedded","type":"object"},"ProfileLatestEmbedded":{"additionalProperties":false,"properties":{"ancestry":{"items":{"additionalProperties":false,"properties":{"data_structure_id":{"type":"integer"},"name":{"type":"string"}},"required":["data_structure_id","name"],"type":"object"},"type":"array"},"name":{"type":"string"}},"required":["name"],"title":"ProfileLatestEmbedded","type":"object"},"ProfileEmbedded":{"additionalProperties":true,"properties":{"data_structure_id":{"nullable":true,"type":"integer"},"id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"max":{"nullable":true,"type":"string"},"min":{"nullable":true,"type":"string"},"most_frequent":{"additionalProperties":true,"nullable":true,"type":"object"},"null_count":{"additionalProperties":true,"nullable":true,"type":"object"},"patterns":{"additionalProperties":true,"nullable":true,"type":"object"},"total_count":{"additionalProperties":true,"nullable":true,"type":"object"},"unique_count":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"nullable":true,"type":"string"}},"title":"ProfileEmbedded","type":"object"},"ProfileEventResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"message":{"nullable":true,"type":"string"},"profile_execution_id":{"type":"integer"},"type":{"nullable":true,"type":"string"}},"required":["id","profile_execution_id"],"title":"ProfileEventResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityChangesetResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityChangesetResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Lineage

## List lineage events

> Retrieves all lineage events for the current user

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/lineage_events":{"get":{"description":"Retrieves all lineage events for the current user","operationId":"TdDdWeb.LineageEventController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LineageEventsIndexResponse"}}},"description":"Lineage events retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List lineage events","tags":["Data Lineage"]}}},"components":{"schemas":{"LineageEventsIndexResponse":{"description":"List of lineage events for the current user","items":{"$ref":"#/components/schemas/LineageEventResponse"},"title":"LineageEventsIndexResponse","type":"array"},"LineageEventResponse":{"additionalProperties":false,"properties":{"graph_data":{"description":"Serialized graph data","nullable":true,"type":"string"},"graph_hash":{"description":"Unique hash of the graph","type":"string"},"graph_id":{"description":"Associated graph ID","nullable":true,"type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"message":{"description":"Additional message","nullable":true,"type":"string"},"status":{"description":"Current status of the lineage event","enum":["COMPLETED","ALREADY_STARTED","FAILED","TIMED_OUT"],"type":"string"},"task_reference":{"description":"Reference to the background task","nullable":true,"type":"string"},"type":{"description":"Type of lineage event","nullable":true,"type":"string"},"user_id":{"description":"User who created the event","type":"integer"}},"required":["user_id","graph_hash","status","inserted_at"],"title":"LineageEventResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Export graph as CSV

> Exports a graph's data as a ZIP archive containing CSV files.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/graphs/csv":{"post":{"description":"Exports a graph's data as a ZIP archive containing CSV files.","operationId":"TdDdWeb.GraphController.csv","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphCSVRequest"}}},"description":"Graph CSV export payload","required":false},"responses":{"200":{"content":{"text/csv":{"schema":{"format":"binary","type":"string"}}},"description":"CSV file downloaded"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Export graph as CSV","tags":["Data Lineage"]}}},"components":{"schemas":{"GraphCSVRequest":{"additionalProperties":false,"properties":{"id":{"anyOf":[{"type":"string"},{"type":"integer"}],"description":"Graph ID to export as CSV (string or integer)"}},"required":["id"],"title":"GraphCSVRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create graph

> Creates a new graph for lineage or impact analysis.\
> \- \`type: "sample"\` → no requiere \`ids\`\
> \- \`type: "lineage"\` o \`"impact"\` → requiere \`ids\`<br>

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/graphs":{"post":{"description":"Creates a new graph for lineage or impact analysis.\n- `type: \"sample\"` → no requiere `ids`\n- `type: \"lineage\"` o `\"impact\"` → requiere `ids`\n","operationId":"TdDdWeb.GraphController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphCreateRequest"}}},"description":"Graph create payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphResponse"}}},"description":"Graph created"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphResponse"}}},"description":"Graph processing"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create graph","tags":["Data Lineage"]}}},"components":{"schemas":{"GraphCreateRequest":{"additionalProperties":false,"properties":{"excludes":{"description":"Resources to exclude from the graph","items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"nullable":true,"type":"array"},"header_labels":{"description":"Include header labels in the response","nullable":true,"type":"boolean"},"ids":{"description":"List of resource identifiers (strings or integers)","items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},"levels":{"description":"Number of levels to traverse","nullable":true,"type":"integer"},"type":{"description":"Type of graph to generate","enum":["lineage","impact","sample"],"type":"string"}},"required":["type","ids"],"title":"GraphCreateRequest","type":"object"},"GraphResponse":{"anyOf":[{"$ref":"#/components/schemas/GraphCompletedResponse"},{"$ref":"#/components/schemas/GraphProcessingResponse"}],"description":"Response for graph creation. Can be completed (201) or processing (202)","title":"GraphResponse"},"GraphCompletedResponse":{"additionalProperties":false,"properties":{"excludes":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"nullable":true,"type":"array"},"groups":{"items":{"type":"object"},"type":"array"},"header_labels":{"nullable":true,"type":"boolean"},"id":{"anyOf":[{"type":"string"},{"type":"integer"}]},"ids":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},"levels":{"nullable":true,"type":"integer"},"opts":{"additionalProperties":true,"type":"object"},"paths":{"items":{"type":"object"},"type":"array"},"resources":{"items":{"type":"object"},"type":"array"}},"required":["id","ids","opts"],"title":"GraphCompletedResponse","type":"object"},"GraphProcessingResponse":{"additionalProperties":false,"properties":{"graph_hash":{"description":"Unique hash identifying the graph","type":"string"},"status":{"description":"Status of the graph processing","enum":["JUST_STARTED","ALREADY_STARTED"],"type":"string"},"task_reference":{"description":"Task reference for tracking progress","nullable":true,"type":"string"}},"required":["graph_hash","status"],"title":"GraphProcessingResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get graph

> Retrieves a graph by its ID, automatically recalculating it if it is stale.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/graphs/{id}":{"get":{"description":"Retrieves a graph by its ID, automatically recalculating it if it is stale.","operationId":"TdDdWeb.GraphController.show","parameters":[{"description":"Graph ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphShowResponse"}}},"description":"Graph retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get graph","tags":["Data Lineage"]}}},"components":{"schemas":{"GraphShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/GraphCompletedResponse"}},"required":["data"],"title":"GraphShowResponse","type":"object"},"GraphCompletedResponse":{"additionalProperties":false,"properties":{"excludes":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"nullable":true,"type":"array"},"groups":{"items":{"type":"object"},"type":"array"},"header_labels":{"nullable":true,"type":"boolean"},"id":{"anyOf":[{"type":"string"},{"type":"integer"}]},"ids":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},"levels":{"nullable":true,"type":"integer"},"opts":{"additionalProperties":true,"type":"object"},"paths":{"items":{"type":"object"},"type":"array"},"resources":{"items":{"type":"object"},"type":"array"}},"required":["id","ids","opts"],"title":"GraphCompletedResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get graph by hash

> Retrieves a graph by its hash value, returning its current data or processing status.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/graphs/hash/{hash}":{"get":{"description":"Retrieves a graph by its hash value, returning its current data or processing status.","operationId":"TdDdWeb.GraphController.get_graph_by_hash","parameters":[{"description":"Graph hash","in":"path","name":"hash","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphHashResponse"}}},"description":"Graph retrieved"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphHashResponse"}}},"description":"Graph processing"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get graph by hash","tags":["Data Lineage"]}}},"components":{"schemas":{"GraphHashResponse":{"anyOf":[{"$ref":"#/components/schemas/GraphHashCompletedResponse"},{"$ref":"#/components/schemas/GraphHashProcessingResponse"}],"description":"Response for graph retrieval by hash. Can be completed (200) or processing (202)","title":"GraphHashResponse"},"GraphHashCompletedResponse":{"additionalProperties":false,"properties":{"excludes":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"nullable":true,"type":"array"},"groups":{"items":{"type":"object"},"type":"array"},"hash":{"type":"string"},"header_labels":{"nullable":true,"type":"boolean"},"id":{"anyOf":[{"type":"string"},{"type":"integer"}]},"ids":{"items":{"anyOf":[{"type":"string"},{"type":"integer"}]},"type":"array"},"levels":{"nullable":true,"type":"integer"},"opts":{"additionalProperties":true,"type":"object"},"paths":{"items":{"type":"object"},"type":"array"},"resources":{"items":{"type":"object"},"type":"array"}},"required":["id","hash","ids","opts"],"title":"GraphHashCompletedResponse","type":"object"},"GraphHashProcessingResponse":{"additionalProperties":false,"properties":{"graph_data":{"nullable":true,"type":"string"},"graph_hash":{"type":"string"},"graph_id":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"message":{"nullable":true,"type":"string"},"status":{"enum":["ALREADY_STARTED"],"type":"string"},"task_reference":{"nullable":true,"type":"string"},"user_id":{"type":"integer"}},"required":["graph_hash","status","inserted_at","user_id"],"title":"GraphHashProcessingResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Structures

## Get bucket structures

> Searches bucket structures using the provided filters and returns matching data structures.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/buckets/structures":{"post":{"description":"Searches bucket structures using the provided filters and returns matching data structures.","operationId":"TdDdWeb.DataStructureController.get_bucket_structures","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSearchRequest"}}},"description":"Bucket structures filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSearchResponse"}}},"description":"Bucket structures response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get bucket structures","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureSearchRequest":{"additionalProperties":true,"title":"DataStructureSearchRequest","type":"object"},"DataStructureSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/DataStructure"},"type":"array"},"filters":{"additionalProperties":true,"type":"object"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"DataStructureSearchResponse","type":"object"},"DataStructure":{"additionalProperties":false,"properties":{"my_grant_request":{"nullable":true,"type":"object"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"inserted_at":{"format":"date-time","type":"string"},"note_last_changed_by":{"nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"type":{"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"my_grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"},"note_last_changed_at":{"format":"date-time","nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"string"},"class":{"nullable":true,"type":"string"},"versions":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"original_name":{"nullable":true,"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"note":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"description":{"nullable":true,"type":"string"},"name":{"type":"string"},"id":{"type":"integer"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"field_type":{"nullable":true,"type":"string"},"system_id":{"nullable":true,"type":"integer"},"classes":{"additionalProperties":true,"nullable":true,"type":"object"},"metadata_versions":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"system":{"$ref":"#/components/schemas/System"},"ancestry":{"items":{"type":"object"},"nullable":true,"type":"array"},"parents":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"linked_concepts":{"nullable":true,"type":"boolean"},"group":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"confidential":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"non_published_note":{"additionalProperties":true,"nullable":true,"type":"object"},"data_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"version":{"nullable":true,"type":"integer"},"relations":{"additionalProperties":true,"nullable":true,"type":"object"}},"required":["id","name","type","system"],"title":"DataStructure","type":"object"},"Domain":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"parents":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","external_id","name"],"title":"Domain","type":"object"},"DataStructureVersion":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"children":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"class":{"nullable":true,"type":"string"},"classes":{"additionalProperties":{"type":"string"},"nullable":true,"type":"object"},"data_fields":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data_structure":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"}},"type":"object"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"grant":{"$ref":"#/components/schemas/DataStructure"},"grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"group":{"nullable":true,"type":"string"},"implementation_count":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"nullable":true,"type":"string"},"note":{"$ref":"#/components/schemas/Note"},"parents":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"system":{"$ref":"#/components/schemas/System"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"version":{"type":"integer"}},"required":["version"],"title":"DataStructureVersion","type":"object"},"Note":{"additionalProperties":true,"description":"Dynamic content of the published note","title":"Note","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"UserPermissions":{"additionalProperties":true,"properties":{"confidential":{"type":"boolean"},"profile_permission":{"type":"boolean"},"request_grant":{"type":"boolean"},"update":{"type":"boolean"},"update_grant_removal":{"type":"boolean"},"view_lineage":{"type":"boolean"},"view_profiling_permission":{"type":"boolean"}},"title":"UserPermissions","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Bulk update template content for data structures

> Updates template content for data structures using a CSV upload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/bulk_update_template_content":{"post":{"description":"Updates template content for data structures using a CSV upload.","operationId":"TdDdWeb.DataStructureController.bulk_update_template_content","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DataStructureBulkUpdateTemplateContentRequest"}}},"description":"Bulk update template content payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureBulkUpdateTemplateContentResponse"}}},"description":"Bulk update template content response"},"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureBulkUpdateTemplateContentResponse"}}},"description":"Bulk update template content accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk update template content for data structures","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureBulkUpdateTemplateContentRequest":{"properties":{"auto_publish":{"type":"boolean"},"lang":{"type":"string"},"structures":{"format":"binary","type":"string"}},"required":["structures"],"title":"DataStructureBulkUpdateTemplateContentRequest","type":"object"},"DataStructureBulkUpdateTemplateContentResponse":{"properties":{"hash":{"type":"string"},"status":{"type":"string"},"task_reference":{"additionalProperties":true,"type":"object"}},"title":"DataStructureBulkUpdateTemplateContentResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Bulk upload data structure domains

> Bulk uploads domain assignments for data structures from a CSV payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/bulk_upload_domains":{"post":{"description":"Bulk uploads domain assignments for data structures from a CSV payload.","operationId":"TdDdWeb.DataStructureController.bulk_upload_domains","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/DataStructureBulkUploadDomainsRequest"}}},"description":"Bulk upload domains payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureBulkUploadDomainsResponse"}}},"description":"Bulk upload domains response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk upload data structure domains","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureBulkUploadDomainsRequest":{"properties":{"structures_domains":{"format":"binary","type":"string"}},"required":["structures_domains"],"title":"DataStructureBulkUploadDomainsRequest","type":"object"},"DataStructureBulkUploadDomainsResponse":{"properties":{"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"ids":{"items":{"type":"integer"},"type":"array"}},"title":"DataStructureBulkUploadDomainsResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update data structure

> Updates the specified data structure using the supplied payload and optional inheritance flag.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{id}":{"put":{"description":"Updates the specified data structure using the supplied payload and optional inheritance flag.","operationId":"TdDdWeb.DataStructureController.update","parameters":[{"description":"Data structure ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"Whether to inherit changes to versions","in":"query","name":"inherit","required":false,"schema":{"default":false,"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureUpdateRequest"}}},"description":"Data structure update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureUpdateResponse"}}},"description":"Data structure updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdConflictResponse"}}},"description":"Conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update data structure","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureUpdateRequest":{"properties":{"data_structure":{"additionalProperties":true,"type":"object"},"inherit":{"type":"boolean"}},"required":["data_structure"],"title":"DataStructureUpdateRequest","type":"object"},"DataStructureUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructure"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"}},"required":["data"],"title":"DataStructureUpdateResponse","type":"object"},"DataStructure":{"additionalProperties":false,"properties":{"my_grant_request":{"nullable":true,"type":"object"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"inserted_at":{"format":"date-time","type":"string"},"note_last_changed_by":{"nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"type":{"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"my_grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"},"note_last_changed_at":{"format":"date-time","nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"string"},"class":{"nullable":true,"type":"string"},"versions":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"original_name":{"nullable":true,"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"note":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"description":{"nullable":true,"type":"string"},"name":{"type":"string"},"id":{"type":"integer"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"field_type":{"nullable":true,"type":"string"},"system_id":{"nullable":true,"type":"integer"},"classes":{"additionalProperties":true,"nullable":true,"type":"object"},"metadata_versions":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"system":{"$ref":"#/components/schemas/System"},"ancestry":{"items":{"type":"object"},"nullable":true,"type":"array"},"parents":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"linked_concepts":{"nullable":true,"type":"boolean"},"group":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"confidential":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"non_published_note":{"additionalProperties":true,"nullable":true,"type":"object"},"data_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"version":{"nullable":true,"type":"integer"},"relations":{"additionalProperties":true,"nullable":true,"type":"object"}},"required":["id","name","type","system"],"title":"DataStructure","type":"object"},"Domain":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"parents":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","external_id","name"],"title":"Domain","type":"object"},"DataStructureVersion":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"children":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"class":{"nullable":true,"type":"string"},"classes":{"additionalProperties":{"type":"string"},"nullable":true,"type":"object"},"data_fields":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data_structure":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"}},"type":"object"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"grant":{"$ref":"#/components/schemas/DataStructure"},"grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"group":{"nullable":true,"type":"string"},"implementation_count":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"nullable":true,"type":"string"},"note":{"$ref":"#/components/schemas/Note"},"parents":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"system":{"$ref":"#/components/schemas/System"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"version":{"type":"integer"}},"required":["version"],"title":"DataStructureVersion","type":"object"},"Note":{"additionalProperties":true,"description":"Dynamic content of the published note","title":"Note","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"UserPermissions":{"additionalProperties":true,"properties":{"confidential":{"type":"boolean"},"profile_permission":{"type":"boolean"},"request_grant":{"type":"boolean"},"update":{"type":"boolean"},"update_grant_removal":{"type":"boolean"},"view_lineage":{"type":"boolean"},"view_profiling_permission":{"type":"boolean"}},"title":"UserPermissions","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdConflictResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdConflictResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete data structure

> Deletes the specified data structure, either logically or permanently depending on query parameters.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{id}":{"delete":{"description":"Deletes the specified data structure, either logically or permanently depending on query parameters.","operationId":"TdDdWeb.DataStructureController.delete","parameters":[{"description":"Data structure ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"If true, performs logical deletion (soft delete)","in":"query","name":"logical","required":false,"schema":{"default":"false","enum":["true","false"],"type":"string"}}],"responses":{"204":{"description":"Data structure deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete data structure","tags":["Data Structures"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update data structure

> Updates the specified data structure using the supplied payload and optional inheritance flag.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{id}":{"patch":{"description":"Updates the specified data structure using the supplied payload and optional inheritance flag.","operationId":"TdDdWeb.DataStructureController.update (2)","parameters":[{"description":"Data structure ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}},{"description":"Whether to inherit changes to versions","in":"query","name":"inherit","required":false,"schema":{"default":false,"type":"boolean"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureUpdateRequest"}}},"description":"Data structure update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureUpdateResponse"}}},"description":"Data structure updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"409":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdConflictResponse"}}},"description":"Conflict"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update data structure","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureUpdateRequest":{"properties":{"data_structure":{"additionalProperties":true,"type":"object"},"inherit":{"type":"boolean"}},"required":["data_structure"],"title":"DataStructureUpdateRequest","type":"object"},"DataStructureUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructure"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"}},"required":["data"],"title":"DataStructureUpdateResponse","type":"object"},"DataStructure":{"additionalProperties":false,"properties":{"my_grant_request":{"nullable":true,"type":"object"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"inserted_at":{"format":"date-time","type":"string"},"note_last_changed_by":{"nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"type":{"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"my_grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"},"note_last_changed_at":{"format":"date-time","nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"string"},"class":{"nullable":true,"type":"string"},"versions":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"original_name":{"nullable":true,"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"note":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"description":{"nullable":true,"type":"string"},"name":{"type":"string"},"id":{"type":"integer"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"field_type":{"nullable":true,"type":"string"},"system_id":{"nullable":true,"type":"integer"},"classes":{"additionalProperties":true,"nullable":true,"type":"object"},"metadata_versions":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"system":{"$ref":"#/components/schemas/System"},"ancestry":{"items":{"type":"object"},"nullable":true,"type":"array"},"parents":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"linked_concepts":{"nullable":true,"type":"boolean"},"group":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"confidential":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"non_published_note":{"additionalProperties":true,"nullable":true,"type":"object"},"data_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"version":{"nullable":true,"type":"integer"},"relations":{"additionalProperties":true,"nullable":true,"type":"object"}},"required":["id","name","type","system"],"title":"DataStructure","type":"object"},"Domain":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"parents":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","external_id","name"],"title":"Domain","type":"object"},"DataStructureVersion":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"children":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"class":{"nullable":true,"type":"string"},"classes":{"additionalProperties":{"type":"string"},"nullable":true,"type":"object"},"data_fields":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data_structure":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"}},"type":"object"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"grant":{"$ref":"#/components/schemas/DataStructure"},"grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"group":{"nullable":true,"type":"string"},"implementation_count":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"nullable":true,"type":"string"},"note":{"$ref":"#/components/schemas/Note"},"parents":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"system":{"$ref":"#/components/schemas/System"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"version":{"type":"integer"}},"required":["version"],"title":"DataStructureVersion","type":"object"},"Note":{"additionalProperties":true,"description":"Dynamic content of the published note","title":"Note","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"UserPermissions":{"additionalProperties":true,"properties":{"confidential":{"type":"boolean"},"profile_permission":{"type":"boolean"},"request_grant":{"type":"boolean"},"update":{"type":"boolean"},"update_grant_removal":{"type":"boolean"},"view_lineage":{"type":"boolean"},"view_profiling_permission":{"type":"boolean"}},"title":"UserPermissions","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdConflictResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdConflictResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Upload data structures metadata

> Uploads data structures metadata via multipart form data and returns the uploaded version.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/metadata":{"post":{"description":"Uploads data structures metadata via multipart form data and returns the uploaded version.","operationId":"TdDdWeb.MetadataController.upload","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MetadataUploadRequest"}}},"description":"Metadata upload payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureVersionResponse"}}},"description":"Metadata upload completed"},"202":{"description":"Metadata upload accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityStringResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload data structures metadata","tags":["Data Structures"]}}},"components":{"schemas":{"MetadataUploadRequest":{"additionalProperties":false,"properties":{"data_fields":{"description":"CSV file with field metadata","format":"binary","nullable":true,"type":"string"},"data_structure_relations":{"description":"CSV file with structure relations","format":"binary","nullable":true,"type":"string"},"data_structures":{"description":"CSV file with structure metadata","format":"binary","type":"string"},"domain":{"description":"Domain external ID to assign to all structures","nullable":true,"type":"string"},"external_id":{"description":"External ID of the structure to update synchronously","nullable":true,"type":"string"},"inherit_domains":{"description":"Inherit domains from parent (true/false)","nullable":true,"type":"string"},"job_id":{"description":"Job ID for tracking","nullable":true,"type":"string"},"op":{"description":"Operation type (upsert, etc.)","nullable":true,"type":"string"},"parent_external_id":{"description":"Parent external ID for synchronous update","nullable":true,"type":"string"},"source":{"description":"Source external ID","nullable":true,"type":"string"}},"required":["data_structures"],"title":"MetadataUploadRequest","type":"object"},"DataStructureVersionResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"DataStructureVersionResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityStringResponse":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"}},"title":"TdDdUnprocessableEntityStringResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Upload data structures metadata

> Uploads data structures metadata via multipart form data and returns the uploaded version.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/metadata":{"patch":{"description":"Uploads data structures metadata via multipart form data and returns the uploaded version.","operationId":"TdDdWeb.MetadataController.upload (2)","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/MetadataUploadRequest"}}},"description":"Metadata upload payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureVersionResponse"}}},"description":"Metadata upload completed"},"202":{"description":"Metadata upload accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityStringResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload data structures metadata","tags":["Data Structures"]}}},"components":{"schemas":{"MetadataUploadRequest":{"additionalProperties":false,"properties":{"data_fields":{"description":"CSV file with field metadata","format":"binary","nullable":true,"type":"string"},"data_structure_relations":{"description":"CSV file with structure relations","format":"binary","nullable":true,"type":"string"},"data_structures":{"description":"CSV file with structure metadata","format":"binary","type":"string"},"domain":{"description":"Domain external ID to assign to all structures","nullable":true,"type":"string"},"external_id":{"description":"External ID of the structure to update synchronously","nullable":true,"type":"string"},"inherit_domains":{"description":"Inherit domains from parent (true/false)","nullable":true,"type":"string"},"job_id":{"description":"Job ID for tracking","nullable":true,"type":"string"},"op":{"description":"Operation type (upsert, etc.)","nullable":true,"type":"string"},"parent_external_id":{"description":"Parent external ID for synchronous update","nullable":true,"type":"string"},"source":{"description":"Source external ID","nullable":true,"type":"string"}},"required":["data_structures"],"title":"MetadataUploadRequest","type":"object"},"DataStructureVersionResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"DataStructureVersionResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityStringResponse":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"}},"title":"TdDdUnprocessableEntityStringResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List data structures

> Retrieves a paginated list of data structures based on search parameters and permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures":{"get":{"description":"Retrieves a paginated list of data structures based on search parameters and permissions.","operationId":"TdDdWeb.DataStructureController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSearchResponse"}}},"description":"Data structures list response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List data structures","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/DataStructure"},"type":"array"},"filters":{"additionalProperties":true,"type":"object"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"DataStructureSearchResponse","type":"object"},"DataStructure":{"additionalProperties":false,"properties":{"my_grant_request":{"nullable":true,"type":"object"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"inserted_at":{"format":"date-time","type":"string"},"note_last_changed_by":{"nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"type":{"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"my_grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"},"note_last_changed_at":{"format":"date-time","nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"string"},"class":{"nullable":true,"type":"string"},"versions":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"original_name":{"nullable":true,"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"note":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"description":{"nullable":true,"type":"string"},"name":{"type":"string"},"id":{"type":"integer"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"field_type":{"nullable":true,"type":"string"},"system_id":{"nullable":true,"type":"integer"},"classes":{"additionalProperties":true,"nullable":true,"type":"object"},"metadata_versions":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"system":{"$ref":"#/components/schemas/System"},"ancestry":{"items":{"type":"object"},"nullable":true,"type":"array"},"parents":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"linked_concepts":{"nullable":true,"type":"boolean"},"group":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"confidential":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"non_published_note":{"additionalProperties":true,"nullable":true,"type":"object"},"data_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"version":{"nullable":true,"type":"integer"},"relations":{"additionalProperties":true,"nullable":true,"type":"object"}},"required":["id","name","type","system"],"title":"DataStructure","type":"object"},"Domain":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"parents":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","external_id","name"],"title":"Domain","type":"object"},"DataStructureVersion":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"children":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"class":{"nullable":true,"type":"string"},"classes":{"additionalProperties":{"type":"string"},"nullable":true,"type":"object"},"data_fields":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data_structure":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"}},"type":"object"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"grant":{"$ref":"#/components/schemas/DataStructure"},"grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"group":{"nullable":true,"type":"string"},"implementation_count":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"nullable":true,"type":"string"},"note":{"$ref":"#/components/schemas/Note"},"parents":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"system":{"$ref":"#/components/schemas/System"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"version":{"type":"integer"}},"required":["version"],"title":"DataStructureVersion","type":"object"},"Note":{"additionalProperties":true,"description":"Dynamic content of the published note","title":"Note","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"UserPermissions":{"additionalProperties":true,"properties":{"confidential":{"type":"boolean"},"profile_permission":{"type":"boolean"},"request_grant":{"type":"boolean"},"update":{"type":"boolean"},"update_grant_removal":{"type":"boolean"},"view_lineage":{"type":"boolean"},"view_profiling_permission":{"type":"boolean"}},"title":"UserPermissions","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search structure tags

> Searches structure tags with the given filters and returns paginated results including total count.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/structure_tags/search":{"post":{"description":"Searches structure tags with the given filters and returns paginated results including total count.","operationId":"TdDdWeb.StructureTagSearchController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureTagSearchRequest"}}},"description":"Structure tag search filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureTagSearchResponse"}}},"description":"Structure tag search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search structure tags","tags":["Data Structures"]}}},"components":{"schemas":{"StructureTagSearchRequest":{"additionalProperties":false,"properties":{"min_id":{"description":"Return structure tags with ID greater than or equal to this value","nullable":true,"type":"integer"},"since":{"description":"Return structure tags updated at or after this timestamp (ISO 8601)","nullable":true,"type":"string"},"size":{"description":"Maximum number of results to return","minimum":1,"nullable":true,"type":"integer"}},"title":"StructureTagSearchRequest","type":"object"},"StructureTagSearchResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of structure tags matching the search","items":{"$ref":"#/components/schemas/StructureTagResource"},"type":"array"}},"required":["data"],"title":"StructureTagSearchResponse","type":"object"},"StructureTagResource":{"additionalProperties":false,"properties":{"comment":{"nullable":true,"type":"string"},"data_structure_id":{"type":"integer"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"tag_id":{"type":"integer"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","data_structure_id","tag_id","inserted_at","updated_at"],"title":"StructureTagResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get data structures metrics

> Retrieves metrics for data structures using the provided filters, when permitted.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/metrics":{"post":{"description":"Retrieves metrics for data structures using the provided filters, when permitted.","operationId":"TdDdWeb.DataStructureController.metrics","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureMetricsRequest"}}},"description":"Metrics filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureMetricsResponse"}}},"description":"Data structures metrics"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get data structures metrics","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureMetricsRequest":{"properties":{"page":{"default":0,"type":"integer"},"since":{"format":"date_time","type":"string"},"size":{"default":50,"type":"integer"}},"title":"DataStructureMetricsRequest","type":"object"},"DataStructureMetricsResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/DataStructureMetric"},"type":"array"}},"required":["data"],"title":"DataStructureMetricsResponse","type":"object"},"DataStructureMetric":{"additionalProperties":false,"properties":{"class":{"nullable":true,"type":"string"},"confidential":{"type":"boolean"},"deleted_at":{"nullable":true,"type":"string"},"description":{"nullable":true,"type":"string"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"external_id":{"nullable":true,"type":"string"},"field_type":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"source_id":{"nullable":true,"type":"integer"},"system_id":{"type":"integer"},"type":{"type":"string"},"updated_at":{"type":"string"},"version":{"type":"integer"}},"required":["id","name","type","system_id","domain_ids","inserted_at","updated_at","version","confidential"],"title":"DataStructureMetric","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Bulk update data structures

> Performs a bulk update on matching data structures using the supplied update payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/bulk_update":{"post":{"description":"Performs a bulk update on matching data structures using the supplied update payload.","operationId":"TdDdWeb.DataStructureController.bulk_update","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureBulkUpdateRequest"}}},"description":"Bulk update request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureBulkUpdateResponse"}}},"description":"Bulk update response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk update data structures","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureBulkUpdateRequest":{"properties":{"bulk_update_request":{"additionalProperties":true,"type":"object"}},"required":["bulk_update_request"],"title":"DataStructureBulkUpdateRequest","type":"object"},"DataStructureBulkUpdateResponse":{"properties":{"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"ids":{"items":{"type":"integer"},"type":"array"}},"title":"DataStructureBulkUpdateResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search data structures

> Searches data structures using the supplied filters and returns matching results.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/search":{"post":{"description":"Searches data structures using the supplied filters and returns matching results.","operationId":"TdDdWeb.DataStructureController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSearchRequest"}}},"description":"Search filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSearchResponse"}}},"description":"Search data structures response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search data structures","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureSearchRequest":{"additionalProperties":true,"title":"DataStructureSearchRequest","type":"object"},"DataStructureSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/DataStructure"},"type":"array"},"filters":{"additionalProperties":true,"type":"object"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"DataStructureSearchResponse","type":"object"},"DataStructure":{"additionalProperties":false,"properties":{"my_grant_request":{"nullable":true,"type":"object"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"inserted_at":{"format":"date-time","type":"string"},"note_last_changed_by":{"nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"type":{"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"my_grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"},"note_last_changed_at":{"format":"date-time","nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"string"},"class":{"nullable":true,"type":"string"},"versions":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"original_name":{"nullable":true,"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"note":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"description":{"nullable":true,"type":"string"},"name":{"type":"string"},"id":{"type":"integer"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"field_type":{"nullable":true,"type":"string"},"system_id":{"nullable":true,"type":"integer"},"classes":{"additionalProperties":true,"nullable":true,"type":"object"},"metadata_versions":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"system":{"$ref":"#/components/schemas/System"},"ancestry":{"items":{"type":"object"},"nullable":true,"type":"array"},"parents":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"linked_concepts":{"nullable":true,"type":"boolean"},"group":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"confidential":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"non_published_note":{"additionalProperties":true,"nullable":true,"type":"object"},"data_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"version":{"nullable":true,"type":"integer"},"relations":{"additionalProperties":true,"nullable":true,"type":"object"}},"required":["id","name","type","system"],"title":"DataStructure","type":"object"},"Domain":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"parents":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","external_id","name"],"title":"Domain","type":"object"},"DataStructureVersion":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"children":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"class":{"nullable":true,"type":"string"},"classes":{"additionalProperties":{"type":"string"},"nullable":true,"type":"object"},"data_fields":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data_structure":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"}},"type":"object"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"grant":{"$ref":"#/components/schemas/DataStructure"},"grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"group":{"nullable":true,"type":"string"},"implementation_count":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"nullable":true,"type":"string"},"note":{"$ref":"#/components/schemas/Note"},"parents":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"system":{"$ref":"#/components/schemas/System"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"version":{"type":"integer"}},"required":["version"],"title":"DataStructureVersion","type":"object"},"Note":{"additionalProperties":true,"description":"Dynamic content of the published note","title":"Note","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"UserPermissions":{"additionalProperties":true,"properties":{"confidential":{"type":"boolean"},"profile_permission":{"type":"boolean"},"request_grant":{"type":"boolean"},"update":{"type":"boolean"},"update_grant_removal":{"type":"boolean"},"view_lineage":{"type":"boolean"},"view_profiling_permission":{"type":"boolean"}},"title":"UserPermissions","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get structures for a system

> Retrieves all data structures for the specified system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/structures":{"get":{"description":"Retrieves all data structures for the specified system.","operationId":"TdDdWeb.DataStructureController.get_system_structures","parameters":[{"description":"System ID","in":"path","name":"system_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureSearchResponse"}}},"description":"System structures response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get structures for a system","tags":["Data Structures"]}}},"components":{"schemas":{"DataStructureSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/DataStructure"},"type":"array"},"filters":{"additionalProperties":true,"type":"object"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"DataStructureSearchResponse","type":"object"},"DataStructure":{"additionalProperties":false,"properties":{"my_grant_request":{"nullable":true,"type":"object"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"inserted_at":{"format":"date-time","type":"string"},"note_last_changed_by":{"nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"type":{"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"my_grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"path":{"items":{"type":"string"},"nullable":true,"type":"array"},"note_last_changed_at":{"format":"date-time","nullable":true,"type":"string"},"parent_id":{"nullable":true,"type":"string"},"class":{"nullable":true,"type":"string"},"versions":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"source":{"additionalProperties":true,"nullable":true,"type":"object"},"original_name":{"nullable":true,"type":"string"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"children":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"note":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"description":{"nullable":true,"type":"string"},"name":{"type":"string"},"id":{"type":"integer"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"field_type":{"nullable":true,"type":"string"},"system_id":{"nullable":true,"type":"integer"},"classes":{"additionalProperties":true,"nullable":true,"type":"object"},"metadata_versions":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"system":{"$ref":"#/components/schemas/System"},"ancestry":{"items":{"type":"object"},"nullable":true,"type":"array"},"parents":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"linked_concepts":{"nullable":true,"type":"boolean"},"group":{"nullable":true,"type":"string"},"domain":{"additionalProperties":true,"nullable":true,"type":"object"},"confidential":{"nullable":true,"type":"boolean"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"non_published_note":{"additionalProperties":true,"nullable":true,"type":"object"},"data_fields":{"items":{"type":"object"},"nullable":true,"type":"array"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"version":{"nullable":true,"type":"integer"},"relations":{"additionalProperties":true,"nullable":true,"type":"object"}},"required":["id","name","type","system"],"title":"DataStructure","type":"object"},"Domain":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"},"parent_id":{"nullable":true,"type":"integer"},"parents":{"items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"nullable":true,"type":"array"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","external_id","name"],"title":"Domain","type":"object"},"DataStructureVersion":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"children":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"class":{"nullable":true,"type":"string"},"classes":{"additionalProperties":{"type":"string"},"nullable":true,"type":"object"},"data_fields":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data_structure":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"type":"string"},"id":{"type":"integer"}},"type":"object"},"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"domains":{"items":{"$ref":"#/components/schemas/Domain"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"grant":{"$ref":"#/components/schemas/DataStructure"},"grants":{"items":{"$ref":"#/components/schemas/DataStructure"},"nullable":true,"type":"array"},"group":{"nullable":true,"type":"string"},"implementation_count":{"nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"metadata":{"additionalProperties":true,"type":"object"},"name":{"nullable":true,"type":"string"},"note":{"$ref":"#/components/schemas/Note"},"parents":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"siblings":{"items":{"$ref":"#/components/schemas/DataStructureVersion"},"nullable":true,"type":"array"},"system":{"$ref":"#/components/schemas/System"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","type":"string"},"user_permissions":{"$ref":"#/components/schemas/UserPermissions"},"version":{"type":"integer"}},"required":["version"],"title":"DataStructureVersion","type":"object"},"Note":{"additionalProperties":true,"description":"Dynamic content of the published note","title":"Note","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"UserPermissions":{"additionalProperties":true,"properties":{"confidential":{"type":"boolean"},"profile_permission":{"type":"boolean"},"request_grant":{"type":"boolean"},"update":{"type":"boolean"},"update_grant_removal":{"type":"boolean"},"view_lineage":{"type":"boolean"},"view_profiling_permission":{"type":"boolean"}},"title":"UserPermissions","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Grants

## Create grant

> Creates a new grant for the specified data structure.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/grants":{"post":{"description":"Creates a new grant for the specified data structure.","operationId":"TdDdWeb.GrantController.create","parameters":[{"description":"Data Structure external ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantCreateRequest"}}},"description":"Grant create payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantCreateResponse"}}},"description":"Grant created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundMessageResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create grant","tags":["Grants"]}}},"components":{"schemas":{"GrantCreateRequest":{"additionalProperties":false,"properties":{"grant":{"additionalProperties":false,"description":"Grant attributes","properties":{"detail":{"additionalProperties":true,"description":"Additional details (optional)","type":"object"},"end_date":{"description":"Grant end date (optional)","format":"date","type":"string"},"source_user_name":{"description":"Source user name (optional)","type":"string"},"start_date":{"description":"Grant start date (optional)","format":"date","type":"string"},"user_id":{"description":"User ID (required)","type":"integer"}},"required":["user_id"],"type":"object"}},"required":["grant"],"title":"GrantCreateRequest","type":"object"},"GrantCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Grant"}},"required":["data"],"title":"GrantCreateResponse","type":"object"},"Grant":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/GrantDataStructure"},"data_structure_version":{"$ref":"#/components/schemas/GrantDataStructureVersion"},"detail":{"additionalProperties":true,"default":{},"type":"object"},"end_date":{"format":"date","nullable":true,"type":"string"},"external_ref":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"pending_removal":{"default":false,"type":"boolean"},"source_user_name":{"nullable":true,"type":"string"},"start_date":{"format":"date","nullable":true,"type":"string"},"system":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"user":{"additionalProperties":true,"nullable":true,"type":"object"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"title":"Grant","type":"object"},"GrantDataStructure":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"nullable":true,"type":"string"},"system":{"nullable":true,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"system_id":{"nullable":true,"type":"integer"},"type":{"nullable":true,"type":"string"}},"title":"GrantDataStructure","type":"object"},"GrantDataStructureVersion":{"additionalProperties":true,"properties":{"ancestry":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"path":{"items":{"type":"integer"},"nullable":true,"type":"array"},"version":{"nullable":true,"type":"integer"}},"title":"GrantDataStructureVersion","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdNotFoundMessageResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search grants for current user

> Searches grants owned by or visible to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/search/mine":{"post":{"description":"Searches grants owned by or visible to the current user.","operationId":"TdDdWeb.GrantSearchController.search_my_grants","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantSearchRequest"}}},"description":"Grant search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantSearchResponse"}}},"description":"Grant search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search grants for current user","tags":["Grants"]}}},"components":{"schemas":{"GrantSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"type":"object"},"page":{"default":0,"type":"integer"},"query":{"nullable":true,"type":"string"},"scroll":{"nullable":true,"type":"string"},"scroll_id":{"nullable":true,"type":"string"},"size":{"default":20,"type":"integer"},"sort":{"nullable":true,"type":"string"}},"title":"GrantSearchRequest","type":"object"},"GrantSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Grant"},"type":"array"},"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"scroll_id":{"nullable":true,"type":"string"}},"title":"GrantSearchResponse","type":"object"},"Grant":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/GrantDataStructure"},"data_structure_version":{"$ref":"#/components/schemas/GrantDataStructureVersion"},"detail":{"additionalProperties":true,"default":{},"type":"object"},"end_date":{"format":"date","nullable":true,"type":"string"},"external_ref":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"pending_removal":{"default":false,"type":"boolean"},"source_user_name":{"nullable":true,"type":"string"},"start_date":{"format":"date","nullable":true,"type":"string"},"system":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"user":{"additionalProperties":true,"nullable":true,"type":"object"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"title":"Grant","type":"object"},"GrantDataStructure":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"nullable":true,"type":"string"},"system":{"nullable":true,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"system_id":{"nullable":true,"type":"integer"},"type":{"nullable":true,"type":"string"}},"title":"GrantDataStructure","type":"object"},"GrantDataStructureVersion":{"additionalProperties":true,"properties":{"ancestry":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"path":{"items":{"type":"integer"},"nullable":true,"type":"array"},"version":{"nullable":true,"type":"integer"}},"title":"GrantDataStructureVersion","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get available grant filters

> Returns available grant filters for the caller based on permissions and provided search criteria.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_filters/search":{"post":{"description":"Returns available grant filters for the caller based on permissions and provided search criteria.","operationId":"TdDdWeb.GrantFilterController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantSearchRequest"}}},"description":"Grant filter request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantFilterResponse"}}},"description":"Available filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get available grant filters","tags":["Grants"]}}},"components":{"schemas":{"GrantSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"type":"object"},"page":{"default":0,"type":"integer"},"query":{"nullable":true,"type":"string"},"scroll":{"nullable":true,"type":"string"},"scroll_id":{"nullable":true,"type":"string"},"size":{"default":20,"type":"integer"},"sort":{"nullable":true,"type":"string"}},"title":"GrantSearchRequest","type":"object"},"GrantFilterResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"GrantFilterResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get grant by ID

> Retrieves the grant with the given ID, including allowed actions for the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/{id}":{"get":{"description":"Retrieves the grant with the given ID, including allowed actions for the current user.","operationId":"TdDdWeb.GrantController.show","parameters":[{"description":"Grant ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantShowResponse"}}},"description":"Grant retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get grant by ID","tags":["Grants"]}}},"components":{"schemas":{"GrantShowResponse":{"additionalProperties":false,"properties":{"_actions":{"$ref":"#/components/schemas/GrantActions"},"data":{"$ref":"#/components/schemas/Grant"}},"required":["data"],"title":"GrantShowResponse","type":"object"},"GrantActions":{"additionalProperties":false,"description":"Available actions for grant resource","properties":{"manage_grant_removal":{"additionalProperties":false,"default":{},"type":"object"},"manage_grant_removal_request":{"additionalProperties":false,"default":{},"type":"object"},"update":{"additionalProperties":false,"default":{},"type":"object"}},"title":"GrantActions","type":"object"},"Grant":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/GrantDataStructure"},"data_structure_version":{"$ref":"#/components/schemas/GrantDataStructureVersion"},"detail":{"additionalProperties":true,"default":{},"type":"object"},"end_date":{"format":"date","nullable":true,"type":"string"},"external_ref":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"pending_removal":{"default":false,"type":"boolean"},"source_user_name":{"nullable":true,"type":"string"},"start_date":{"format":"date","nullable":true,"type":"string"},"system":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"user":{"additionalProperties":true,"nullable":true,"type":"object"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"title":"Grant","type":"object"},"GrantDataStructure":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"nullable":true,"type":"string"},"system":{"nullable":true,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"system_id":{"nullable":true,"type":"integer"},"type":{"nullable":true,"type":"string"}},"title":"GrantDataStructure","type":"object"},"GrantDataStructureVersion":{"additionalProperties":true,"properties":{"ancestry":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"path":{"items":{"type":"integer"},"nullable":true,"type":"array"},"version":{"nullable":true,"type":"integer"}},"title":"GrantDataStructureVersion","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update grant

> Updates the specified grant using the provided action or grant payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/{id}":{"put":{"description":"Updates the specified grant using the provided action or grant payload.","operationId":"TdDdWeb.GrantController.update","parameters":[{"description":"Grant ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantUpdateRequest"}}},"description":"Grant update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantUpdateResponse"}}},"description":"Grant updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update grant","tags":["Grants"]}}},"components":{"schemas":{"GrantUpdateRequest":{"additionalProperties":false,"properties":{"action":{"description":"Action to perform (optional, when action instead of grant update)","enum":["mark_pending_removal","unmark_pending_removal","set_removed"],"type":"string"},"grant":{"additionalProperties":false,"description":"Grant attributes to update","properties":{"detail":{"additionalProperties":true,"description":"Additional details (optional)","type":"object"},"end_date":{"description":"Grant end date (optional)","format":"date","type":"string"},"source_user_name":{"description":"Source user name (optional)","type":"string"},"start_date":{"description":"Grant start date (optional)","format":"date","type":"string"},"user_id":{"description":"User ID (optional)","type":"integer"}},"type":"object"}},"title":"GrantUpdateRequest","type":"object"},"GrantUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Grant"}},"required":["data"],"title":"GrantUpdateResponse","type":"object"},"Grant":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/GrantDataStructure"},"data_structure_version":{"$ref":"#/components/schemas/GrantDataStructureVersion"},"detail":{"additionalProperties":true,"default":{},"type":"object"},"end_date":{"format":"date","nullable":true,"type":"string"},"external_ref":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"pending_removal":{"default":false,"type":"boolean"},"source_user_name":{"nullable":true,"type":"string"},"start_date":{"format":"date","nullable":true,"type":"string"},"system":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"user":{"additionalProperties":true,"nullable":true,"type":"object"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"title":"Grant","type":"object"},"GrantDataStructure":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"nullable":true,"type":"string"},"system":{"nullable":true,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"system_id":{"nullable":true,"type":"integer"},"type":{"nullable":true,"type":"string"}},"title":"GrantDataStructure","type":"object"},"GrantDataStructureVersion":{"additionalProperties":true,"properties":{"ancestry":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"path":{"items":{"type":"integer"},"nullable":true,"type":"array"},"version":{"nullable":true,"type":"integer"}},"title":"GrantDataStructureVersion","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete grant

> Deletes the grant identified by the given ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/{id}":{"delete":{"description":"Deletes the grant identified by the given ID.","operationId":"TdDdWeb.GrantController.delete","parameters":[{"description":"Grant ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Grant deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete grant","tags":["Grants"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update grant

> Updates the specified grant using the provided action or grant payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/{id}":{"patch":{"description":"Updates the specified grant using the provided action or grant payload.","operationId":"TdDdWeb.GrantController.update (2)","parameters":[{"description":"Grant ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantUpdateRequest"}}},"description":"Grant update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantUpdateResponse"}}},"description":"Grant updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update grant","tags":["Grants"]}}},"components":{"schemas":{"GrantUpdateRequest":{"additionalProperties":false,"properties":{"action":{"description":"Action to perform (optional, when action instead of grant update)","enum":["mark_pending_removal","unmark_pending_removal","set_removed"],"type":"string"},"grant":{"additionalProperties":false,"description":"Grant attributes to update","properties":{"detail":{"additionalProperties":true,"description":"Additional details (optional)","type":"object"},"end_date":{"description":"Grant end date (optional)","format":"date","type":"string"},"source_user_name":{"description":"Source user name (optional)","type":"string"},"start_date":{"description":"Grant start date (optional)","format":"date","type":"string"},"user_id":{"description":"User ID (optional)","type":"integer"}},"type":"object"}},"title":"GrantUpdateRequest","type":"object"},"GrantUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Grant"}},"required":["data"],"title":"GrantUpdateResponse","type":"object"},"Grant":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/GrantDataStructure"},"data_structure_version":{"$ref":"#/components/schemas/GrantDataStructureVersion"},"detail":{"additionalProperties":true,"default":{},"type":"object"},"end_date":{"format":"date","nullable":true,"type":"string"},"external_ref":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"pending_removal":{"default":false,"type":"boolean"},"source_user_name":{"nullable":true,"type":"string"},"start_date":{"format":"date","nullable":true,"type":"string"},"system":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"user":{"additionalProperties":true,"nullable":true,"type":"object"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"title":"Grant","type":"object"},"GrantDataStructure":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"nullable":true,"type":"string"},"system":{"nullable":true,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"system_id":{"nullable":true,"type":"integer"},"type":{"nullable":true,"type":"string"}},"title":"GrantDataStructure","type":"object"},"GrantDataStructureVersion":{"additionalProperties":true,"properties":{"ancestry":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"path":{"items":{"type":"integer"},"nullable":true,"type":"array"},"version":{"nullable":true,"type":"integer"}},"title":"GrantDataStructureVersion","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Reindex all grants

> Schedules a full reindex of grants and returns 202 Accepted when the job is enqueued.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/search/reindex_all":{"get":{"description":"Schedules a full reindex of grants and returns 202 Accepted when the job is enqueued.","operationId":"TdDdWeb.GrantSearchController.reindex_all_grants","parameters":[],"responses":{"202":{"description":"Reindexing accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Reindex all grants","tags":["Grants"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get available grant filters for current user

> Returns available grant filters for grants associated with the current user, based on their permissions and provided search criteria.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_filters/search/mine":{"post":{"description":"Returns available grant filters for grants associated with the current user, based on their permissions and provided search criteria.","operationId":"TdDdWeb.GrantFilterController.search_mine","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantSearchRequest"}}},"description":"Grant filter request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantFilterResponse"}}},"description":"Available filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get available grant filters for current user","tags":["Grants"]}}},"components":{"schemas":{"GrantSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"type":"object"},"page":{"default":0,"type":"integer"},"query":{"nullable":true,"type":"string"},"scroll":{"nullable":true,"type":"string"},"scroll_id":{"nullable":true,"type":"string"},"size":{"default":20,"type":"integer"},"sort":{"nullable":true,"type":"string"}},"title":"GrantSearchRequest","type":"object"},"GrantFilterResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"GrantFilterResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List all active grants

> Returns all active grants visible to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants":{"get":{"description":"Returns all active grants visible to the current user.","operationId":"TdDdWeb.GrantController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantListResponse"}}},"description":"List of grants"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List all active grants","tags":["Grants"]}}},"components":{"schemas":{"GrantListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Grant"},"type":"array"}},"required":["data"],"title":"GrantListResponse","type":"object"},"Grant":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/GrantDataStructure"},"data_structure_version":{"$ref":"#/components/schemas/GrantDataStructureVersion"},"detail":{"additionalProperties":true,"default":{},"type":"object"},"end_date":{"format":"date","nullable":true,"type":"string"},"external_ref":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"pending_removal":{"default":false,"type":"boolean"},"source_user_name":{"nullable":true,"type":"string"},"start_date":{"format":"date","nullable":true,"type":"string"},"system":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"user":{"additionalProperties":true,"nullable":true,"type":"object"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"title":"Grant","type":"object"},"GrantDataStructure":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"nullable":true,"type":"string"},"system":{"nullable":true,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"system_id":{"nullable":true,"type":"integer"},"type":{"nullable":true,"type":"string"}},"title":"GrantDataStructure","type":"object"},"GrantDataStructureVersion":{"additionalProperties":true,"properties":{"ancestry":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"path":{"items":{"type":"integer"},"nullable":true,"type":"array"},"version":{"nullable":true,"type":"integer"}},"title":"GrantDataStructureVersion","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Bulk create, update and delete grants

> Accepts a bulk grants payload. Supports 'add', 'update' and 'remove' operations. Each operation is processed independently: the endpoint always responds with 200 and reports per-item failures in the \`errors\` array rather than failing the whole batch.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants_bulk":{"put":{"description":"Accepts a bulk grants payload. Supports 'add', 'update' and 'remove' operations. Each operation is processed independently: the endpoint always responds with 200 and reports per-item failures in the `errors` array rather than failing the whole batch.","operationId":"TdDdWeb.GrantsController.update","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantsBulkUpdateRequest"}}},"description":"Grants bulk update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantsBulkUpdateResponse"}}},"description":"Grants processed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk create, update and delete grants","tags":["Grants"]}}},"components":{"schemas":{"GrantsBulkUpdateRequest":{"additionalProperties":false,"properties":{"grants":{"items":{"additionalProperties":false,"properties":{"data_structure_external_id":{"description":"External ID of the data structure (for 'add' operation)","type":"string"},"detail":{"additionalProperties":true,"default":{},"description":"Additional details","type":"object"},"end_date":{"description":"End date YYYY-MM-DD (for 'add' and 'update' operations)","format":"date","type":"string"},"id":{"description":"Grant ID (required for 'update' and 'remove' operations)","type":"integer"},"op":{"description":"Operation type: 'add', 'update', 'remove'","enum":["add","update","remove"],"type":"string"},"source_user_name":{"description":"Source user name (for 'add' operation)","type":"string"},"start_date":{"description":"Start date YYYY-MM-DD (for 'add' and 'update' operations)","format":"date","type":"string"},"user_id":{"description":"User ID (for 'add' operation)","type":"integer"}},"type":"object"},"type":"array"}},"required":["grants"],"title":"GrantsBulkUpdateRequest","type":"object"},"GrantsBulkUpdateResponse":{"additionalProperties":false,"properties":{"created_ids":{"description":"IDs of grants created by 'add' operations","items":{"type":"integer"},"type":"array"},"errors":{"description":"List of errors for failed operations","items":{"additionalProperties":true,"description":"Error details","type":"object"},"type":"array"},"ids":{"description":"IDs of all successfully processed grants (created, updated and removed combined)","items":{"type":"integer"},"type":"array"},"removed_ids":{"description":"IDs of grants deleted by 'remove' operations","items":{"type":"integer"},"type":"array"},"updated_ids":{"description":"IDs of grants modified by 'update' operations","items":{"type":"integer"},"type":"array"}},"required":["ids","created_ids","updated_ids","removed_ids","errors"],"title":"GrantsBulkUpdateResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Bulk create, update and delete grants

> Accepts a bulk grants payload. Supports 'add', 'update' and 'remove' operations. Each operation is processed independently: the endpoint always responds with 200 and reports per-item failures in the \`errors\` array rather than failing the whole batch.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants_bulk":{"patch":{"description":"Accepts a bulk grants payload. Supports 'add', 'update' and 'remove' operations. Each operation is processed independently: the endpoint always responds with 200 and reports per-item failures in the `errors` array rather than failing the whole batch.","operationId":"TdDdWeb.GrantsController.update (2)","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantsBulkUpdateRequest"}}},"description":"Grants bulk update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantsBulkUpdateResponse"}}},"description":"Grants processed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk create, update and delete grants","tags":["Grants"]}}},"components":{"schemas":{"GrantsBulkUpdateRequest":{"additionalProperties":false,"properties":{"grants":{"items":{"additionalProperties":false,"properties":{"data_structure_external_id":{"description":"External ID of the data structure (for 'add' operation)","type":"string"},"detail":{"additionalProperties":true,"default":{},"description":"Additional details","type":"object"},"end_date":{"description":"End date YYYY-MM-DD (for 'add' and 'update' operations)","format":"date","type":"string"},"id":{"description":"Grant ID (required for 'update' and 'remove' operations)","type":"integer"},"op":{"description":"Operation type: 'add', 'update', 'remove'","enum":["add","update","remove"],"type":"string"},"source_user_name":{"description":"Source user name (for 'add' operation)","type":"string"},"start_date":{"description":"Start date YYYY-MM-DD (for 'add' and 'update' operations)","format":"date","type":"string"},"user_id":{"description":"User ID (for 'add' operation)","type":"integer"}},"type":"object"},"type":"array"}},"required":["grants"],"title":"GrantsBulkUpdateRequest","type":"object"},"GrantsBulkUpdateResponse":{"additionalProperties":false,"properties":{"created_ids":{"description":"IDs of grants created by 'add' operations","items":{"type":"integer"},"type":"array"},"errors":{"description":"List of errors for failed operations","items":{"additionalProperties":true,"description":"Error details","type":"object"},"type":"array"},"ids":{"description":"IDs of all successfully processed grants (created, updated and removed combined)","items":{"type":"integer"},"type":"array"},"removed_ids":{"description":"IDs of grants deleted by 'remove' operations","items":{"type":"integer"},"type":"array"},"updated_ids":{"description":"IDs of grants modified by 'update' operations","items":{"type":"integer"},"type":"array"}},"required":["ids","created_ids","updated_ids","removed_ids","errors"],"title":"GrantsBulkUpdateResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search grants by permissions

> Searches grants using the provided criteria and returns results filtered by the current user's permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/search":{"post":{"description":"Searches grants using the provided criteria and returns results filtered by the current user's permissions.","operationId":"TdDdWeb.GrantSearchController.search_grants","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantSearchRequest"}}},"description":"Grant search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantSearchResponse"}}},"description":"Grant search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search grants by permissions","tags":["Grants"]}}},"components":{"schemas":{"GrantSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"type":"object"},"page":{"default":0,"type":"integer"},"query":{"nullable":true,"type":"string"},"scroll":{"nullable":true,"type":"string"},"scroll_id":{"nullable":true,"type":"string"},"size":{"default":20,"type":"integer"},"sort":{"nullable":true,"type":"string"}},"title":"GrantSearchRequest","type":"object"},"GrantSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Grant"},"type":"array"},"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"scroll_id":{"nullable":true,"type":"string"}},"title":"GrantSearchResponse","type":"object"},"Grant":{"additionalProperties":false,"properties":{"data_structure":{"$ref":"#/components/schemas/GrantDataStructure"},"data_structure_version":{"$ref":"#/components/schemas/GrantDataStructureVersion"},"detail":{"additionalProperties":true,"default":{},"type":"object"},"end_date":{"format":"date","nullable":true,"type":"string"},"external_ref":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"pending_removal":{"default":false,"type":"boolean"},"source_user_name":{"nullable":true,"type":"string"},"start_date":{"format":"date","nullable":true,"type":"string"},"system":{"additionalProperties":true,"nullable":true,"type":"object"},"updated_at":{"format":"date-time","type":"string"},"user":{"additionalProperties":true,"nullable":true,"type":"object"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"title":"Grant","type":"object"},"GrantDataStructure":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"nullable":true,"type":"string"},"system":{"nullable":true,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"system_id":{"nullable":true,"type":"integer"},"type":{"nullable":true,"type":"string"}},"title":"GrantDataStructure","type":"object"},"GrantDataStructureVersion":{"additionalProperties":true,"properties":{"ancestry":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"},"path":{"items":{"type":"integer"},"nullable":true,"type":"array"},"version":{"nullable":true,"type":"integer"}},"title":"GrantDataStructureVersion","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Download grants as XLSX

> Generates an XLSX file containing grant data matching the request filters.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grants/xlsx/download":{"post":{"description":"Generates an XLSX file containing grant data matching the request filters.","operationId":"TdDdWeb.GrantController.download","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantsDownloadRequest"}}},"description":"Grant download request","required":false},"responses":{"200":{"content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"format":"binary","type":"string"}}},"description":"XLSX file downloaded"},"204":{"description":"No grants available for download"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download grants as XLSX","tags":["Grants"]}}},"components":{"schemas":{"GrantsDownloadRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"type":"object"},"header_labels":{"additionalProperties":{"type":"string"},"type":"object"},"page":{"type":"integer"},"search_by":{"enum":["permissions","user"],"type":"string"},"size":{"type":"integer"}},"required":["search_by","header_labels"],"title":"GrantsDownloadRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Reference Data

## Get reference dataset

> Retrieves the reference dataset with the specified ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/reference_data/{id}":{"get":{"description":"Retrieves the reference dataset with the specified ID.","operationId":"TdDdWeb.ReferenceDataController.show","parameters":[{"description":"Reference dataset ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceDataShowResponse"}}},"description":"Reference dataset retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get reference dataset","tags":["Reference Data"]}}},"components":{"schemas":{"ReferenceDataShowResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"domain_ids":{"items":{"type":"integer"},"type":"array"},"headers":{"items":{"type":"string"},"nullable":true,"type":"array"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"row_count":{"type":"integer"},"rows":{"items":{"items":{"type":"string"},"type":"array"},"nullable":true,"type":"array"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name","domain_ids","row_count"],"type":"object"}},"required":["data"],"title":"ReferenceDataShowResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update reference dataset

> Updates the specified reference dataset with a new file, name, or domain assignments.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/reference_data/{id}":{"put":{"description":"Updates the specified reference dataset with a new file, name, or domain assignments.","operationId":"TdDdWeb.ReferenceDataController.update","parameters":[{"description":"Reference dataset ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReferenceDataUpdateRequest"}}},"description":"Reference dataset payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceDataUpdateResponse"}}},"description":"Reference dataset updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update reference dataset","tags":["Reference Data"]}}},"components":{"schemas":{"ReferenceDataUpdateRequest":{"additionalProperties":false,"properties":{"dataset":{"description":"CSV file content","format":"binary","nullable":true,"type":"string"},"domain_ids":{"description":"Domain IDs to associate with the dataset","items":{"type":"integer"},"nullable":true,"type":"array"},"name":{"description":"Dataset name","nullable":true,"type":"string"}},"title":"ReferenceDataUpdateRequest","type":"object"},"ReferenceDataUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ReferenceDataResource"}},"required":["data"],"title":"ReferenceDataUpdateResponse","type":"object"},"ReferenceDataResource":{"additionalProperties":false,"properties":{"domain_ids":{"description":"Domain IDs","items":{"type":"integer"},"type":"array"},"headers":{"description":"CSV headers","items":{"type":"string"},"nullable":true,"type":"array"},"id":{"description":"Reference dataset ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Dataset name","type":"string"},"row_count":{"description":"Number of rows in the dataset","type":"integer"},"rows":{"description":"Dataset rows as arrays of strings","items":{"items":{"type":"string"},"type":"array"},"nullable":true,"type":"array"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name","row_count"],"title":"ReferenceDataResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete reference dataset

> Deletes the specified reference dataset.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/reference_data/{id}":{"delete":{"description":"Deletes the specified reference dataset.","operationId":"TdDdWeb.ReferenceDataController.delete","parameters":[{"description":"Reference dataset ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Reference dataset deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete reference dataset","tags":["Reference Data"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update reference dataset

> Updates the specified reference dataset with a new file, name, or domain assignments.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/reference_data/{id}":{"patch":{"description":"Updates the specified reference dataset with a new file, name, or domain assignments.","operationId":"TdDdWeb.ReferenceDataController.update (2)","parameters":[{"description":"Reference dataset ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReferenceDataUpdateRequest"}}},"description":"Reference dataset payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceDataUpdateResponse"}}},"description":"Reference dataset updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update reference dataset","tags":["Reference Data"]}}},"components":{"schemas":{"ReferenceDataUpdateRequest":{"additionalProperties":false,"properties":{"dataset":{"description":"CSV file content","format":"binary","nullable":true,"type":"string"},"domain_ids":{"description":"Domain IDs to associate with the dataset","items":{"type":"integer"},"nullable":true,"type":"array"},"name":{"description":"Dataset name","nullable":true,"type":"string"}},"title":"ReferenceDataUpdateRequest","type":"object"},"ReferenceDataUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ReferenceDataResource"}},"required":["data"],"title":"ReferenceDataUpdateResponse","type":"object"},"ReferenceDataResource":{"additionalProperties":false,"properties":{"domain_ids":{"description":"Domain IDs","items":{"type":"integer"},"type":"array"},"headers":{"description":"CSV headers","items":{"type":"string"},"nullable":true,"type":"array"},"id":{"description":"Reference dataset ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Dataset name","type":"string"},"row_count":{"description":"Number of rows in the dataset","type":"integer"},"rows":{"description":"Dataset rows as arrays of strings","items":{"items":{"type":"string"},"type":"array"},"nullable":true,"type":"array"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name","row_count"],"title":"ReferenceDataResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List reference datasets

> Returns reference datasets visible to the current user, filtered by permitted domain IDs.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/reference_data":{"get":{"description":"Returns reference datasets visible to the current user, filtered by permitted domain IDs.","operationId":"TdDdWeb.ReferenceDataController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceDataIndexResponse"}}},"description":"Reference datasets retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List reference datasets","tags":["Reference Data"]}}},"components":{"schemas":{"ReferenceDataIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of reference datasets","items":{"$ref":"#/components/schemas/ReferenceDataResource"},"type":"array"}},"required":["data"],"title":"ReferenceDataIndexResponse","type":"object"},"ReferenceDataResource":{"additionalProperties":false,"properties":{"domain_ids":{"description":"Domain IDs","items":{"type":"integer"},"type":"array"},"headers":{"description":"CSV headers","items":{"type":"string"},"nullable":true,"type":"array"},"id":{"description":"Reference dataset ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Dataset name","type":"string"},"row_count":{"description":"Number of rows in the dataset","type":"integer"},"rows":{"description":"Dataset rows as arrays of strings","items":{"items":{"type":"string"},"type":"array"},"nullable":true,"type":"array"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name","row_count"],"title":"ReferenceDataResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create reference dataset

> Creates a new reference dataset using uploaded data and associated metadata.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/reference_data":{"post":{"description":"Creates a new reference dataset using uploaded data and associated metadata.","operationId":"TdDdWeb.ReferenceDataController.create","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/ReferenceDataCreateRequest"}}},"description":"Reference dataset payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ReferenceDataCreateResponse"}}},"description":"Reference dataset created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create reference dataset","tags":["Reference Data"]}}},"components":{"schemas":{"ReferenceDataCreateRequest":{"additionalProperties":false,"properties":{"dataset":{"description":"CSV file content","format":"binary","type":"string"},"domain_ids":{"description":"Domain IDs to associate with the dataset","items":{"type":"integer"},"type":"array"},"name":{"description":"Dataset name","type":"string"}},"required":["dataset","name","domain_ids"],"title":"ReferenceDataCreateRequest","type":"object"},"ReferenceDataCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ReferenceDataResource"}},"required":["data"],"title":"ReferenceDataCreateResponse","type":"object"},"ReferenceDataResource":{"additionalProperties":false,"properties":{"domain_ids":{"description":"Domain IDs","items":{"type":"integer"},"type":"array"},"headers":{"description":"CSV headers","items":{"type":"string"},"nullable":true,"type":"array"},"id":{"description":"Reference dataset ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Dataset name","type":"string"},"row_count":{"description":"Number of rows in the dataset","type":"integer"},"rows":{"description":"Dataset rows as arrays of strings","items":{"items":{"type":"string"},"type":"array"},"nullable":true,"type":"array"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name","row_count"],"title":"ReferenceDataResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Download reference dataset as CSV

> Downloads the specified reference dataset as a CSV attachment.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/reference_data/{reference_data_id}/csv":{"get":{"description":"Downloads the specified reference dataset as a CSV attachment.","operationId":"TdDdWeb.ReferenceDataDownloadController.show","parameters":[{"description":"Reference dataset ID","in":"path","name":"reference_data_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"text/csv":{"schema":{"format":"binary","type":"string"}}},"description":"CSV file"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download reference dataset as CSV","tags":["Reference Data"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Structure Notes

## Create structure note by external data structure id

> Creates a structure note for the specified external data structure ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_notes":{"post":{"description":"Creates a structure note for the specified external data structure ID.","operationId":"TdDdWeb.StructureNoteController.create_by_external_id","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteCreateByExternalIdRequest"}}},"description":"Structure note create payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteResponse"}}},"description":"Structure note created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create structure note by external data structure id","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteCreateByExternalIdRequest":{"additionalProperties":false,"properties":{"structure_note":{"additionalProperties":false,"properties":{"data_structure_external_id":{"description":"External ID of the data structure","type":"string"},"df_content":{"additionalProperties":true,"description":"Note content (dynamic based on template)","type":"object"},"domain_ids":{"description":"Domain IDs (virtual field, ignored)","items":{"type":"integer"},"nullable":true,"type":"array"},"resource":{"additionalProperties":true,"description":"Resource metadata (virtual field, ignored)","nullable":true,"type":"object"},"status":{"description":"Status (virtual field, ignored)","enum":["draft","pending_approval","rejected","published","versioned","deprecated"],"nullable":true,"type":"string"},"version":{"description":"Version number (virtual field, assigned automatically)","nullable":true,"type":"integer"}},"required":["data_structure_external_id","df_content"],"type":"object"}},"required":["structure_note"],"title":"StructureNoteCreateByExternalIdRequest","type":"object"},"StructureNoteResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions for the structure","nullable":true,"type":"object"},"data":{"$ref":"#/components/schemas/StructureNoteResource"}},"required":["data"],"title":"StructureNoteResponse","type":"object"},"StructureNoteResource":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"_diff":{"description":"Fields changed in draft","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_external_id":{"description":"Data structure external ID","nullable":true,"type":"string"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"df_content":{"additionalProperties":true,"description":"Displayable content (flattened)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Raw content with metadata","nullable":true,"type":"object"},"id":{"description":"Note ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","nullable":true,"type":"string"},"status":{"description":"Status of the note","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"template_id":{"description":"Template ID","nullable":true,"type":"integer"},"updated_at":{"description":"Last update timestamp","nullable":true,"type":"string"},"version":{"description":"Version number","type":"integer"}},"required":["id","status","version"],"title":"StructureNoteResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get note suggestions

> Returns AI-generated note suggestions for the specified data structure.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/note_suggestions":{"get":{"description":"Returns AI-generated note suggestions for the specified data structure.","operationId":"TdDdWeb.StructureNoteController.note_suggestions","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}},{"description":"Language for suggestions (e.g., 'en', 'es')","in":"query","name":"language","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteSuggestionsResponse"}}},"description":"Suggestions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get note suggestions","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteSuggestionsResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Map of field names to suggested values","type":"object"}},"required":["data"],"title":"StructureNoteSuggestionsResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search structure notes

> Searches structure notes using the provided filters and returns matching results.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_notes/search":{"post":{"description":"Searches structure notes using the provided filters and returns matching results.","operationId":"TdDdWeb.StructureNoteController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteSearchRequest"}}},"description":"Structure note search filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteSearchResponse"}}},"description":"Structure note search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search structure notes","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteSearchRequest":{"additionalProperties":false,"properties":{"data_structure_id":{"description":"Filter by data structure ID","nullable":true,"type":"integer"},"query":{"description":"Search query text","nullable":true,"type":"string"},"size":{"description":"Number of results per page","maximum":100,"minimum":1,"nullable":true,"type":"integer"},"status":{"description":"Filter by status","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"nullable":true,"type":"string"},"system_id":{"description":"Filter by system ID","nullable":true,"type":"integer"},"until":{"description":"Filter by update timestamp (upper bound)","nullable":true,"type":"string"},"updated_at":{"description":"Filter by update timestamp","nullable":true,"type":"string"}},"title":"StructureNoteSearchRequest","type":"object"},"StructureNoteSearchResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of structure notes matching the search","items":{"$ref":"#/components/schemas/StructureNoteResource"},"type":"array"}},"required":["data"],"title":"StructureNoteSearchResponse","type":"object"},"StructureNoteResource":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"_diff":{"description":"Fields changed in draft","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_external_id":{"description":"Data structure external ID","nullable":true,"type":"string"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"df_content":{"additionalProperties":true,"description":"Displayable content (flattened)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Raw content with metadata","nullable":true,"type":"object"},"id":{"description":"Note ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","nullable":true,"type":"string"},"status":{"description":"Status of the note","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"template_id":{"description":"Template ID","nullable":true,"type":"integer"},"updated_at":{"description":"Last update timestamp","nullable":true,"type":"string"},"version":{"description":"Version number","type":"integer"}},"required":["id","status","version"],"title":"StructureNoteResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List structure notes

> Lists all structure notes for the specified data structure and includes available actions for the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/notes":{"get":{"description":"Lists all structure notes for the specified data structure and includes available actions for the current user.","operationId":"TdDdWeb.StructureNoteController.index","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteIndexResponse"}}},"description":"Structure notes"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List structure notes","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteIndexResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":{"$ref":"#/components/schemas/StructureNoteAction"},"description":"Available actions for the structure","nullable":true,"type":"object"},"data":{"description":"List of structure notes","items":{"$ref":"#/components/schemas/StructureNoteResource"},"type":"array"}},"required":["data"],"title":"StructureNoteIndexResponse","type":"object"},"StructureNoteAction":{"additionalProperties":false,"properties":{"href":{"description":"Action URL","type":"string"},"id":{"description":"Note ID","nullable":true,"type":"integer"},"input":{"additionalProperties":true,"description":"Required input for the action","nullable":true,"type":"object"},"method":{"description":"HTTP method","enum":["POST","GET","PATCH","DELETE"],"type":"string"}},"required":["href","method"],"title":"StructureNoteAction","type":"object"},"StructureNoteResource":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"_diff":{"description":"Fields changed in draft","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_external_id":{"description":"Data structure external ID","nullable":true,"type":"string"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"df_content":{"additionalProperties":true,"description":"Displayable content (flattened)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Raw content with metadata","nullable":true,"type":"object"},"id":{"description":"Note ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","nullable":true,"type":"string"},"status":{"description":"Status of the note","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"template_id":{"description":"Template ID","nullable":true,"type":"integer"},"updated_at":{"description":"Last update timestamp","nullable":true,"type":"string"},"version":{"description":"Version number","type":"integer"}},"required":["id","status","version"],"title":"StructureNoteResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create structure note

> Creates a new structure note for the specified data structure.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/notes":{"post":{"description":"Creates a new structure note for the specified data structure.","operationId":"TdDdWeb.StructureNoteController.create","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteCreateRequest"}}},"description":"Structure note","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteResponse"}}},"description":"Structure note"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DDUnprocessableEntityVariableResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create structure note","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteCreateRequest":{"additionalProperties":false,"properties":{"structure_note":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"description":"Note content (dynamic based on template)","type":"object"},"domain_ids":{"description":"Domain IDs (virtual field, ignored in creation)","items":{"type":"integer"},"nullable":true,"type":"array"},"resource":{"additionalProperties":true,"description":"Resource metadata (virtual field, ignored)","nullable":true,"type":"object"},"status":{"description":"Status (virtual field, ignored in creation)","enum":["draft","pending_approval","rejected","published","versioned","deprecated"],"nullable":true,"type":"string"},"version":{"description":"Version number (virtual field, assigned automatically)","nullable":true,"type":"integer"}},"required":["df_content"],"type":"object"}},"required":["structure_note"],"title":"StructureNoteCreateRequest","type":"object"},"StructureNoteResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions for the structure","nullable":true,"type":"object"},"data":{"$ref":"#/components/schemas/StructureNoteResource"}},"required":["data"],"title":"StructureNoteResponse","type":"object"},"StructureNoteResource":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"_diff":{"description":"Fields changed in draft","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_external_id":{"description":"Data structure external ID","nullable":true,"type":"string"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"df_content":{"additionalProperties":true,"description":"Displayable content (flattened)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Raw content with metadata","nullable":true,"type":"object"},"id":{"description":"Note ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","nullable":true,"type":"string"},"status":{"description":"Status of the note","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"template_id":{"description":"Template ID","nullable":true,"type":"integer"},"updated_at":{"description":"Last update timestamp","nullable":true,"type":"string"},"version":{"description":"Version number","type":"integer"}},"required":["id","status","version"],"title":"StructureNoteResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"DDUnprocessableEntityVariableResponse":{"description":"Response for 422 errors. Error messages might have different formats","oneOf":[{"$ref":"#/components/schemas/TdDdUnprocessableEntityStringResponse"},{"$ref":"#/components/schemas/TdDdUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}],"title":"DDUnprocessableEntityVariableResponse"},"TdDdUnprocessableEntityStringResponse":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"}},"title":"TdDdUnprocessableEntityStringResponse","type":"object"},"TdDdUnprocessableEntityArrayResponse":{"additionalProperties":false,"properties":{"error":{"items":{"type":"string"},"type":"array"},"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdDdUnprocessableEntityArrayResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Show structure note

> Retrieves the specified structure note and returns its details.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/notes/{id}":{"get":{"description":"Retrieves the specified structure note and returns its details.","operationId":"TdDdWeb.StructureNoteController.show","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}},{"description":"Structure note ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteResponse"}}},"description":"Structure note"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show structure note","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions for the structure","nullable":true,"type":"object"},"data":{"$ref":"#/components/schemas/StructureNoteResource"}},"required":["data"],"title":"StructureNoteResponse","type":"object"},"StructureNoteResource":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"_diff":{"description":"Fields changed in draft","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_external_id":{"description":"Data structure external ID","nullable":true,"type":"string"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"df_content":{"additionalProperties":true,"description":"Displayable content (flattened)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Raw content with metadata","nullable":true,"type":"object"},"id":{"description":"Note ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","nullable":true,"type":"string"},"status":{"description":"Status of the note","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"template_id":{"description":"Template ID","nullable":true,"type":"integer"},"updated_at":{"description":"Last update timestamp","nullable":true,"type":"string"},"version":{"description":"Version number","type":"integer"}},"required":["id","status","version"],"title":"StructureNoteResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update structure note

> Updates the specified structure note with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/notes/{id}":{"put":{"description":"Updates the specified structure note with the provided payload.","operationId":"TdDdWeb.StructureNoteController.update","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}},{"description":"Structure note ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteUpdateRequest"}}},"description":"Structure note update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteResponse"}}},"description":"Structure note updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update structure note","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteUpdateRequest":{"additionalProperties":false,"properties":{"structure_note":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"description":"Updated note content","nullable":true,"type":"object"},"status":{"description":"New status for the note","enum":["draft","pending_approval","published","rejected","deprecated"],"nullable":true,"type":"string"}},"type":"object"}},"required":["structure_note"],"title":"StructureNoteUpdateRequest","type":"object"},"StructureNoteResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions for the structure","nullable":true,"type":"object"},"data":{"$ref":"#/components/schemas/StructureNoteResource"}},"required":["data"],"title":"StructureNoteResponse","type":"object"},"StructureNoteResource":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"_diff":{"description":"Fields changed in draft","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_external_id":{"description":"Data structure external ID","nullable":true,"type":"string"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"df_content":{"additionalProperties":true,"description":"Displayable content (flattened)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Raw content with metadata","nullable":true,"type":"object"},"id":{"description":"Note ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","nullable":true,"type":"string"},"status":{"description":"Status of the note","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"template_id":{"description":"Template ID","nullable":true,"type":"integer"},"updated_at":{"description":"Last update timestamp","nullable":true,"type":"string"},"version":{"description":"Version number","type":"integer"}},"required":["id","status","version"],"title":"StructureNoteResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete structure note

> Deletes the specified structure note.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/notes/{id}":{"delete":{"description":"Deletes the specified structure note.","operationId":"TdDdWeb.StructureNoteController.delete","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}},{"description":"Structure note ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Structure note deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete structure note","tags":["Data Structure Notes"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update structure note

> Updates the specified structure note with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/notes/{id}":{"patch":{"description":"Updates the specified structure note with the provided payload.","operationId":"TdDdWeb.StructureNoteController.update (2)","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}},{"description":"Structure note ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteUpdateRequest"}}},"description":"Structure note update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/StructureNoteResponse"}}},"description":"Structure note updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update structure note","tags":["Data Structure Notes"]}}},"components":{"schemas":{"StructureNoteUpdateRequest":{"additionalProperties":false,"properties":{"structure_note":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"description":"Updated note content","nullable":true,"type":"object"},"status":{"description":"New status for the note","enum":["draft","pending_approval","published","rejected","deprecated"],"nullable":true,"type":"string"}},"type":"object"}},"required":["structure_note"],"title":"StructureNoteUpdateRequest","type":"object"},"StructureNoteResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions for the structure","nullable":true,"type":"object"},"data":{"$ref":"#/components/schemas/StructureNoteResource"}},"required":["data"],"title":"StructureNoteResponse","type":"object"},"StructureNoteResource":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"description":"Available actions","nullable":true,"type":"object"},"_diff":{"description":"Fields changed in draft","items":{"type":"string"},"nullable":true,"type":"array"},"data_structure_external_id":{"description":"Data structure external ID","nullable":true,"type":"string"},"data_structure_id":{"description":"Data structure ID","nullable":true,"type":"integer"},"df_content":{"additionalProperties":true,"description":"Displayable content (flattened)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Raw content with metadata","nullable":true,"type":"object"},"id":{"description":"Note ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","nullable":true,"type":"string"},"status":{"description":"Status of the note","enum":["draft","pending_approval","published","rejected","versioned","deprecated"],"type":"string"},"template_id":{"description":"Template ID","nullable":true,"type":"integer"},"updated_at":{"description":"Last update timestamp","nullable":true,"type":"string"},"version":{"description":"Version number","type":"integer"}},"required":["id","status","version"],"title":"StructureNoteResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Health Check

## Health check

> Simple health check endpoint that returns 'pong'

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/ping":{"get":{"description":"Simple health check endpoint that returns 'pong'","operationId":"TdDdWeb.PingController.ping","parameters":[],"responses":{"200":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"Service is reachable"}},"summary":"Health check","tags":["Health Check"]}}}}
```

## Echo payload

> Returns the same payload received in the request.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/echo":{"post":{"description":"Returns the same payload received in the request.","operationId":"TdDdWeb.EchoController.echo","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Echo payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Returns the same payload received in the request"}},"summary":"Echo payload","tags":["Health Check"]}}}}
```


# Systems

## Get system

> Retrieves the details of the specified system by ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{id}":{"get":{"description":"Retrieves the details of the specified system by ID.","operationId":"TdDdWeb.SystemController.show","parameters":[{"description":"System ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemResponse"}}},"description":"System details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get system","tags":["Systems"]}}},"components":{"schemas":{"SystemResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"type":"object"}},"required":["data"],"title":"SystemResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update system

> Updates the specified system with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{id}":{"put":{"description":"Updates the specified system with the provided payload.","operationId":"TdDdWeb.SystemController.update","parameters":[{"description":"System ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemUpdateRequest"}}},"description":"System update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemResponse"}}},"description":"System updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update system","tags":["Systems"]}}},"components":{"schemas":{"SystemUpdateRequest":{"additionalProperties":false,"properties":{"system":{"additionalProperties":true,"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"external_id":{"description":"External ID","nullable":true,"type":"string"},"name":{"description":"System name","nullable":true,"type":"string"}},"type":"object"}},"required":["system"],"title":"SystemUpdateRequest","type":"object"},"SystemResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"type":"object"}},"required":["data"],"title":"SystemResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete system

> Deletes the specified system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{id}":{"delete":{"description":"Deletes the specified system.","operationId":"TdDdWeb.SystemController.delete","parameters":[{"description":"System ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"System deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete system","tags":["Systems"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update system

> Updates the specified system with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{id}":{"patch":{"description":"Updates the specified system with the provided payload.","operationId":"TdDdWeb.SystemController.update (2)","parameters":[{"description":"System ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemUpdateRequest"}}},"description":"System update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemResponse"}}},"description":"System updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update system","tags":["Systems"]}}},"components":{"schemas":{"SystemUpdateRequest":{"additionalProperties":false,"properties":{"system":{"additionalProperties":true,"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"external_id":{"description":"External ID","nullable":true,"type":"string"},"name":{"description":"System name","nullable":true,"type":"string"}},"type":"object"}},"required":["system"],"title":"SystemUpdateRequest","type":"object"},"SystemResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"type":"object"}},"required":["data"],"title":"SystemResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete a system group

> Deletes the specified group from the given system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/groups/{id}":{"delete":{"description":"Deletes the specified group from the given system.","operationId":"TdDdWeb.GroupController.delete","parameters":[{"description":"System external ID","in":"path","name":"system_id","required":true,"schema":{"type":"string"}},{"description":"Group name","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Group deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a system group","tags":["Systems"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List groups for a system

> Returns groups available within the specified system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/groups":{"get":{"description":"Returns groups available within the specified system.","operationId":"TdDdWeb.GroupController.index","parameters":[{"description":"System external ID","in":"path","name":"system_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GroupListResponse"}}},"description":"Group list response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List groups for a system","tags":["Systems"]}}},"components":{"schemas":{"GroupListResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of group names for the system","items":{"type":"string"},"type":"array"}},"required":["data"],"title":"GroupListResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List systems

> Returns systems matching the provided search filters and user permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems":{"get":{"description":"Returns systems matching the provided search filters and user permissions.","operationId":"TdDdWeb.SystemController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemListResponse"}}},"description":"System list response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List systems","tags":["Systems"]}}},"components":{"schemas":{"SystemListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Dynamic content with metadata","nullable":true,"type":"object"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"structures_count":{"additionalProperties":false,"nullable":true,"properties":{"count":{"type":"integer"},"types":{"items":{"additionalProperties":false,"properties":{"count":{"type":"integer"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"type":"object"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"type":"object"},"type":"array"}},"required":["data"],"title":"SystemListResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create system

> Creates a new system with the provided data.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems":{"post":{"description":"Creates a new system with the provided data.","operationId":"TdDdWeb.SystemController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemCreateRequest"}}},"description":"System create payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemResponse"}}},"description":"System created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create system","tags":["Systems"]}}},"components":{"schemas":{"SystemCreateRequest":{"additionalProperties":false,"properties":{"system":{"additionalProperties":true,"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content (template fields)","nullable":true,"type":"object"},"external_id":{"description":"Unique external ID","type":"string"},"name":{"description":"System name","type":"string"}},"required":["name","external_id"],"type":"object"}},"required":["system"],"title":"SystemCreateRequest","type":"object"},"SystemResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"deleted_at":{"format":"date-time","nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"type":"object"}},"required":["data"],"title":"SystemResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create or upload metadata for a system

> Uploads or creates metadata for the specified system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/metadata":{"post":{"description":"Uploads or creates metadata for the specified system.","operationId":"TdDdWeb.SystemMetadataController.create","parameters":[{"description":"System external ID","in":"path","name":"system_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetadataUploadRequest"}},"multipart/form-data":{"schema":{"$ref":"#/components/schemas/SystemMetadataUploadRequest"}}},"description":"System metadata payload","required":false},"responses":{"202":{"description":"Metadata accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create or upload metadata for a system","tags":["Systems"]}}},"components":{"schemas":{"SystemMetadataUploadRequest":{"additionalProperties":false,"properties":{"data_fields":{"description":"CSV file with field metadata","format":"binary","nullable":true,"type":"string"},"data_structure_relations":{"anyOf":[{"description":"CSV file with structure relations","format":"binary","type":"string"},{"additionalProperties":true,"description":"JSON object with structure relations","type":"object"}],"nullable":true},"data_structures":{"anyOf":[{"description":"CSV file with structure metadata","format":"binary","type":"string"},{"additionalProperties":true,"description":"JSON object with structure metadata","type":"object"}],"description":"Structure metadata (file or JSON object)"},"domain":{"description":"Domain external ID","nullable":true,"type":"string"},"inherit_domains":{"description":"Inherit domains (true/false)","nullable":true,"type":"string"},"job_id":{"description":"Job ID for tracking","nullable":true,"type":"string"},"source":{"description":"Source external ID","nullable":true,"type":"string"}},"required":["data_structures"],"title":"SystemMetadataUploadRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update metadata for a system

> Updates metadata for the specified system using the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/metadata":{"put":{"description":"Updates metadata for the specified system using the provided payload.","operationId":"TdDdWeb.SystemMetadataController.update","parameters":[{"description":"System external ID","in":"path","name":"system_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetadataUpdateRequest"}}},"description":"System metadata update payload","required":false},"responses":{"202":{"description":"Metadata update accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update metadata for a system","tags":["Systems"]}}},"components":{"schemas":{"SystemMetadataUpdateRequest":{"additionalProperties":false,"properties":{"op":{"description":"Operation type (e.g., 'merge', 'replace')","type":"string"},"values":{"description":"List of metadata records to apply","items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":["op","values"],"title":"SystemMetadataUpdateRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update metadata for a system

> Updates metadata for the specified system using the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/metadata":{"patch":{"description":"Updates metadata for the specified system using the provided payload.","operationId":"TdDdWeb.SystemMetadataController.update (2)","parameters":[{"description":"System external ID","in":"path","name":"system_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SystemMetadataUpdateRequest"}}},"description":"System metadata update payload","required":false},"responses":{"202":{"description":"Metadata update accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update metadata for a system","tags":["Systems"]}}},"components":{"schemas":{"SystemMetadataUpdateRequest":{"additionalProperties":false,"properties":{"op":{"description":"Operation type (e.g., 'merge', 'replace')","type":"string"},"values":{"description":"List of metadata records to apply","items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":["op","values"],"title":"SystemMetadataUpdateRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Structure Links

## Delete data structure link by external ids

> Deletes a data structure link identified by source and target external IDs.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_links/search_delete_one":{"delete":{"description":"Deletes a data structure link identified by source and target external IDs.","operationId":"TdDdWeb.DataStructureLinkController.delete_by_external_ids","parameters":[{"description":"Source data structure external ID","in":"query","name":"source_external_id","required":true,"schema":{"type":"string"}},{"description":"Target data structure external ID","in":"query","name":"target_external_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Data structure link deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete data structure link by external ids","tags":["Data Structure Links"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List links by data structure ID

> Lists links for a data structure, filtered by the current user's visibility.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/structure_links":{"get":{"description":"Lists links for a data structure, filtered by the current user's visibility.","operationId":"TdDdWeb.DataStructureLinkController.index","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkIndexResponse"}}},"description":"Data structure links"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List links by data structure ID","tags":["Data Structure Links"]}}},"components":{"schemas":{"DataStructureLinkIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/DataStructureLinkResponseObject"},"type":"array"}},"required":["data"],"title":"DataStructureLinkIndexResponse","type":"object"},"DataStructureLinkResponseObject":{"additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer"},"inserted_at":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"source":{"$ref":"#/components/schemas/Source"},"source_external_id":{"nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"target":{"$ref":"#/components/schemas/Target"},"target_external_id":{"nullable":true,"type":"string"},"target_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["source","target","labels"],"title":"DataStructureLinkResponseObject","type":"object"},"Source":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Source","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"Target":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Target","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create data structure link

> Creates a new data structure link or bulk loads links depending on the payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_links":{"post":{"description":"Creates a new data structure link or bulk loads links depending on the payload.","operationId":"TdDdWeb.DataStructureLinkController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkCreateRequest"}}},"description":"Data structure link payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkCreateResponse"}}},"description":"Data structure link created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create data structure link","tags":["Data Structure Links"]}}},"components":{"schemas":{"DataStructureLinkCreateRequest":{"anyOf":[{"$ref":"#/components/schemas/DataStructureLinkCreateRequestSingle"},{"$ref":"#/components/schemas/DataStructureLinkCreateRequestBulk"}],"description":"Request to create one or multiple data structure links","title":"DataStructureLinkCreateRequest"},"DataStructureLinkCreateRequestSingle":{"additionalProperties":false,"properties":{"data_structure_link":{"$ref":"#/components/schemas/DataStructureLinkCreateRequestSingleObject"}},"required":["data_structure_link"],"title":"DataStructureLinkCreateRequestSingle","type":"object"},"DataStructureLinkCreateRequestSingleObject":{"additionalProperties":false,"properties":{"label_ids":{"items":{"type":"integer"},"type":"array"},"source_id":{"type":"integer"},"target_id":{"type":"integer"}},"required":["source_id","target_id"],"title":"DataStructureLinkCreateRequestSingleObject","type":"object"},"DataStructureLinkCreateRequestBulk":{"additionalProperties":false,"properties":{"data_structure_links":{"items":{"$ref":"#/components/schemas/DataStructureLinkCreateRequestBulkObject"},"type":"array"}},"required":["data_structure_links"],"title":"DataStructureLinkCreateRequestBulk","type":"object"},"DataStructureLinkCreateRequestBulkObject":{"additionalProperties":false,"description":"Response for bulk creation of data structure links.\nThe response includes `inserted` (successful links) and `not_inserted` (failed links with details).\nEven if some links fail, the overall response is 201 Created.\n","properties":{"label_names":{"items":{"type":"string"},"type":"array"},"source_external_id":{"description":"External ID of the source data structure. If invalid, the error will be reported in the response.","type":"string"},"target_external_id":{"description":"External ID of the source data structure. If invalid, the error will be reported in the response.","type":"string"}},"required":["source_external_id","target_external_id"],"title":"DataStructureLinkCreateRequestBulkObject","type":"object"},"DataStructureLinkCreateResponse":{"anyOf":[{"$ref":"#/components/schemas/DataStructureLinkCreateSingleResponse"},{"$ref":"#/components/schemas/DataStructureLinkBulkCreateResponse"}],"description":"Response for data structure link creation (single or bulk)","title":"DataStructureLinkCreateResponse"},"DataStructureLinkCreateSingleResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructureLinkResource"}},"required":["data"],"title":"DataStructureLinkCreateSingleResponse","type":"object"},"DataStructureLinkResource":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"source_id":{"type":"integer"},"target_id":{"type":"integer"},"updated_at":{"nullable":true,"type":"string"}},"required":["source_id","target_id"],"title":"DataStructureLinkResource","type":"object"},"DataStructureLinkBulkCreateResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"inserted":{"items":{"additionalProperties":false,"properties":{"source_external_id":{"type":"string"},"target_external_id":{"type":"string"}},"required":["source_external_id","target_external_id"],"type":"object"},"type":"array"},"not_inserted":{"additionalProperties":false,"properties":{"changeset_invalid_links":{"items":{"items":{"type":"object"},"type":"array"},"type":"array"},"inexistent_structure":{"items":{"additionalProperties":false,"properties":{"source_external_id":{"type":"string"},"target_external_id":{"type":"string"}},"required":["source_external_id","target_external_id"],"type":"object"},"type":"array"}},"type":"object"}},"required":["inserted","not_inserted"],"type":"object"}},"required":["data"],"title":"DataStructureLinkBulkCreateResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List links by external ID

> Lists links for a data structure identified by its external ID, filtered by user visibility.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_links/search_all":{"get":{"description":"Lists links for a data structure identified by its external ID, filtered by user visibility.","operationId":"TdDdWeb.DataStructureLinkController.index_by_external_id","parameters":[{"description":"Data structure external ID","in":"query","name":"external_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkIndexResponse"}}},"description":"Data structure links"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List links by external ID","tags":["Data Structure Links"]}}},"components":{"schemas":{"DataStructureLinkIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/DataStructureLinkResponseObject"},"type":"array"}},"required":["data"],"title":"DataStructureLinkIndexResponse","type":"object"},"DataStructureLinkResponseObject":{"additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer"},"inserted_at":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"source":{"$ref":"#/components/schemas/Source"},"source_external_id":{"nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"target":{"$ref":"#/components/schemas/Target"},"target_external_id":{"nullable":true,"type":"string"},"target_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["source","target","labels"],"title":"DataStructureLinkResponseObject","type":"object"},"Source":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Source","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"Target":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Target","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Show data structure link by external ids

> Retrieves a data structure link by source and target external IDs.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_links/search_one":{"get":{"description":"Retrieves a data structure link by source and target external IDs.","operationId":"TdDdWeb.DataStructureLinkController.show_by_external_ids","parameters":[{"description":"Source data structure external ID","in":"query","name":"source_external_id","required":true,"schema":{"type":"string"}},{"description":"Target data structure external ID","in":"query","name":"target_external_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkShowResponse"}}},"description":"Data structure link"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show data structure link by external ids","tags":["Data Structure Links"]}}},"components":{"schemas":{"DataStructureLinkShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructureLinkResponseObject"}},"required":["data"],"title":"DataStructureLinkShowResponse","type":"object"},"DataStructureLinkResponseObject":{"additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer"},"inserted_at":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"source":{"$ref":"#/components/schemas/Source"},"source_external_id":{"nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"target":{"$ref":"#/components/schemas/Target"},"target_external_id":{"nullable":true,"type":"string"},"target_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["source","target","labels"],"title":"DataStructureLinkResponseObject","type":"object"},"Source":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Source","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"Target":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Target","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Show link by source and target IDs

> Retrieves a specific data structure link by source and target IDs.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/structure_links/source/{source_id}/target/{target_id}":{"get":{"description":"Retrieves a specific data structure link by source and target IDs.","operationId":"TdDdWeb.DataStructureLinkController.show","parameters":[{"description":"Source data structure ID","in":"path","name":"source_id","required":true,"schema":{"type":"integer"}},{"description":"Target data structure ID","in":"path","name":"target_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkShowResponse"}}},"description":"Data structure link"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show link by source and target IDs","tags":["Data Structure Links"]}}},"components":{"schemas":{"DataStructureLinkShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/DataStructureLinkResponseObject"}},"required":["data"],"title":"DataStructureLinkShowResponse","type":"object"},"DataStructureLinkResponseObject":{"additionalProperties":false,"properties":{"id":{"nullable":true,"type":"integer"},"inserted_at":{"type":"string"},"labels":{"items":{"type":"string"},"type":"array"},"source":{"$ref":"#/components/schemas/Source"},"source_external_id":{"nullable":true,"type":"string"},"source_id":{"nullable":true,"type":"integer"},"target":{"$ref":"#/components/schemas/Target"},"target_external_id":{"nullable":true,"type":"string"},"target_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["source","target","labels"],"title":"DataStructureLinkResponseObject","type":"object"},"Source":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Source","type":"object"},"System":{"additionalProperties":false,"properties":{"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"System","type":"object"},"Target":{"additionalProperties":false,"properties":{"confidential":{"type":"boolean"},"current_version":{"nullable":true,"type":"object"},"domain_ids":{"items":{"type":"integer"},"type":"array"},"domains":{"items":{"type":"object"},"nullable":true,"type":"array"},"external_id":{"nullable":true,"type":"string"},"id":{"type":"integer"},"inserted_at":{"type":"string"},"last_change_at":{"nullable":true,"type":"string"},"linked_concepts":{"items":{"type":"object"},"nullable":true,"type":"array"},"metadata":{"type":"object"},"path":{"items":{"type":"string"},"type":"array"},"source":{"type":"object"},"source_id":{"nullable":true,"type":"integer"},"system":{"anyOf":[{"$ref":"#/components/schemas/System"},{"additionalProperties":true,"type":"object"}],"nullable":true},"system_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id"],"title":"Target","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete data structure link

> Deletes the data structure link identified by source and target IDs.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/structure_links/source/{source_id}/target/{target_id}":{"delete":{"description":"Deletes the data structure link identified by source and target IDs.","operationId":"TdDdWeb.DataStructureLinkController.delete","parameters":[{"description":"Source data structure ID","in":"path","name":"source_id","required":true,"schema":{"type":"integer"}},{"description":"Target data structure ID","in":"path","name":"target_id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Data structure link deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete data structure link","tags":["Data Structure Links"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search data structure links

> Searches data structure links using the provided filters.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_links/search":{"post":{"description":"Searches data structure links using the provided filters.","operationId":"TdDdWeb.DataStructureLinkController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkSearchRequest"}}},"description":"Data structure link search filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureLinkSearchResponse"}}},"description":"Data structure links search"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityStringResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search data structure links","tags":["Data Structure Links"]}}},"components":{"schemas":{"DataStructureLinkSearchRequest":{"additionalProperties":false,"properties":{"page":{"default":0,"type":"integer"},"scroll_id":{"nullable":true,"type":"string"},"since":{"nullable":true,"type":"string"},"size":{"default":50,"type":"integer"}},"title":"DataStructureLinkSearchRequest","type":"object"},"DataStructureLinkSearchResponse":{"additionalProperties":false,"properties":{"data_structure_links":{"items":{"$ref":"#/components/schemas/DataStructureLinkSearchResponseObject"},"type":"array"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data_structure_links"],"title":"DataStructureLinkSearchResponse","type":"object"},"DataStructureLinkSearchResponseObject":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"inserted_at":{"type":"string"},"labels":{"items":{"$ref":"#/components/schemas/Label"},"type":"array"},"source_id":{"type":"integer"},"target_id":{"type":"integer"},"updated_at":{"type":"string"}},"required":["id","source_id","target_id","labels","inserted_at","updated_at"],"title":"DataStructureLinkSearchResponseObject","type":"object"},"Label":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"title":"Label","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityStringResponse":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"}},"title":"TdDdUnprocessableEntityStringResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Grant Request Groups

## Create grant request group

> Creates a new grant request group from the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_request_groups":{"post":{"description":"Creates a new grant request group from the provided payload.","operationId":"TdDdWeb.GrantRequestGroupController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestGroupCreateRequest"}}},"description":"Grant request group payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestGroupShowResponse"}}},"description":"Grant request group created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundMessageResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DDUnprocessableEntityVariableResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create grant request group","tags":["Grant Request Groups"]}}},"components":{"schemas":{"GrantRequestGroupCreateRequest":{"additionalProperties":false,"properties":{"grant_request_group":{"additionalProperties":false,"properties":{"modification_grant_id":{"nullable":true,"type":"integer"},"requests":{"items":{"additionalProperties":false,"properties":{"data_structure_external_id":{"nullable":true,"type":"string"},"data_structure_id":{"nullable":true,"type":"integer"},"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"grant_id":{"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"request_type":{"nullable":true,"type":"string"}},"type":"object"},"type":"array"},"type":{"nullable":true,"type":"string"},"user_id":{"nullable":true,"type":"integer"}},"required":["requests"],"type":"object"}},"required":["grant_request_group"],"title":"GrantRequestGroupCreateRequest","type":"object"},"GrantRequestGroupShowResponse":{"additionalProperties":false,"properties":{"data":{"properties":{"_embedded":{"additionalProperties":true,"type":"object"},"created_by_id":{"nullable":true,"type":"integer"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"status":{"nullable":true,"type":"string"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"type":"object"}},"required":["data"],"title":"GrantRequestGroupShowResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdNotFoundMessageResponse","type":"object"},"DDUnprocessableEntityVariableResponse":{"description":"Response for 422 errors. Error messages might have different formats","oneOf":[{"$ref":"#/components/schemas/TdDdUnprocessableEntityStringResponse"},{"$ref":"#/components/schemas/TdDdUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}],"title":"DDUnprocessableEntityVariableResponse"},"TdDdUnprocessableEntityStringResponse":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"}},"title":"TdDdUnprocessableEntityStringResponse","type":"object"},"TdDdUnprocessableEntityArrayResponse":{"additionalProperties":false,"properties":{"error":{"items":{"type":"string"},"type":"array"},"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdDdUnprocessableEntityArrayResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Bulk create grant request groups

> Creates multiple grant request groups in a single request.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_request_groups/bulk":{"post":{"description":"Creates multiple grant request groups in a single request.","operationId":"TdDdWeb.GrantRequestGroupController.bulk_create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestGroupBulkCreateRequest"}}},"description":"Grant request groups payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestGroupBulkCreateResponse"}}},"description":"Grant request groups created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundMessageResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DDUnprocessableEntityVariableResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk create grant request groups","tags":["Grant Request Groups"]}}},"components":{"schemas":{"GrantRequestGroupBulkCreateRequest":{"additionalProperties":false,"properties":{"grant_request_groups":{"items":{"additionalProperties":false,"properties":{"requests":{"items":{"additionalProperties":false,"properties":{"data_structure_external_id":{"nullable":true,"type":"string"},"data_structure_id":{"nullable":true,"type":"integer"},"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"grant_id":{"nullable":true,"type":"integer"},"metadata":{"additionalProperties":true,"nullable":true,"type":"object"},"request_type":{"nullable":true,"type":"string"}},"type":"object"},"type":"array"},"type":{"description":"Group type","nullable":true,"type":"string"}},"required":["requests"],"type":"object"},"type":"array"}},"required":["grant_request_groups"],"title":"GrantRequestGroupBulkCreateRequest","type":"object"},"GrantRequestGroupBulkCreateResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"grant_request_groups":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":["grant_request_groups"],"type":"object"}},"required":["data"],"title":"GrantRequestGroupBulkCreateResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdNotFoundMessageResponse","type":"object"},"DDUnprocessableEntityVariableResponse":{"description":"Response for 422 errors. Error messages might have different formats","oneOf":[{"$ref":"#/components/schemas/TdDdUnprocessableEntityStringResponse"},{"$ref":"#/components/schemas/TdDdUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}],"title":"DDUnprocessableEntityVariableResponse"},"TdDdUnprocessableEntityStringResponse":{"additionalProperties":false,"properties":{"error":{"type":"string"},"message":{"type":"string"}},"title":"TdDdUnprocessableEntityStringResponse","type":"object"},"TdDdUnprocessableEntityArrayResponse":{"additionalProperties":false,"properties":{"error":{"items":{"type":"string"},"type":"array"},"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdDdUnprocessableEntityArrayResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get grant request group by ID

> Retrieves the grant request group with the specified ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_request_groups/{id}":{"get":{"description":"Retrieves the grant request group with the specified ID.","operationId":"TdDdWeb.GrantRequestGroupController.show","parameters":[{"description":"Grant request group ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GrantRequestGroupShowResponse"}}},"description":"Grant request group retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get grant request group by ID","tags":["Grant Request Groups"]}}},"components":{"schemas":{"GrantRequestGroupShowResponse":{"additionalProperties":false,"properties":{"data":{"properties":{"_embedded":{"additionalProperties":true,"type":"object"},"created_by_id":{"nullable":true,"type":"integer"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"status":{"nullable":true,"type":"string"},"type":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"user_id":{"nullable":true,"type":"integer"}},"required":["id"],"type":"object"}},"required":["data"],"title":"GrantRequestGroupShowResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete grant request group

> Deletes the grant request group identified by the given ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/grant_request_groups/{id}":{"delete":{"description":"Deletes the grant request group identified by the given ID.","operationId":"TdDdWeb.GrantRequestGroupController.delete","parameters":[{"description":"Grant request group ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Grant request group deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete grant request group","tags":["Grant Request Groups"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Classifier

## List classifiers for a system

> Retrieves classifiers for the selected system, visible to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/classifiers":{"get":{"description":"Retrieves classifiers for the selected system, visible to the current user.","operationId":"TdDdWeb.ClassifierController.index","parameters":[{"description":"System ID","in":"path","name":"system_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifierListResponse"}}},"description":"Classifier list response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List classifiers for a system","tags":["Classifier"]}}},"components":{"schemas":{"ClassifierListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Classifier"},"type":"array"}},"required":["data"],"title":"ClassifierListResponse","type":"object"},"Classifier":{"additionalProperties":false,"properties":{"filters":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"rules":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":["id","name"],"title":"Classifier","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create a classifier for a system

> Creates a new classifier in the selected system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/classifiers":{"post":{"description":"Creates a new classifier in the selected system.","operationId":"TdDdWeb.ClassifierController.create","parameters":[{"description":"System ID","in":"path","name":"system_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifierCreateRequest"}}},"description":"Classifier create payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ClassifierResponse"}}},"description":"Classifier created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create a classifier for a system","tags":["Classifier"]}}},"components":{"schemas":{"ClassifierCreateRequest":{"additionalProperties":false,"properties":{"classifier":{"additionalProperties":false,"properties":{"filters":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"rules":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"}},"required":["classifier"],"title":"ClassifierCreateRequest","type":"object"},"ClassifierResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Classifier"}},"required":["data"],"title":"ClassifierResponse","type":"object"},"Classifier":{"additionalProperties":false,"properties":{"filters":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"id":{"type":"integer"},"name":{"type":"string"},"rules":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"required":["id","name"],"title":"Classifier","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete a classifier

> Deletes the specified classifier from the selected system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/systems/{system_id}/classifiers/{id}":{"delete":{"description":"Deletes the specified classifier from the selected system.","operationId":"TdDdWeb.ClassifierController.delete","parameters":[{"description":"System ID","in":"path","name":"system_id","required":true,"schema":{"type":"integer"}},{"description":"Classifier ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Classifier deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a classifier","tags":["Classifier"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Structure Filters

## List data structure filters

> Returns available data structure filters based on the caller's permissions and provided parameters.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_filters":{"get":{"description":"Returns available data structure filters based on the caller's permissions and provided parameters.","operationId":"TdDdWeb.DataStructureFilterController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureFiltersResponse"}}},"description":"Data structure filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List data structure filters","tags":["Data Structure Filters"]}}},"components":{"schemas":{"DataStructureFiltersResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"DataStructureFiltersResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get bucket paths

> Retrieves bucket paths for the given filters using the caller's permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/buckets/paths":{"post":{"description":"Retrieves bucket paths for the given filters using the caller's permissions.","operationId":"TdDdWeb.DataStructureFilterController.get_bucket_paths","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPathsRequest"}}},"description":"Bucket paths payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BucketPathsResponse"}}},"description":"Bucket paths response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get bucket paths","tags":["Data Structure Filters"]}}},"components":{"schemas":{"BucketPathsRequest":{"additionalProperties":true,"properties":{"bucket":{"description":"Bucket name","type":"string"},"prefix":{"description":"Prefix to filter paths","type":"string"}},"title":"BucketPathsRequest","type":"object"},"BucketPathsResponse":{"properties":{"filtered_children":{"additionalProperties":{"items":{"type":"integer"},"type":"array"},"description":"Map of parent ID to list of child IDs that have filtered descendants","type":"object"},"forest":{"additionalProperties":{"additionalProperties":true,"type":"object"},"description":"Hierarchical tree of data structure IDs","type":"object"}},"required":["forest","filtered_children"],"title":"BucketPathsResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Search data structure filters

> Searches data structure filters using the provided filter payload and the caller's permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_filters/search":{"post":{"description":"Searches data structure filters using the provided filter payload and the caller's permissions.","operationId":"TdDdWeb.DataStructureFilterController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureFilterSearchRequest"}}},"description":"Filter search payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureFiltersResponse"}}},"description":"Filtered results"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search data structure filters","tags":["Data Structure Filters"]}}},"components":{"schemas":{"DataStructureFilterSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"description":"Exact filter criteria","type":"object"},"link_structures":{"description":"If true, filter by structures that can be linked","type":"boolean"},"my_grant_requests":{"description":"If true, filter by grant requests for current user","type":"boolean"},"page":{"default":0,"description":"Page number","type":"integer"},"query":{"description":"Full-text search query","type":"string"},"scroll":{"description":"Scroll timeout","type":"string"},"scroll_id":{"description":"Scroll ID for pagination","type":"string"},"size":{"default":50,"description":"Page size","type":"integer"}},"title":"DataStructureFilterSearchRequest","type":"object"},"DataStructureFiltersResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"DataStructureFiltersResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# User Search Filters

## List current user's search filters

> Retrieves search filters that belong to the current authenticated user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/user_search_filters/me":{"get":{"description":"Retrieves search filters that belong to the current authenticated user.","operationId":"TdDdWeb.UserSearchFilterController.index_by_user","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterListResponse"}}},"description":"User search filter list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List current user's search filters","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterListResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of user search filters","items":{"$ref":"#/components/schemas/UserSearchFilterResource"},"type":"array"}},"required":["data"],"title":"UserSearchFilterListResponse","type":"object"},"UserSearchFilterResource":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"is_global":{"default":false,"nullable":true,"type":"boolean"},"name":{"type":"string"},"scope":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","user_id","scope","is_global"],"title":"UserSearchFilterResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get a user search filter

> Retrieves a specific user search filter by ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/user_search_filters/{id}":{"get":{"description":"Retrieves a specific user search filter by ID.","operationId":"TdDdWeb.UserSearchFilterController.show","parameters":[{"description":"User search filter ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterResponse"}}},"description":"User search filter details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a user search filter","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/UserSearchFilterResource"}},"required":["data"],"title":"UserSearchFilterResponse","type":"object"},"UserSearchFilterResource":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"is_global":{"default":false,"nullable":true,"type":"boolean"},"name":{"type":"string"},"scope":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","user_id","scope","is_global"],"title":"UserSearchFilterResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete a user search filter

> Deletes the specified user search filter.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/user_search_filters/{id}":{"delete":{"description":"Deletes the specified user search filter.","operationId":"TdDdWeb.UserSearchFilterController.delete","parameters":[{"description":"User search filter ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"User search filter deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a user search filter","tags":["User Search Filters"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List user search filters

> Retrieves all user search filters available to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/user_search_filters":{"get":{"description":"Retrieves all user search filters available to the current user.","operationId":"TdDdWeb.UserSearchFilterController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterListResponse"}}},"description":"User search filter list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List user search filters","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterListResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of user search filters","items":{"$ref":"#/components/schemas/UserSearchFilterResource"},"type":"array"}},"required":["data"],"title":"UserSearchFilterListResponse","type":"object"},"UserSearchFilterResource":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"is_global":{"default":false,"nullable":true,"type":"boolean"},"name":{"type":"string"},"scope":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","user_id","scope","is_global"],"title":"UserSearchFilterResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create a user search filter

> Creates a new user search filter for the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/user_search_filters":{"post":{"description":"Creates a new user search filter for the current user.","operationId":"TdDdWeb.UserSearchFilterController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterCreateRequest"}}},"description":"User search filter payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterResponse"}}},"description":"User search filter created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create a user search filter","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterCreateRequest":{"additionalProperties":false,"properties":{"user_search_filter":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria","nullable":true,"type":"object"},"is_global":{"default":false,"description":"Whether the filter is global (admin only)","nullable":true,"type":"boolean"},"name":{"description":"Filter name","type":"string"},"scope":{"description":"Scope (e.g., 'rule', 'rule_implementation', 'data_structure')","type":"string"}},"required":["name","scope"],"type":"object"}},"required":["user_search_filter"],"title":"UserSearchFilterCreateRequest","type":"object"},"UserSearchFilterResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/UserSearchFilterResource"}},"required":["data"],"title":"UserSearchFilterResponse","type":"object"},"UserSearchFilterResource":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"is_global":{"default":false,"nullable":true,"type":"boolean"},"name":{"type":"string"},"scope":{"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"user_id":{"type":"integer"}},"required":["id","name","user_id","scope","is_global"],"title":"UserSearchFilterResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Search

## Rebuild embeddings for all data structures

> Triggers a rebuild of embeddings for all data structures and returns an accepted response.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/search/embeddings/_put":{"post":{"description":"Triggers a rebuild of embeddings for all data structures and returns an accepted response.","operationId":"TdDdWeb.SearchController.embeddings","parameters":[],"responses":{"202":{"description":"Embeddings update accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Rebuild embeddings for all data structures","tags":["Search"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Trigger full search index reindex

> Triggers a full reindex of the search index; returns 202 Accepted when reindexing is scheduled.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/search/reindex_all":{"get":{"description":"Triggers a full reindex of the search index; returns 202 Accepted when reindexing is scheduled.","operationId":"TdDdWeb.SearchController.reindex_all","parameters":[],"responses":{"202":{"description":"Accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Trigger full search index reindex","tags":["Search"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Units

## Get unit

> Retrieves a specific unit by name.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/units/{name}":{"get":{"description":"Retrieves a specific unit by name.","operationId":"TdDdWeb.UnitController.show","parameters":[{"description":"Unit name","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitShowResponse"}}},"description":"Unit retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get unit","tags":["Units"]}}},"components":{"schemas":{"UnitShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/UnitResponse"}},"required":["data"],"title":"UnitShowResponse","type":"object"},"UnitResponse":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"id":{"description":"Unit ID (may be absent in some responses)","nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/UnitStatus"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["name"],"title":"UnitResponse","type":"object"},"UnitStatus":{"additionalProperties":false,"properties":{"event":{"description":"Last event type","type":"string"},"info":{"additionalProperties":true,"description":"Status metadata","nullable":true,"type":"object"},"timestamp":{"description":"Timestamp of the status event","format":"date-time","nullable":true,"type":"string"}},"required":["event"],"title":"UnitStatus","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update unit

> Updates a unit with nodes and relationships data from uploaded files.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/units/{name}":{"put":{"description":"Updates a unit with nodes and relationships data from uploaded files.","operationId":"TdDdWeb.UnitController.update","parameters":[{"description":"Unit name","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UnitUpdateRequest"}}},"description":"Unit update payload","required":false},"responses":{"202":{"description":"Unit update accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update unit","tags":["Units"]}}},"components":{"schemas":{"UnitUpdateRequest":{"properties":{"nodes":{"description":"File upload for nodes data","format":"binary","type":"string"},"rels":{"description":"File upload for relationships data","format":"binary","type":"string"}},"required":["nodes","rels"],"title":"UnitUpdateRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete unit

> Deletes a unit asynchronously.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/units/{name}":{"delete":{"description":"Deletes a unit asynchronously.","operationId":"TdDdWeb.UnitController.delete","parameters":[{"description":"Unit name","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Unit deletion accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete unit","tags":["Units"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update unit

> Updates a unit with nodes and relationships data from uploaded files.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/units/{name}":{"patch":{"description":"Updates a unit with nodes and relationships data from uploaded files.","operationId":"TdDdWeb.UnitController.update (2)","parameters":[{"description":"Unit name","in":"path","name":"name","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/UnitUpdateRequest"}}},"description":"Unit update payload","required":false},"responses":{"202":{"description":"Unit update accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update unit","tags":["Units"]}}},"components":{"schemas":{"UnitUpdateRequest":{"properties":{"nodes":{"description":"File upload for nodes data","format":"binary","type":"string"},"rels":{"description":"File upload for relationships data","format":"binary","type":"string"}},"required":["nodes","rels"],"title":"UnitUpdateRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List units

> Retrieves all active units

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/units":{"get":{"description":"Retrieves all active units","operationId":"TdDdWeb.UnitController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitsIndexResponse"}}},"description":"Units retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List units","tags":["Units"]}}},"components":{"schemas":{"UnitsIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of units","items":{"$ref":"#/components/schemas/UnitResponse"},"type":"array"}},"required":["data"],"title":"UnitsIndexResponse","type":"object"},"UnitResponse":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"id":{"description":"Unit ID (may be absent in some responses)","nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/UnitStatus"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["name"],"title":"UnitResponse","type":"object"},"UnitStatus":{"additionalProperties":false,"properties":{"event":{"description":"Last event type","type":"string"},"info":{"additionalProperties":true,"description":"Status metadata","nullable":true,"type":"object"},"timestamp":{"description":"Timestamp of the status event","format":"date-time","nullable":true,"type":"string"}},"required":["event"],"title":"UnitStatus","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create unit

> Creates a new unit.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/units":{"post":{"description":"Creates a new unit.","operationId":"TdDdWeb.UnitController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitCreateRequest"}}},"description":"Unit create payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitShowResponse"}}},"description":"Unit created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create unit","tags":["Units"]}}},"components":{"schemas":{"UnitCreateRequest":{"additionalProperties":false,"properties":{"name":{"description":"Unit name","type":"string"},"status":{"description":"Unit status","nullable":true,"type":"boolean"}},"required":["name"],"title":"UnitCreateRequest","type":"object"},"UnitShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/UnitResponse"}},"required":["data"],"title":"UnitShowResponse","type":"object"},"UnitResponse":{"additionalProperties":false,"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"id":{"description":"Unit ID (may be absent in some responses)","nullable":true,"type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"type":"string"},"status":{"$ref":"#/components/schemas/UnitStatus"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["name"],"title":"UnitResponse","type":"object"},"UnitStatus":{"additionalProperties":false,"properties":{"event":{"description":"Last event type","type":"string"},"info":{"additionalProperties":true,"description":"Status metadata","nullable":true,"type":"object"},"timestamp":{"description":"Timestamp of the status event","format":"date-time","nullable":true,"type":"string"}},"required":["event"],"title":"UnitStatus","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List unit events

> Retrieves all events for a specific unit

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/units/{unit_name}/events":{"get":{"description":"Retrieves all events for a specific unit","operationId":"TdDdWeb.UnitEventController.index","parameters":[{"description":"Unit name","in":"path","name":"unit_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UnitEventsIndexResponse"}}},"description":"Unit events retrieved"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List unit events","tags":["Units"]}}},"components":{"schemas":{"UnitEventsIndexResponse":{"properties":{"events":{"items":{"$ref":"#/components/schemas/UnitEventResponse"},"type":"array"}},"title":"UnitEventsIndexResponse","type":"object"},"UnitEventResponse":{"properties":{"data":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"status":{"type":"string"},"type":{"type":"string"},"unit_id":{"type":"integer"},"updated_at":{"format":"date-time","type":"string"}},"title":"UnitEventResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Relation Types

## List relation types

> Returns all relation types available in the system.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/relation_types":{"get":{"description":"Returns all relation types available in the system.","operationId":"TdDdWeb.RelationTypeController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeListResponse"}}},"description":"Relation type list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List relation types","tags":["Relation Types"]}}},"components":{"schemas":{"RelationTypeListResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of relation types","items":{"$ref":"#/components/schemas/RelationTypeResource"},"type":"array"}},"required":["data"],"title":"RelationTypeListResponse","type":"object"},"RelationTypeResource":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"id":{"description":"Relation type ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"title":"RelationTypeResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create relation type

> Creates a new relation type with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/relation_types":{"post":{"description":"Creates a new relation type with the provided payload.","operationId":"TdDdWeb.RelationTypeController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeCreateRequest"}}},"description":"Relation type payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeResponse"}}},"description":"Relation type created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create relation type","tags":["Relation Types"]}}},"components":{"schemas":{"RelationTypeCreateRequest":{"additionalProperties":false,"properties":{"relation_type":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"}},"required":["name"],"type":"object"}},"required":["relation_type"],"title":"RelationTypeCreateRequest","type":"object"},"RelationTypeResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RelationTypeResource"}},"required":["data"],"title":"RelationTypeResponse","type":"object"},"RelationTypeResource":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"id":{"description":"Relation type ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"title":"RelationTypeResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityChangesetResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityChangesetResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Get relation type

> Retrieves the relation type identified by the given ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/relation_types/{id}":{"get":{"description":"Retrieves the relation type identified by the given ID.","operationId":"TdDdWeb.RelationTypeController.show","parameters":[{"description":"Relation type ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeResponse"}}},"description":"Relation type details"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get relation type","tags":["Relation Types"]}}},"components":{"schemas":{"RelationTypeResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RelationTypeResource"}},"required":["data"],"title":"RelationTypeResponse","type":"object"},"RelationTypeResource":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"id":{"description":"Relation type ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"title":"RelationTypeResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update relation type

> Updates the specified relation type using the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/relation_types/{id}":{"put":{"description":"Updates the specified relation type using the provided payload.","operationId":"TdDdWeb.RelationTypeController.update","parameters":[{"description":"Relation type ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeCreateRequest"}}},"description":"Relation type payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeResponse"}}},"description":"Relation type updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update relation type","tags":["Relation Types"]}}},"components":{"schemas":{"RelationTypeCreateRequest":{"additionalProperties":false,"properties":{"relation_type":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"}},"required":["name"],"type":"object"}},"required":["relation_type"],"title":"RelationTypeCreateRequest","type":"object"},"RelationTypeResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RelationTypeResource"}},"required":["data"],"title":"RelationTypeResponse","type":"object"},"RelationTypeResource":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"id":{"description":"Relation type ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"title":"RelationTypeResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityChangesetResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityChangesetResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete relation type

> Deletes the specified relation type.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/relation_types/{id}":{"delete":{"description":"Deletes the specified relation type.","operationId":"TdDdWeb.RelationTypeController.delete","parameters":[{"description":"Relation type ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Relation type deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete relation type","tags":["Relation Types"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Update relation type

> Updates the specified relation type using the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/relation_types/{id}":{"patch":{"description":"Updates the specified relation type using the provided payload.","operationId":"TdDdWeb.RelationTypeController.update (2)","parameters":[{"description":"Relation type ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeCreateRequest"}}},"description":"Relation type payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationTypeResponse"}}},"description":"Relation type updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityChangesetResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update relation type","tags":["Relation Types"]}}},"components":{"schemas":{"RelationTypeCreateRequest":{"additionalProperties":false,"properties":{"relation_type":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"}},"required":["name"],"type":"object"}},"required":["relation_type"],"title":"RelationTypeCreateRequest","type":"object"},"RelationTypeResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RelationTypeResource"}},"required":["data"],"title":"RelationTypeResponse","type":"object"},"RelationTypeResource":{"additionalProperties":false,"properties":{"description":{"description":"Description","nullable":true,"type":"string"},"id":{"description":"Relation type ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"name":{"description":"Unique name","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","name"],"title":"RelationTypeResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityChangesetResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityChangesetResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Labels

## Delete label

> Deletes the label identified by the given ID.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/labels/{id}":{"delete":{"description":"Deletes the label identified by the given ID.","operationId":"TdDdWeb.LabelController.delete","parameters":[{"description":"Label ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Label deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete label","tags":["Labels"]}}},"components":{"schemas":{"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Delete label by name

> Deletes the label matching the provided name.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/labels/search_delete_one":{"delete":{"description":"Deletes the label matching the provided name.","operationId":"TdDdWeb.LabelController.delete_by_name","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelDeleteByNameRequest"}}},"description":"Label name","required":false},"responses":{"204":{"description":"Label deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete label by name","tags":["Labels"]}}},"components":{"schemas":{"LabelDeleteByNameRequest":{"additionalProperties":false,"properties":{"name":{"type":"string"}},"required":["name"],"title":"LabelDeleteByNameRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## List labels

> Retrieves all labels available to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/labels":{"get":{"description":"Retrieves all labels available to the current user.","operationId":"TdDdWeb.LabelController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelListResponse"}}},"description":"List labels"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List labels","tags":["Labels"]}}},"components":{"schemas":{"LabelListResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"}},"required":["data"],"type":"object"},"type":"array"}},"required":["data"],"title":"LabelListResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Create label

> Creates a new label with the provided name.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/labels":{"post":{"description":"Creates a new label with the provided name.","operationId":"TdDdWeb.LabelController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelCreateRequest"}}},"description":"Label payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/LabelResponse"}}},"description":"Label created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create label","tags":["Labels"]}}},"components":{"schemas":{"LabelCreateRequest":{"additionalProperties":false,"properties":{"name":{"type":"string"}},"required":["name"],"title":"LabelCreateRequest","type":"object"},"LabelResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"id":{"type":"integer"},"name":{"type":"string"}},"required":["id","name"],"type":"object"}},"required":["data"],"title":"LabelResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Access

## Bulk load accesses

> Bulk loads access records from the provided payload, returning the number of inserted records, any invalid changesets, and any inexistent external IDs.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/accesses/bulk_load":{"post":{"description":"Bulk loads access records from the provided payload, returning the number of inserted records, any invalid changesets, and any inexistent external IDs.","operationId":"TdDdWeb.AccessController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessBulkLoadRequest"}}},"description":"Access bulk load payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/AccessBulkLoadResponse"}}},"description":"Accesses bulk loaded"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk load accesses","tags":["Access"]}}},"components":{"schemas":{"AccessBulkLoadRequest":{"additionalProperties":false,"properties":{"accesses":{"items":{"additionalProperties":false,"properties":{"principal_id":{"type":"string"},"principal_type":{"enum":["user","group"],"type":"string"},"resource_external_id":{"type":"string"}},"required":["resource_external_id","principal_type","principal_id"],"type":"object"},"type":"array"}},"required":["accesses"],"title":"AccessBulkLoadRequest","type":"object"},"AccessBulkLoadResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"inexistent_external_ids":{"items":{"type":"string"},"type":"array"},"inserted_count":{"type":"integer"},"invalid_changesets":{"items":{"additionalProperties":false,"properties":{"data":{"additionalProperties":true,"type":"object"},"error":{"type":"string"}},"required":["error","data"],"type":"object"},"type":"array"}},"required":["inserted_count","invalid_changesets","inexistent_external_ids"],"type":"object"}},"required":["data"],"title":"AccessBulkLoadResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Data Structure Versions

## Show data structure version by structure ID and version

> Retrieves the specified data structure version (or 'latest') with enrichment for the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/{data_structure_id}/versions/{id}":{"get":{"description":"Retrieves the specified data structure version (or 'latest') with enrichment for the current user.","operationId":"TdDdWeb.DataStructureVersionController.show_by_structure_id","parameters":[{"description":"Data structure ID","in":"path","name":"data_structure_id","required":true,"schema":{"type":"integer"}},{"description":"Version (number or 'latest')","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureVersionResponse"}}},"description":"Data structure version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show data structure version by structure ID and version","tags":["Data Structure Versions"]}}},"components":{"schemas":{"DataStructureVersionResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"DataStructureVersionResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Show data structure version by version ID

> Retrieves the data structure version identified by its version ID, including enrichment for the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structure_versions/{id}":{"get":{"description":"Retrieves the data structure version identified by its version ID, including enrichment for the current user.","operationId":"TdDdWeb.DataStructureVersionController.show","parameters":[{"description":"Data structure version ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureVersionResponse"}}},"description":"Data structure version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdNotFoundErrorResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show data structure version by version ID","tags":["Data Structure Versions"]}}},"components":{"schemas":{"DataStructureVersionResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"DataStructureVersionResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdNotFoundErrorResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdNotFoundErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# XLSX

## Download data structures as XLSX

> Downloads data structures matching the provided filters as an XLSX file.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/xlsx/download":{"post":{"description":"Downloads data structures matching the provided filters as an XLSX file.","operationId":"TdDdWeb.DataStructures.XLSXController.download","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureXlsxDownloadRequest"}}},"description":"Download filters","required":false},"responses":{"200":{"content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"format":"binary","type":"string"}}},"description":"XLSX file download"},"204":{"description":"No data structures available for download"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download data structures as XLSX","tags":["XLSX"]}}},"components":{"schemas":{"DataStructureXlsxDownloadRequest":{"additionalProperties":false,"properties":{"data_structure_id":{"description":"Filter by structure ID","nullable":true,"type":"integer"},"download_type":{"description":"Type of download (only 'editable' supported)","enum":["editable"],"nullable":true,"type":"string"},"header_labels":{"additionalProperties":{"type":"string"},"description":"Custom column headers","nullable":true,"type":"object"},"include_children":{"default":false,"description":"Include children structures","nullable":true,"type":"boolean"},"lang":{"default":"en","description":"Language for labels","nullable":true,"type":"string"},"note_type":{"description":"Which note to export","enum":["published","non_published"],"nullable":true,"type":"string"},"page":{"description":"Page number (unused for download)","nullable":true,"type":"integer"},"query":{"description":"Full-text search query","nullable":true,"type":"string"},"size":{"description":"Page size (unused for download)","nullable":true,"type":"integer"},"structure_url_schema":{"description":"URL template for structure links","nullable":true,"type":"string"}},"title":"DataStructureXlsxDownloadRequest","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```

## Upload data structures from XLSX

> Uploads an XLSX file to create or update data structures asynchronously.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/xlsx/upload":{"post":{"description":"Uploads an XLSX file to create or update data structures asynchronously.","operationId":"TdDdWeb.DataStructures.XLSXController.upload","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"additionalProperties":false,"properties":{"auto_publish":{"type":"boolean"},"lang":{"type":"string"},"structures":{"format":"binary","type":"string"}},"required":["structures"],"title":"DataStructureXlsxUploadRequest","type":"object"}}},"description":"XLSX upload payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DataStructureXlsxUploadResponse"}}},"description":"Upload job created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload data structures from XLSX","tags":["XLSX"]}}},"components":{"schemas":{"DataStructureXlsxUploadResponse":{"properties":{"job_id":{"type":"integer"}},"title":"DataStructureXlsxUploadResponse","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# File Bulk Update Event

## List file bulk update events

> Lists file bulk update events visible to the current user, subject to bulk upload permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/bulk_update_template_content_events":{"get":{"description":"Lists file bulk update events visible to the current user, subject to bulk upload permissions.","operationId":"TdDdWeb.FileBulkUpdateEventController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FileBulkUpdateEventResponse"}}},"description":"File bulk update events"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List file bulk update events","tags":["File Bulk Update Event"]}}},"components":{"schemas":{"FileBulkUpdateEventResponse":{"additionalProperties":false,"items":{"additionalProperties":false,"properties":{"filename":{"type":"string"},"hash":{"type":"string"},"inserted_at":{"format":"date-time","type":"string"},"message":{"nullable":true,"type":"string"},"response":{"additionalProperties":true,"nullable":true,"type":"object"},"status":{"description":"Current status of the bulk update job","enum":["STARTED","COMPLETED","FAILED","PENDING"],"type":"string"},"task_reference":{"description":"Reference to the background job (can be string or object)","oneOf":[{"type":"string"},{"additionalProperties":true,"type":"object"}]},"user_id":{"type":"integer"}},"required":["user_id","hash","status","inserted_at","filename"],"type":"object"},"title":"FileBulkUpdateEventResponse","type":"array"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdForbiddenResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdForbiddenResponse","type":"object"},"TdDdUnprocessableEntityObjectResponse":{"additionalProperties":false,"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnprocessableEntityObjectResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Tags

## Search tags

> Searches tags using the provided filters and returns matching tag results with total count header.

```json
{"openapi":"3.0.0","info":{"title":"td-dd","version":"Truedat 8.9.1"},"paths":{"/api/data_structures/tags/search":{"post":{"description":"Searches tags using the provided filters and returns matching tag results with total count header.","operationId":"TdDdWeb.TagSearchController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSearchRequest"}}},"description":"Tag search filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSearchResponse"}}},"description":"Tag search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDdInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search tags","tags":["Tags"]}}},"components":{"schemas":{"TagSearchRequest":{"additionalProperties":false,"properties":{"min_id":{"description":"Return tags with ID greater than or equal to this value","nullable":true,"type":"integer"},"since":{"description":"Return tags updated at or after this timestamp (ISO 8601)","nullable":true,"type":"string"},"size":{"description":"Maximum number of results to return","minimum":1,"nullable":true,"type":"integer"}},"title":"TagSearchRequest","type":"object"},"TagSearchResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of tags matching the search","items":{"$ref":"#/components/schemas/TagResource"},"type":"array"}},"required":["data"],"title":"TagSearchResponse","type":"object"},"TagResource":{"additionalProperties":false,"properties":{"description":{"nullable":true,"type":"string"},"domain_ids":{"items":{"type":"integer"},"nullable":true,"type":"array"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"name":{"type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","name","inserted_at","updated_at"],"title":"TagResource","type":"object"},"TdDdUnauthorizedResponse":{"anyOf":[{"$ref":"#/components/schemas/TdDdUnauthorizedMessageResponse"},{"$ref":"#/components/schemas/TdDdUnauthorizedErrorResponse"}],"description":"Unauthorized response from auth plug or error view","title":"TdDdUnauthorizedResponse"},"TdDdUnauthorizedMessageResponse":{"additionalProperties":false,"properties":{"message":{"type":"string"}},"required":["message"],"title":"TdDdUnauthorizedMessageResponse","type":"object"},"TdDdUnauthorizedErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"required":["errors"],"title":"TdDdUnauthorizedErrorResponse","type":"object"},"TdDdInternalServerErrorResponse":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":false,"properties":{"detail":{"type":"string"}},"required":["detail"],"type":"object"}},"required":["errors"],"title":"TdDdInternalServerErrorResponse","type":"object"}}}}
```


# Business Glossary APIs


# Business Glossary APIs

**🔄 Changelog: To learn about the changes introduced in each version, please refer to** [**Truedat Docs**](https://docs.truedat.io)**.**


# Business Concept Versions

## Send business concept version for approval

> Submit the specified business concept version for review and approval.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/submit":{"post":{"description":"Submit the specified business concept version for review and approval.","operationId":"TdBgWeb.BusinessConceptVersionController.send_for_approval","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version submitted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Send business concept version for approval","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Deprecate business concept version

> Deprecate the specified business concept version so it is no longer current.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/deprecate":{"post":{"description":"Deprecate the specified business concept version so it is no longer current.","operationId":"TdBgWeb.BusinessConceptVersionController.deprecate","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version deprecated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BGUnprocessableEntityArrayOrObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Deprecate business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"BGUnprocessableEntityArrayOrObjectResponse":{"description":"Response for 422 errors. Errors value might be an array or an object","oneOf":[{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}],"title":"BGUnprocessableEntityArrayOrObjectResponse"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## List available actions for business concept versions

> Return hypermedia actions available for business concept versions based on the current user permissions.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/actions":{"get":{"description":"Return hypermedia actions available for business concept versions based on the current user permissions.","operationId":"TdBgWeb.BusinessConceptVersionSearchController.actions","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionActionsResponse"}}},"description":"Actions"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List available actions for business concept versions","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionActionsResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":{"$ref":"#/components/schemas/ActionLink"},"type":"object"},"data":{"items":{"type":"object"},"nullable":true,"type":"array"}},"required":["_actions"],"title":"BusinessConceptVersionActionsResponse","type":"object"},"ActionLink":{"additionalProperties":false,"properties":{"href":{"type":"string"},"input":{"additionalProperties":true,"type":"object"},"method":{"enum":["GET","POST","PUT","PATCH","DELETE"],"type":"string"}},"required":["method","href"],"title":"ActionLink","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Restore deprecated business concept version

> Restore a deprecated business concept version back to a publishable state.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/restore":{"post":{"description":"Restore a deprecated business concept version back to a publishable state.","operationId":"TdBgWeb.BusinessConceptVersionController.restore","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version restored"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BGUnprocessableEntityArrayOrObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Restore deprecated business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"BGUnprocessableEntityArrayOrObjectResponse":{"description":"Response for 422 errors. Errors value might be an array or an object","oneOf":[{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}],"title":"BGUnprocessableEntityArrayOrObjectResponse"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Upload business concepts file

> Upload an Excel file to create or update business concept versions in bulk.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/upload":{"post":{"description":"Upload an Excel file to create or update business concept versions in bulk.","operationId":"TdBgWeb.BusinessConceptVersionController.upload","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"additionalProperties":false,"description":"Multipart request for uploading business concepts file","properties":{"auto_publish":{"default":"false","description":"Whether to auto-publish after upload","enum":["true","false"],"type":"string"},"business_concepts":{"description":"Excel file (.xlsx) with business concepts","format":"binary","type":"string"},"lang":{"default":"en","description":"Language code for the content","type":"string"}},"required":["business_concepts"],"title":"BusinessConceptVersionUploadRequest","type":"object"}}},"description":"Excel file to upload","required":false},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionUploadResponse"}}},"description":"Business concepts upload started"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload business concepts file","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionUploadResponse":{"additionalProperties":true,"title":"BusinessConceptVersionUploadResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Download business concepts as CSV

> Download a CSV export of business concept version results matching the current filters.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/csv":{"post":{"description":"Download a CSV export of business concept version results matching the current filters.","operationId":"TdBgWeb.BusinessConceptVersionController.csv","parameters":[{"description":"Full‑text search across business concept fields","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Filter object. Example: `{\"domain_id\": 12, \"status\": \"published\"}`.\nAvailable fields: domain_id, status, confidential, type, name, etc.\nFor more complex queries, you can also use `must` and `must_not` with the same object structure.\n","explode":true,"in":"query","name":"filters","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"},{"description":"Sort field(s), e.g. `name.raw`, `-last_change_at`","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Scroll timeout (e.g. `2m`)","in":"query","name":"scroll","required":false,"schema":{"type":"string"}},{"description":"Scroll ID to continue a previous scroll","in":"query","name":"scroll_id","required":false,"schema":{"type":"string"}},{"description":"If `true`, returns only concepts that can be linked","in":"query","name":"only_linkable","required":false,"schema":{"type":"boolean"}},{"description":"Language code (e.g., 'en', 'es')","in":"query","name":"lang","required":false,"schema":{"type":"string"}},{"description":"URL schema for concept links","in":"query","name":"concept_url_schema","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"text/csv":{"schema":{"format":"binary","type":"string"}}},"description":"CSV file downloaded"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download business concepts as CSV","tags":["Business Concept Versions"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Undo business concept version rejection

> Restore a rejected business concept version to draft status.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/redraft":{"post":{"description":"Restore a rejected business concept version to draft status.","operationId":"TdBgWeb.BusinessConceptVersionController.undo_rejection","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version restored to draft"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Undo business concept version rejection","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Set business concept confidentiality

> Update the confidentiality setting for a business concept version.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/set_confidential":{"post":{"description":"Update the confidentiality setting for a business concept version.","operationId":"TdBgWeb.BusinessConceptVersionController.set_confidential","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionSetConfidentialRequest"}}},"description":"Confidentiality payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept confidentiality updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgConfidentialUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Set business concept confidentiality","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionSetConfidentialRequest":{"additionalProperties":false,"properties":{"confidential":{"description":"Confidential flag","type":"boolean"}},"required":["confidential"],"title":"BusinessConceptVersionSetConfidentialRequest","type":"object"},"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgConfidentialUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"business_concept":{"properties":{"confidential":{"items":{"type":"string"},"type":"array"}},"type":"object"}},"type":"object"}},"title":"TdBgConfidentialUnprocessableEntityResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Show business concept version

> Retrieve the details of a specific business concept version.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/{business_concept_id}/versions/{id}":{"get":{"description":"Retrieve the details of a specific business concept version.","operationId":"TdBgWeb.BusinessConceptVersionController.show","parameters":[{"description":"Business concept ID","in":"path","name":"business_concept_id","required":true,"schema":{"type":"integer"}},{"description":"Business concept version ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Bulk update business concepts

> Update multiple business concept versions in bulk based on the provided search criteria and update payload.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/bulk_update":{"post":{"description":"Update multiple business concept versions in bulk based on the provided search criteria and update payload.","operationId":"TdBgWeb.BusinessConceptVersionController.bulk_update","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionBulkUpdateRequest"}}},"description":"Bulk update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionBulkUpdateResponse"}}},"description":"Business concepts updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk update business concepts","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionBulkUpdateRequest":{"additionalProperties":false,"properties":{"search_params":{"additionalProperties":true,"type":"object"},"update_attributes":{"additionalProperties":true,"type":"object"}},"required":["update_attributes","search_params"],"title":"BusinessConceptVersionBulkUpdateRequest","type":"object"},"BusinessConceptVersionBulkUpdateResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"message":{"items":{"type":"integer"},"type":"array"}},"type":"object"}},"title":"BusinessConceptVersionBulkUpdateResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Update business concept version

> Update an existing business concept version with new content or metadata.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{id}":{"put":{"description":"Update an existing business concept version with new content or metadata.","operationId":"TdBgWeb.BusinessConceptVersionController.update","parameters":[{"description":"Business concept version ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionUpdateRequest"}}},"description":"Business concept version payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BGUnprocessableEntityArrayOrObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionUpdateRequest":{"additionalProperties":false,"properties":{"business_concept_version":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Updated structured content","type":"object"},"name":{"description":"Updated name","type":"string"}},"type":"object"}},"required":["business_concept_version"],"title":"BusinessConceptVersionUpdateRequest","type":"object"},"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"BGUnprocessableEntityArrayOrObjectResponse":{"description":"Response for 422 errors. Errors value might be an array or an object","oneOf":[{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}],"title":"BGUnprocessableEntityArrayOrObjectResponse"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Delete business concept version

> Delete the specified business concept version.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{id}":{"delete":{"description":"Delete the specified business concept version.","operationId":"TdBgWeb.BusinessConceptVersionController.delete","parameters":[{"description":"Business concept version ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Business concept version deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Publish business concept version

> Publish the specified business concept version once it is approved.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/publish":{"post":{"description":"Publish the specified business concept version once it is approved.","operationId":"TdBgWeb.BusinessConceptVersionController.publish","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version published"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BGUnprocessableEntityArrayOrObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Publish business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"BGUnprocessableEntityArrayOrObjectResponse":{"description":"Response for 422 errors. Errors value might be an array or an object","oneOf":[{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}],"title":"BGUnprocessableEntityArrayOrObjectResponse"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## List business concept versions by filters or concept id

> Retrieve a paginated list of business concept versions filtered by query parameters or business concept ID.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/{business_concept_id}/versions":{"get":{"description":"Retrieve a paginated list of business concept versions filtered by query parameters or business concept ID.","operationId":"TdBgWeb.BusinessConceptVersionSearchController.index (2)","parameters":[{"description":"Número de página (0-indexed)","in":"query","name":"page","required":false,"schema":{"default":0,"type":"integer"}},{"description":"Cantidad de resultados por página","in":"query","name":"size","required":false,"schema":{"default":50,"type":"integer"}},{"description":"Si es `true`, incluye relaciones de enlaces en la respuesta","in":"query","name":"include_links","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Tiempo de expiración del scroll (ej. `1m`)","in":"query","name":"scroll","required":false,"schema":{"type":"string"}},{"description":"ID de scroll para continuar paginando","in":"query","name":"scroll_id","required":false,"schema":{"type":"string"}},{"description":"Filtros exactos (objeto JSON)","explode":true,"in":"query","name":"filters","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"},{"description":"Filtros obligatorios (objeto JSON)","explode":true,"in":"query","name":"must","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"},{"description":"Campos de ordenamiento (ej. `name.raw`, `-last_change_at`)","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Búsqueda de texto completo","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Business concept id","in":"path","name":"business_concept_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionSearchResponse"}}},"description":"Search results"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List business concept versions by filters or concept id","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/BusinessConceptVersion"},"type":"array"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"BusinessConceptVersionSearchResponse","type":"object"},"BusinessConceptVersion":{"additionalProperties":true,"properties":{"_actions":{"nullable":true,"type":"object"},"business_concept_id":{"type":"integer"},"content":{"additionalProperties":true,"type":"object"},"domain_id":{"nullable":true,"type":"integer"},"domain_parents":{"items":{"type":"object"},"nullable":true,"type":"array"},"id":{"type":"integer"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"status":{"enum":["draft","pending_approval","rejected","published","deprecated","versioned"],"type":"string"}},"required":["id","business_concept_id","name","status"],"title":"BusinessConceptVersion","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Search business concept versions

> Execute a search for business concept versions using advanced filters provided in the request body.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/search":{"post":{"description":"Execute a search for business concept versions using advanced filters provided in the request body.","operationId":"TdBgWeb.BusinessConceptVersionSearchController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionSearchRequest"}}},"description":"Search filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionSearchResponse"}}},"description":"Search results"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search business concept versions","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"nullable":true,"type":"object"},"include_links":{"default":false,"type":"boolean"},"must":{"additionalProperties":true,"nullable":true,"type":"object"},"only_linkable":{"default":false,"description":"If true, returns only concepts that can be linked (user must have manage_business_concept_links permission)","type":"boolean"},"page":{"default":0,"type":"integer"},"query":{"nullable":true,"type":"string"},"scroll":{"nullable":true,"type":"string"},"scroll_id":{"nullable":true,"type":"string"},"size":{"default":50,"type":"integer"},"sort":{"additionalProperties":true,"nullable":true,"type":"object"}},"title":"BusinessConceptVersionSearchRequest","type":"object"},"BusinessConceptVersionSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/BusinessConceptVersion"},"type":"array"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"BusinessConceptVersionSearchResponse","type":"object"},"BusinessConceptVersion":{"additionalProperties":true,"properties":{"_actions":{"nullable":true,"type":"object"},"business_concept_id":{"type":"integer"},"content":{"additionalProperties":true,"type":"object"},"domain_id":{"nullable":true,"type":"integer"},"domain_parents":{"items":{"type":"object"},"nullable":true,"type":"array"},"id":{"type":"integer"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"status":{"enum":["draft","pending_approval","rejected","published","deprecated","versioned"],"type":"string"}},"required":["id","business_concept_id","name","status"],"title":"BusinessConceptVersion","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Reject business concept version

> Reject the specified business concept version with a given reason.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/reject":{"post":{"description":"Reject the specified business concept version with a given reason.","operationId":"TdBgWeb.BusinessConceptVersionController.reject","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionRejectRequest"}}},"description":"Reject reason payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version rejected"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Reject business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionRejectRequest":{"additionalProperties":false,"properties":{"reject_reason":{"description":"Reason for rejection","type":"string"}},"title":"BusinessConceptVersionRejectRequest","type":"object"},"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Create new version from published business concept version

> Create a successor version from an existing published business concept version.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/version":{"post":{"description":"Create a successor version from an existing published business concept version.","operationId":"TdBgWeb.BusinessConceptVersionController.version","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create new version from published business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## List business concept versions by filters or concept id

> Retrieve a paginated list of business concept versions filtered by query parameters or business concept ID.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions":{"get":{"description":"Retrieve a paginated list of business concept versions filtered by query parameters or business concept ID.","operationId":"TdBgWeb.BusinessConceptVersionSearchController.index","parameters":[{"description":"Número de página (0-indexed)","in":"query","name":"page","required":false,"schema":{"default":0,"type":"integer"}},{"description":"Cantidad de resultados por página","in":"query","name":"size","required":false,"schema":{"default":50,"type":"integer"}},{"description":"Si es `true`, incluye relaciones de enlaces en la respuesta","in":"query","name":"include_links","required":false,"schema":{"default":false,"type":"boolean"}},{"description":"Tiempo de expiración del scroll (ej. `1m`)","in":"query","name":"scroll","required":false,"schema":{"type":"string"}},{"description":"ID de scroll para continuar paginando","in":"query","name":"scroll_id","required":false,"schema":{"type":"string"}},{"description":"Filtros exactos (objeto JSON)","explode":true,"in":"query","name":"filters","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"},{"description":"Filtros obligatorios (objeto JSON)","explode":true,"in":"query","name":"must","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"},{"description":"Campos de ordenamiento (ej. `name.raw`, `-last_change_at`)","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Búsqueda de texto completo","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Business concept id","in":"path","name":"business_concept_id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionSearchResponse"}}},"description":"Search results"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List business concept versions by filters or concept id","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionSearchResponse":{"additionalProperties":false,"properties":{"_actions":{"nullable":true,"type":"object"},"data":{"items":{"$ref":"#/components/schemas/BusinessConceptVersion"},"type":"array"},"scroll_id":{"nullable":true,"type":"string"}},"required":["data"],"title":"BusinessConceptVersionSearchResponse","type":"object"},"BusinessConceptVersion":{"additionalProperties":true,"properties":{"_actions":{"nullable":true,"type":"object"},"business_concept_id":{"type":"integer"},"content":{"additionalProperties":true,"type":"object"},"domain_id":{"nullable":true,"type":"integer"},"domain_parents":{"items":{"type":"object"},"nullable":true,"type":"array"},"id":{"type":"integer"},"last_change_at":{"format":"date-time","nullable":true,"type":"string"},"links":{"items":{"type":"object"},"nullable":true,"type":"array"},"name":{"type":"string"},"status":{"enum":["draft","pending_approval","rejected","published","deprecated","versioned"],"type":"string"}},"required":["id","business_concept_id","name","status"],"title":"BusinessConceptVersion","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Create business concept version

> Create a new business concept version for the specified concept template and domain.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions":{"post":{"description":"Create a new business concept version for the specified concept template and domain.","operationId":"TdBgWeb.BusinessConceptVersionController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionCreateRequest"}}},"description":"Business concept version payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept version created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BGUnprocessableEntityArrayOrObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create business concept version","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionCreateRequest":{"additionalProperties":false,"properties":{"business_concept_version":{"additionalProperties":false,"properties":{"confidential":{"default":false,"description":"Confidential flag","type":"boolean"},"content":{"additionalProperties":true,"description":"Structured content according to template","type":"object"},"domain_id":{"description":"Domain ID","type":"integer"},"name":{"description":"Concept name","type":"string"},"type":{"description":"Template name","type":"string"}},"required":["type","name","domain_id","content"],"type":"object"}},"required":["business_concept_version"],"title":"BusinessConceptVersionCreateRequest","type":"object"},"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"BGUnprocessableEntityArrayOrObjectResponse":{"description":"Response for 422 errors. Errors value might be an array or an object","oneOf":[{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}],"title":"BGUnprocessableEntityArrayOrObjectResponse"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Download business concepts as XLSX

> Download a spreadsheet containing business concept version results returned by the current search criteria.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/xlsx":{"post":{"description":"Download a spreadsheet containing business concept version results returned by the current search criteria.","operationId":"TdBgWeb.BusinessConceptVersionController.xlsx","parameters":[{"description":"Full‑text search across business concept fields","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Filter object. Example: `{\"domain_id\": 12, \"status\": \"published\"}`.\nAvailable fields: domain_id, status, confidential, type, name, etc.\nFor more complex queries, you can also use `must` and `must_not` with the same object structure.\n","explode":true,"in":"query","name":"filters","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"},{"description":"Sort field(s), e.g. `name.raw`, `-last_change_at`","in":"query","name":"sort","required":false,"schema":{"type":"string"}},{"description":"Scroll timeout (e.g. `2m`)","in":"query","name":"scroll","required":false,"schema":{"type":"string"}},{"description":"Scroll ID to continue a previous scroll","in":"query","name":"scroll_id","required":false,"schema":{"type":"string"}},{"description":"If `true`, returns only concepts that can be linked","in":"query","name":"only_linkable","required":false,"schema":{"type":"boolean"}},{"description":"Language code (e.g., 'en', 'es')","in":"query","name":"lang","required":false,"schema":{"type":"string"}},{"description":"URL schema for concept links","in":"query","name":"concept_url_schema","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"format":"binary","type":"string"}}},"description":"XLSX file downloaded"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download business concepts as XLSX","tags":["Business Concept Versions"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Update business concept domain

> Change the domain of a business concept version.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/domain":{"post":{"description":"Change the domain of a business concept version.","operationId":"TdBgWeb.BusinessConceptVersionController.update_domain","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionUpdateDomainRequest"}}},"description":"Domain update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptVersionShowResponse"}}},"description":"Business concept domain updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update business concept domain","tags":["Business Concept Versions"]}}},"components":{"schemas":{"BusinessConceptVersionUpdateDomainRequest":{"additionalProperties":false,"properties":{"domain_id":{"description":"New domain ID","type":"integer"}},"required":["domain_id"],"title":"BusinessConceptVersionUpdateDomainRequest","type":"object"},"BusinessConceptVersionShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"BusinessConceptVersionShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# User Search Filters

## GET /api/business\_concept\_user\_filters/{id}

> Show user search filter

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_user_filters/{id}":{"get":{"operationId":"TdBgWeb.UserSearchFilterController.show","parameters":[{"description":"User search filter ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterShowResponse"}}},"description":"User search filter"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Show user search filter","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterShowResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"UserSearchFilterShowResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## DELETE /api/business\_concept\_user\_filters/{id}

> Delete user search filter (only owner)

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_user_filters/{id}":{"delete":{"operationId":"TdBgWeb.UserSearchFilterController.delete","parameters":[{"description":"User search filter ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"User search filter deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete user search filter (only owner)","tags":["User Search Filters"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## List user search filters for current user

> Retrieve the current user's saved search filters.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_user_filters/me":{"get":{"description":"Retrieve the current user's saved search filters.","operationId":"TdBgWeb.UserSearchFilterController.index_by_user","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterIndexByUserResponse"}}},"description":"User search filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List user search filters for current user","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterIndexByUserResponse":{"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"title":"UserSearchFilterIndexByUserResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## List all user search filters

> Retrieve all user search filters available in the system.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_user_filters":{"get":{"description":"Retrieve all user search filters available in the system.","operationId":"TdBgWeb.UserSearchFilterController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterIndexResponse"}}},"description":"User search filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List all user search filters","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterIndexResponse":{"properties":{"data":{"items":{"additionalProperties":true,"type":"object"},"type":"array"}},"title":"UserSearchFilterIndexResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## POST /api/business\_concept\_user\_filters

> Create user search filter

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_user_filters":{"post":{"operationId":"TdBgWeb.UserSearchFilterController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterCreateRequest"}}},"description":"User search filter payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/UserSearchFilterCreateResponse"}}},"description":"User search filter created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityFiltersResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create user search filter","tags":["User Search Filters"]}}},"components":{"schemas":{"UserSearchFilterCreateRequest":{"additionalProperties":false,"properties":{"user_search_filter":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Dynamic search criteria","type":"object"},"is_global":{"default":false,"type":"boolean"},"name":{"type":"string"}},"required":["name","filters"],"type":"object"}},"required":["user_search_filter"],"title":"UserSearchFilterCreateRequest","type":"object"},"UserSearchFilterCreateResponse":{"properties":{"data":{"additionalProperties":true,"type":"object"}},"title":"UserSearchFilterCreateResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgUnprocessableEntityFiltersResponse":{"properties":{"errors":{"properties":{"filters":{"type":"array"},"name":{"type":"array"}},"type":"object"}},"title":"TdBgUnprocessableEntityFiltersResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Links

## Download business concept links XLSX

> Download an XLSX file containing business concept links matching the provided filters.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/links/download":{"post":{"description":"Download an XLSX file containing business concept links matching the provided filters.","operationId":"TdBgWeb.BusinessConceptLinkController.download","parameters":[{"description":"Full‑text search query","in":"query","name":"query","required":false,"schema":{"type":"string"}},{"description":"Filter by domain ID","in":"query","name":"domain_id","required":false,"schema":{"type":"string"}},{"description":"Additional filters (JSON object)","explode":true,"in":"query","name":"filters","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"},{"description":"Sort field(s)","in":"query","name":"sort","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet":{"schema":{"format":"binary","type":"string"}}},"description":"XLSX file downloaded"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Download business concept links XLSX","tags":["Links"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Create structure link action endpoint

> Endpoint used to represent the create structure link action in hypermedia responses.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/links/structures":{"post":{"description":"Endpoint used to represent the create structure link action in hypermedia responses.","operationId":"TdBgWeb.BusinessConceptLinkController.create_structure_link","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"202":{"description":"Accepted structure link action"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create structure link action endpoint","tags":["Links"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Suggest structure link action endpoint

> Endpoint used to represent the suggest structure link action in hypermedia responses.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/links/structures/suggest":{"post":{"description":"Endpoint used to represent the suggest structure link action in hypermedia responses.","operationId":"TdBgWeb.BusinessConceptLinkController.suggest_structure_link","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"202":{"description":"Accepted structure link suggestion"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Suggest structure link action endpoint","tags":["Links"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Create concept link action endpoint

> Endpoint used to represent the create concept link action in hypermedia responses.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/links/concepts":{"post":{"description":"Endpoint used to represent the create concept link action in hypermedia responses.","operationId":"TdBgWeb.BusinessConceptLinkController.create_concept_link","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}}],"responses":{"202":{"description":"Accepted concept link action"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create concept link action endpoint","tags":["Links"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Delete business concept link

> Delete a link associated with a business concept version.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/{business_concept_version_id}/links/{id}":{"delete":{"description":"Delete a link associated with a business concept version.","operationId":"TdBgWeb.BusinessConceptLinkController.delete","parameters":[{"description":"Business concept version ID","in":"path","name":"business_concept_version_id","required":true,"schema":{"type":"integer"}},{"description":"Business concept link ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"202":{"description":"Business concept link deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BGUnprocessableEntityArrayOrObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete business concept link","tags":["Links"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"BGUnprocessableEntityArrayOrObjectResponse":{"description":"Response for 422 errors. Errors value might be an array or an object","oneOf":[{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"},{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}],"title":"BGUnprocessableEntityArrayOrObjectResponse"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Domains

## Get parentable domain IDs

> Return IDs of domains that can be assigned as parents to the specified domain.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains/{domain_id}/parentable_ids":{"get":{"description":"Return IDs of domains that can be assigned as parents to the specified domain.","operationId":"TdBgWeb.DomainController.parentable_ids","parameters":[{"description":"Domain ID","in":"path","name":"domain_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ParentableDomainIdsResponse"}}},"description":"Parentable IDs"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get parentable domain IDs","tags":["Domains"]}}},"components":{"schemas":{"ParentableDomainIdsResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of domain IDs that can be parents","items":{"type":"integer"},"type":"array"}},"required":["data"],"title":"ParentableDomainIdsResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Count business concepts in domain for user

> Count the business concepts within a domain for the specified user.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains/{domain_id}/business_concepts/{user_name}/count":{"get":{"description":"Count the business concepts within a domain for the specified user.","operationId":"TdBgWeb.DomainController.count_bc_in_domain_for_user","parameters":[{"description":"Domain ID","in":"path","name":"domain_id","required":true,"schema":{"type":"string"}},{"description":"User name","in":"query","name":"user_name","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainBCCountResponse"}}},"description":"Count response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Count business concepts in domain for user","tags":["Domains"]}}},"components":{"schemas":{"DomainBCCountResponse":{"additionalProperties":false,"properties":{"data":{"properties":{"counter":{"description":"Number of business concepts","type":"integer"}},"type":"object"}},"required":["data"],"title":"DomainBCCountResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## List domains

> Returns all domains, optionally filtered by actions and permissions

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains":{"get":{"description":"Returns all domains, optionally filtered by actions and permissions","operationId":"TdBgWeb.DomainController.index","parameters":[{"description":"Comma-separated list of actions (e.g. show,create,update)","in":"query","name":"actions","required":false,"schema":{"type":"string"}},{"description":"Filter mode (e.g. all)","in":"query","name":"filter","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainIndexResponse"}}},"description":"Domains list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List domains","tags":["Domains"]}}},"components":{"schemas":{"DomainIndexResponse":{"additionalProperties":false,"properties":{"_actions":{"type":"object"},"data":{"items":{"$ref":"#/components/schemas/Domain"},"type":"array"},"hypermedia":{"additionalProperties":true,"description":"Hypermedia links","type":"object"}},"title":"DomainIndexResponse","type":"object"},"Domain":{"additionalProperties":false,"properties":{"description":{"description":"Domain description","type":"string"},"domain_group":{"additionalProperties":false,"description":"Associated domain group","nullable":true,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["root"],"type":"string"}},"type":"object"},"external_id":{"description":"External identifier","type":"string"},"id":{"description":"Domain ID","type":"integer"},"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"},"parents":{"description":"Ancestor domains","items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"type":{"default":"domain","description":"Domain type","nullable":true,"type":"string"}},"required":["id"],"title":"Domain","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Create domain

> Create a new domain with the provided domain payload.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains":{"post":{"description":"Create a new domain with the provided domain payload.","operationId":"TdBgWeb.DomainController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainCreateRequest"}}},"description":"Domain payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainShowResponse"}}},"description":"Domain created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create domain","tags":["Domains"]}}},"components":{"schemas":{"DomainCreateRequest":{"additionalProperties":false,"properties":{"domain":{"additionalProperties":false,"properties":{"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"}},"required":["name"],"type":"object"}},"required":["domain"],"title":"DomainCreateRequest","type":"object"},"DomainShowResponse":{"additionalProperties":false,"properties":{"_actions":{"type":"object"},"data":{"$ref":"#/components/schemas/Domain"},"hypermedia":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"DomainShowResponse","type":"object"},"Domain":{"additionalProperties":false,"properties":{"description":{"description":"Domain description","type":"string"},"domain_group":{"additionalProperties":false,"description":"Associated domain group","nullable":true,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["root"],"type":"string"}},"type":"object"},"external_id":{"description":"External identifier","type":"string"},"id":{"description":"Domain ID","type":"integer"},"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"},"parents":{"description":"Ancestor domains","items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"type":{"default":"domain","description":"Domain type","nullable":true,"type":"string"}},"required":["id"],"title":"Domain","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Get domain by id

> Retrieve details for a specific domain by its ID.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains/{id}":{"get":{"description":"Retrieve details for a specific domain by its ID.","operationId":"TdBgWeb.DomainController.show","parameters":[{"description":"Domain ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainShowResponse"}}},"description":"Domain"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get domain by id","tags":["Domains"]}}},"components":{"schemas":{"DomainShowResponse":{"additionalProperties":false,"properties":{"_actions":{"type":"object"},"data":{"$ref":"#/components/schemas/Domain"},"hypermedia":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"DomainShowResponse","type":"object"},"Domain":{"additionalProperties":false,"properties":{"description":{"description":"Domain description","type":"string"},"domain_group":{"additionalProperties":false,"description":"Associated domain group","nullable":true,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["root"],"type":"string"}},"type":"object"},"external_id":{"description":"External identifier","type":"string"},"id":{"description":"Domain ID","type":"integer"},"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"},"parents":{"description":"Ancestor domains","items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"type":{"default":"domain","description":"Domain type","nullable":true,"type":"string"}},"required":["id"],"title":"Domain","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Update domain

> Update an existing domain using the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains/{id}":{"put":{"description":"Update an existing domain using the provided payload.","operationId":"TdBgWeb.DomainController.update","parameters":[{"description":"Domain ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainUpdateRequest"}}},"description":"Domain update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainShowResponse"}}},"description":"Domain updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update domain","tags":["Domains"]}}},"components":{"schemas":{"DomainUpdateRequest":{"additionalProperties":false,"properties":{"domain":{"additionalProperties":false,"properties":{"name":{"description":"Updated name","type":"string"},"parent_id":{"description":"New parent ID","nullable":true,"type":"integer"}},"type":"object"}},"required":["domain"],"title":"DomainUpdateRequest","type":"object"},"DomainShowResponse":{"additionalProperties":false,"properties":{"_actions":{"type":"object"},"data":{"$ref":"#/components/schemas/Domain"},"hypermedia":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"DomainShowResponse","type":"object"},"Domain":{"additionalProperties":false,"properties":{"description":{"description":"Domain description","type":"string"},"domain_group":{"additionalProperties":false,"description":"Associated domain group","nullable":true,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["root"],"type":"string"}},"type":"object"},"external_id":{"description":"External identifier","type":"string"},"id":{"description":"Domain ID","type":"integer"},"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"},"parents":{"description":"Ancestor domains","items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"type":{"default":"domain","description":"Domain type","nullable":true,"type":"string"}},"required":["id"],"title":"Domain","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Delete domain

> Delete a domain identified by the given ID.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains/{id}":{"delete":{"description":"Delete a domain identified by the given ID.","operationId":"TdBgWeb.DomainController.delete","parameters":[{"description":"Domain ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Domain deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete domain","tags":["Domains"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Update domain

> Update an existing domain using the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/domains/{id}":{"patch":{"description":"Update an existing domain using the provided payload.","operationId":"TdBgWeb.DomainController.update (2)","parameters":[{"description":"Domain ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainUpdateRequest"}}},"description":"Domain update payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/DomainShowResponse"}}},"description":"Domain updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update domain","tags":["Domains"]}}},"components":{"schemas":{"DomainUpdateRequest":{"additionalProperties":false,"properties":{"domain":{"additionalProperties":false,"properties":{"name":{"description":"Updated name","type":"string"},"parent_id":{"description":"New parent ID","nullable":true,"type":"integer"}},"type":"object"}},"required":["domain"],"title":"DomainUpdateRequest","type":"object"},"DomainShowResponse":{"additionalProperties":false,"properties":{"_actions":{"type":"object"},"data":{"$ref":"#/components/schemas/Domain"},"hypermedia":{"additionalProperties":true,"type":"object"}},"required":["data"],"title":"DomainShowResponse","type":"object"},"Domain":{"additionalProperties":false,"properties":{"description":{"description":"Domain description","type":"string"},"domain_group":{"additionalProperties":false,"description":"Associated domain group","nullable":true,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["root"],"type":"string"}},"type":"object"},"external_id":{"description":"External identifier","type":"string"},"id":{"description":"Domain ID","type":"integer"},"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"},"parents":{"description":"Ancestor domains","items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"type":{"default":"domain","description":"Domain type","nullable":true,"type":"string"}},"required":["id"],"title":"Domain","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Health Check

## Health check

> Simple health check endpoint that returns 'pong'

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/ping":{"get":{"description":"Simple health check endpoint that returns 'pong'","operationId":"TdBgWeb.PingController.ping","parameters":[],"responses":{"200":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"Service is reachable"}},"summary":"Health check","tags":["Health Check"]}}}}
```

## Echo payload

> Returns the same payload received in the request.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/echo":{"post":{"description":"Returns the same payload received in the request.","operationId":"TdBgWeb.EchoController.echo","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Echo payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Returns the same payload received in the request"}},"summary":"Echo payload","tags":["Health Check"]}}}}
```


# Business Concepts

## Reindex all business concepts

> Trigger reindexing of all business concepts in the search index.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/search/reindex_all":{"get":{"description":"Trigger reindexing of all business concepts in the search index.","operationId":"TdBgWeb.SearchController.reindex_all","parameters":[],"responses":{"202":{"description":"Reindex process accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Reindex all business concepts","tags":["Business Concepts"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Generate embeddings for all business concepts

> Generate vector embeddings for all business concepts to improve search capabilities.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/search/embeddings/_put":{"post":{"description":"Generate vector embeddings for all business concepts to improve search capabilities.","operationId":"TdBgWeb.SearchController.embeddings","parameters":[],"responses":{"202":{"description":"Reindex process accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Generate embeddings for all business concepts","tags":["Business Concepts"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Share business concept with domains

> Share a business concept with one or more target domains.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/{business_concept_id}/shared_domains":{"put":{"description":"Share a business concept with one or more target domains.","operationId":"TdBgWeb.SharedDomainController.update","parameters":[{"description":"Business concept ID","in":"path","name":"business_concept_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedDomainUpdateRequest"}}},"description":"Shared domain payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedDomainUpdateResponse"}}},"description":"Business concept updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Share business concept with domains","tags":["Business Concepts"]}}},"components":{"schemas":{"SharedDomainUpdateRequest":{"additionalProperties":false,"properties":{"domain_ids":{"description":"List of domain IDs to share the business concept with","items":{"type":"integer"},"type":"array"}},"required":["domain_ids"],"title":"SharedDomainUpdateRequest","type":"object"},"SharedDomainUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/SharedBusinessConceptData"}},"required":["data"],"title":"SharedDomainUpdateResponse","type":"object"},"SharedBusinessConceptData":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/EmbeddedSharedDomains"},"id":{"description":"Business concept ID","type":"integer"},"name":{"description":"Business concept name","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["id","_embedded"],"title":"SharedBusinessConceptData","type":"object"},"EmbeddedSharedDomains":{"additionalProperties":false,"properties":{"shared_to":{"description":"List of domains the concept is shared with","items":{"$ref":"#/components/schemas/Domain"},"type":"array"}},"required":["shared_to"],"title":"EmbeddedSharedDomains","type":"object"},"Domain":{"additionalProperties":false,"properties":{"description":{"description":"Domain description","type":"string"},"domain_group":{"additionalProperties":false,"description":"Associated domain group","nullable":true,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["root"],"type":"string"}},"type":"object"},"external_id":{"description":"External identifier","type":"string"},"id":{"description":"Domain ID","type":"integer"},"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"},"parents":{"description":"Ancestor domains","items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"type":{"default":"domain","description":"Domain type","nullable":true,"type":"string"}},"required":["id"],"title":"Domain","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Share business concept with domains

> Share a business concept with one or more target domains.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/{business_concept_id}/shared_domains":{"patch":{"description":"Share a business concept with one or more target domains.","operationId":"TdBgWeb.SharedDomainController.update (2)","parameters":[{"description":"Business concept ID","in":"path","name":"business_concept_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedDomainUpdateRequest"}}},"description":"Shared domain payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SharedDomainUpdateResponse"}}},"description":"Business concept updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Share business concept with domains","tags":["Business Concepts"]}}},"components":{"schemas":{"SharedDomainUpdateRequest":{"additionalProperties":false,"properties":{"domain_ids":{"description":"List of domain IDs to share the business concept with","items":{"type":"integer"},"type":"array"}},"required":["domain_ids"],"title":"SharedDomainUpdateRequest","type":"object"},"SharedDomainUpdateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/SharedBusinessConceptData"}},"required":["data"],"title":"SharedDomainUpdateResponse","type":"object"},"SharedBusinessConceptData":{"additionalProperties":false,"properties":{"_embedded":{"$ref":"#/components/schemas/EmbeddedSharedDomains"},"id":{"description":"Business concept ID","type":"integer"},"name":{"description":"Business concept name","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["id","_embedded"],"title":"SharedBusinessConceptData","type":"object"},"EmbeddedSharedDomains":{"additionalProperties":false,"properties":{"shared_to":{"description":"List of domains the concept is shared with","items":{"$ref":"#/components/schemas/Domain"},"type":"array"}},"required":["shared_to"],"title":"EmbeddedSharedDomains","type":"object"},"Domain":{"additionalProperties":false,"properties":{"description":{"description":"Domain description","type":"string"},"domain_group":{"additionalProperties":false,"description":"Associated domain group","nullable":true,"properties":{"id":{"type":"integer"},"name":{"type":"string"},"status":{"enum":["root"],"type":"string"}},"type":"object"},"external_id":{"description":"External identifier","type":"string"},"id":{"description":"Domain ID","type":"integer"},"name":{"description":"Domain name","type":"string"},"parent_id":{"description":"Parent domain ID","nullable":true,"type":"integer"},"parents":{"description":"Ancestor domains","items":{"additionalProperties":false,"properties":{"external_id":{"type":"string"},"id":{"type":"integer"},"name":{"type":"string"}},"required":["id"],"type":"object"},"nullable":true,"type":"array"},"type":{"default":"domain","description":"Domain type","nullable":true,"type":"string"}},"required":["id"],"title":"Domain","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Comments

## List comments

> Retrieve a list of comments, optionally filtered by resource ID and resource type.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/comments":{"get":{"description":"Retrieve a list of comments, optionally filtered by resource ID and resource type.","operationId":"TdBgWeb.CommentController.index","parameters":[{"description":"Filter by resource id","in":"query","name":"resource_id","required":false,"schema":{"type":"string"}},{"description":"Filter by resource type","in":"query","name":"resource_type","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentIndexResponse"}}},"description":"Comments list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List comments","tags":["Comments"]}}},"components":{"schemas":{"CommentIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of comments","items":{"$ref":"#/components/schemas/Comment"},"type":"array"}},"required":["data"],"title":"CommentIndexResponse","type":"object"},"Comment":{"additionalProperties":false,"properties":{"content":{"description":"Comment content","type":"string"},"created_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"id":{"description":"Comment ID","type":"integer"},"resource_id":{"description":"ID of the resource being commented","type":"integer"},"resource_type":{"description":"Type of the resource (e.g., business_concept)","type":"string"},"user":{"$ref":"#/components/schemas/CommentUser"}},"required":["id","resource_id","resource_type","content","user"],"title":"Comment","type":"object"},"CommentUser":{"additionalProperties":false,"properties":{"full_name":{"description":"User full name","type":"string"},"user_id":{"description":"User ID","type":"integer"},"user_name":{"description":"User name","type":"string"}},"required":["user_id","user_name"],"title":"CommentUser","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Create comment

> Create a new comment for a resource using the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/comments":{"post":{"description":"Create a new comment for a resource using the provided payload.","operationId":"TdBgWeb.CommentController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentCreateRequest"}}},"description":"Comment payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentCreateResponse"}}},"description":"Comment created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityObjectResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create comment","tags":["Comments"]}}},"components":{"schemas":{"CommentCreateRequest":{"additionalProperties":false,"properties":{"comment":{"additionalProperties":false,"properties":{"content":{"type":"string"},"resource_id":{"type":"integer"},"resource_type":{"type":"string"}},"required":["resource_id","resource_type","content"],"type":"object"}},"required":["comment"],"title":"CommentCreateRequest","type":"object"},"CommentCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Comment"}},"required":["data"],"title":"CommentCreateResponse","type":"object"},"Comment":{"additionalProperties":false,"properties":{"content":{"description":"Comment content","type":"string"},"created_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"id":{"description":"Comment ID","type":"integer"},"resource_id":{"description":"ID of the resource being commented","type":"integer"},"resource_type":{"description":"Type of the resource (e.g., business_concept)","type":"string"},"user":{"$ref":"#/components/schemas/CommentUser"}},"required":["id","resource_id","resource_type","content","user"],"title":"Comment","type":"object"},"CommentUser":{"additionalProperties":false,"properties":{"full_name":{"description":"User full name","type":"string"},"user_id":{"description":"User ID","type":"integer"},"user_name":{"description":"User name","type":"string"}},"required":["user_id","user_name"],"title":"CommentUser","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgUnprocessableEntityObjectResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgUnprocessableEntityObjectResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Get comment by id

> Retrieve a single comment by its ID.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/comments/{id}":{"get":{"description":"Retrieve a single comment by its ID.","operationId":"TdBgWeb.CommentController.show","parameters":[{"description":"Comment ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/CommentShowResponse"}}},"description":"Comment"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get comment by id","tags":["Comments"]}}},"components":{"schemas":{"CommentShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Comment"}},"required":["data"],"title":"CommentShowResponse","type":"object"},"Comment":{"additionalProperties":false,"properties":{"content":{"description":"Comment content","type":"string"},"created_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"id":{"description":"Comment ID","type":"integer"},"resource_id":{"description":"ID of the resource being commented","type":"integer"},"resource_type":{"description":"Type of the resource (e.g., business_concept)","type":"string"},"user":{"$ref":"#/components/schemas/CommentUser"}},"required":["id","resource_id","resource_type","content","user"],"title":"Comment","type":"object"},"CommentUser":{"additionalProperties":false,"properties":{"full_name":{"description":"User full name","type":"string"},"user_id":{"description":"User ID","type":"integer"},"user_name":{"description":"User name","type":"string"}},"required":["user_id","user_name"],"title":"CommentUser","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## Delete comment

> Delete the specified comment by its ID.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/comments/{id}":{"delete":{"description":"Delete the specified comment by its ID.","operationId":"TdBgWeb.CommentController.delete","parameters":[{"description":"Comment ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Comment deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete comment","tags":["Comments"]}}},"components":{"schemas":{"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgNotFoundResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Suggestions

## Search business concept suggestions (KNN)

> Search for recommended business concept versions using KNN-based suggestion criteria.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_versions/suggestions":{"post":{"description":"Search for recommended business concept versions using KNN-based suggestion criteria.","operationId":"TdBgWeb.SuggestionController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionSearchRequest"}}},"description":"Suggestion search payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SuggestionSearchResponse"}}},"description":"Suggestions list"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search business concept suggestions (KNN)","tags":["Suggestions"]}}},"components":{"schemas":{"SuggestionSearchRequest":{"additionalProperties":false,"description":"KNN vector search for business concept suggestions.\nRequires a resource (type + id) to generate embeddings.\nOptional parameters override similarity search behavior.\n","properties":{"collection_name":{"description":"Embedding collection name (defaults to system default)","type":"string"},"k":{"default":10,"description":"Number of nearest neighbors to return (1-100)","maximum":100,"minimum":1,"type":"integer"},"num_candidates":{"default":100,"description":"Number of candidates for ANN search","minimum":1,"type":"integer"},"resource":{"additionalProperties":false,"description":"Source resource used to generate embedding vector","properties":{"id":{"description":"Resource ID","type":"integer"},"type":{"description":"Resource type (only 'structures' supported)","enum":["structures"],"type":"string"}},"required":["type","id"],"type":"object"},"similarity":{"default":0.6,"description":"Cosine similarity threshold (0.0-1.0)","maximum":1,"minimum":0,"type":"number"}},"required":["resource"],"title":"SuggestionSearchRequest","type":"object"},"SuggestionSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":true,"properties":{"business_concept_id":{"description":"Parent business concept ID","type":"integer"},"id":{"description":"Business concept version ID","type":"integer"},"name":{"description":"Concept name","type":"string"},"similarity":{"description":"Cosine similarity score (0-1)","type":"number"}},"required":["id","business_concept_id","name"],"type":"object"},"type":"array"}},"required":["data"],"title":"SuggestionSearchResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Business Concept Filters

## Search business concept filters

> Search available filters for business concepts based on request criteria.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_filters/search":{"post":{"description":"Search available filters for business concepts based on request criteria.","operationId":"TdBgWeb.BusinessConceptFilterController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptFilterSearchRequest"}}},"description":"Business concept filter search payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptFilterShowResponse"}}},"description":"Business concept filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search business concept filters","tags":["Business Concept Filters"]}}},"components":{"schemas":{"BusinessConceptFilterSearchRequest":{"additionalProperties":true,"properties":{"confidential":{"description":"Filter by confidential flag","nullable":true,"type":"boolean"},"domain_ids":{"description":"Filter by domain IDs","items":{"type":"integer"},"nullable":true,"type":"array"},"status":{"description":"Filter by business concept statuses","items":{"enum":["published","draft","deprecated","versioned"],"type":"string"},"nullable":true,"type":"array"},"text":{"description":"Full-text search term","nullable":true,"type":"string"},"type":{"description":"Filter by business concept types","items":{"type":"string"},"nullable":true,"type":"array"}},"title":"BusinessConceptFilterSearchRequest","type":"object"},"BusinessConceptFilterShowResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":{"$ref":"#/components/schemas/Filter"},"description":"Available filter values grouped by filter name","type":"object"}},"required":["data"],"title":"BusinessConceptFilterShowResponse","type":"object"},"Filter":{"additionalProperties":false,"properties":{"buckets":{"description":"Aggregation buckets","items":{"$ref":"#/components/schemas/FilterBucket"},"type":"array"},"values":{"description":"List of distinct values","items":{},"type":"array"}},"required":["buckets","values"],"title":"Filter","type":"object"},"FilterBucket":{"additionalProperties":false,"properties":{"doc_count":{"description":"Number of documents matching this bucket","type":"integer"},"key":{"description":"Bucket key (value of the filter)","type":"string"}},"required":["key"],"title":"FilterBucket","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```

## List business concept filters

> Retrieve available business concept filters for the authenticated user.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concept_filters":{"get":{"description":"Retrieve available business concept filters for the authenticated user.","operationId":"TdBgWeb.BusinessConceptFilterController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BusinessConceptFilterShowResponse"}}},"description":"Business concept filters"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List business concept filters","tags":["Business Concept Filters"]}}},"components":{"schemas":{"BusinessConceptFilterShowResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":{"$ref":"#/components/schemas/Filter"},"description":"Available filter values grouped by filter name","type":"object"}},"required":["data"],"title":"BusinessConceptFilterShowResponse","type":"object"},"Filter":{"additionalProperties":false,"properties":{"buckets":{"description":"Aggregation buckets","items":{"$ref":"#/components/schemas/FilterBucket"},"type":"array"},"values":{"description":"List of distinct values","items":{},"type":"array"}},"required":["buckets","values"],"title":"Filter","type":"object"},"FilterBucket":{"additionalProperties":false,"properties":{"doc_count":{"description":"Number of documents matching this bucket","type":"integer"},"key":{"description":"Bucket key (value of the filter)","type":"string"}},"required":["key"],"title":"FilterBucket","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Bulk Upload Events

## List bulk upload events for current user

> Retrieve a list of bulk upload events available to the authenticated user.

```json
{"openapi":"3.0.0","info":{"title":"td-bg","version":"Truedat 8.8.0"},"paths":{"/api/business_concepts/bulk_upload_event":{"get":{"description":"Retrieve a list of bulk upload events available to the authenticated user.","operationId":"TdBgWeb.BulkUploadEventController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUploadEventIndexResponse"}}},"description":"Bulk upload events"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgUnprocessableEntityArrayResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdBgInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List bulk upload events for current user","tags":["Bulk Upload Events"]}}},"components":{"schemas":{"BulkUploadEventIndexResponse":{"properties":{"data":{"additionalProperties":false,"items":{"properties":{"file_hash":{"type":"string"},"filename":{"type":"string"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"message":{"nullable":true,"type":"string"},"node":{"nullable":true,"type":"string"},"response":{"additionalProperties":true,"description":"Detailed upload result","type":"object"},"status":{"enum":["STARTED","COMPLETED","FAILED"],"type":"string"},"task_reference":{"nullable":true,"type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"},"user_id":{"type":"integer"}},"type":"object"},"required":["id","file_hash","status","filename","inserted_at","user_id"],"type":"array"}},"required":["data"],"title":"BulkUploadEventIndexResponse","type":"object"},"TdBgUnauthorizedResponse":{"properties":{"errors":{"properties":{"message":{"type":"string"}},"type":"object"}},"title":"TdBgUnauthorizedResponse","type":"object"},"TdBgForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgForbiddenResponse","type":"object"},"TdBgUnprocessableEntityArrayResponse":{"properties":{"errors":{"items":{"properties":{"code":{"type":"string"},"name":{"type":"string"}},"type":"object"},"type":"array"}},"title":"TdBgUnprocessableEntityArrayResponse","type":"object"},"TdBgInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdBgInternalServerErrorResponse","type":"object"}}}}
```


# Data Quality APIs


# Data Quality APIs

**🔄 Changelog: To learn about the changes introduced in each version, please refer to** [**Truedat Docs**](https://docs.truedat.io)**.**


# Implementations

## List rule implementations

> Retrieves rule implementations filtered by rule business concept or active status.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations":{"get":{"description":"Retrieves rule implementations filtered by rule business concept or active status.","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 rule active status (true/false)","in":"query","name":"is_rule_active","required":false,"schema":{"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, either cloned or based on the provided rule data.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations":{"post":{"description":"Creates a new rule implementation, either cloned or based on the provided rule data.","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 the specified implementation.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/{implementation_id}/data_structures":{"post":{"description":"Links a data structure to the specified implementation.","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 implementations data from a CSV file.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/upload":{"post":{"description":"Uploads implementations data from a CSV file.","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

> Retrieves available implementation filter values based on the provided search criteria.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementation_filters/search":{"post":{"description":"Retrieves available implementation filter values based on the provided search criteria.","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 based on filter criteria and pagination.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/search":{"post":{"description":"Searches rule implementations based on filter criteria and pagination.","operationId":"TdDqWeb.ImplementationSearchController.create","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Page size","in":"query","name":"size","required":false,"schema":{"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

> Searches implementations by rule ID using the provided search criteria.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/rule_implementations":{"post":{"description":"Searches implementations by rule ID using the provided search criteria.","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 details for the specified rule implementation.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/{id}":{"get":{"description":"Retrieves details for the specified rule implementation.","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 the specified rule implementation with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/{id}":{"put":{"description":"Updates the specified rule implementation with the provided payload.","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 the specified rule implementation.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/{id}":{"delete":{"description":"Deletes the specified rule implementation.","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 the specified rule implementation with the provided payload.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/{id}":{"patch":{"description":"Updates the specified rule implementation with the provided payload.","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

> Downloads implementations matching the provided filters as an XLSX file.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/xlsx/download":{"post":{"description":"Downloads implementations matching the provided filters as an XLSX file.","operationId":"TdDqWeb.Implementation.XLSXController.download","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Page size","in":"query","name":"size","required":false,"schema":{"type":"integer"}},{"description":"Implementation status filter","in":"query","name":"impl_status","required":false,"schema":{"type":"string"}},{"description":"Header labels","in":"query","name":"header_labels","required":false,"schema":{"type":"string"}},{"description":"Content labels","in":"query","name":"content_labels","required":false,"schema":{"type":"string"}},{"description":"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 implementations.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/search/reindex_all":{"get":{"description":"Triggers a full reindex of implementations.","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 the specified implementation and data structure.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/data_structures/{id}":{"delete":{"description":"Removes the link between the specified implementation and data structure.","operationId":"TdDqWeb.ImplementationStructureController.delete","parameters":[{"description":"Implementation structure 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 implementations from an XLSX file and enqueues processing.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/xlsx/upload":{"post":{"description":"Uploads implementations from an XLSX file and enqueues processing.","operationId":"TdDqWeb.Implementation.XLSXController.upload","parameters":[{"description":"Language","in":"query","name":"lang","required":false,"schema":{"type":"string"}},{"description":"Auto publish implementations","in":"query","name":"auto_publish","required":false,"schema":{"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 result for the specified implementation.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_implementations/{implementation_id}/results":{"post":{"description":"Creates a result for the specified implementation.","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"}}}}
```


# Health Check

## Health check

> Simple health check endpoint that returns 'pong'

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/ping":{"get":{"description":"Simple health check endpoint that returns 'pong'","operationId":"TdDqWeb.PingController.ping","parameters":[],"responses":{"200":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"Service is reachable"}},"summary":"Health check","tags":["Health Check"]}}}}
```

## Echo payload

> Returns the same payload received in the request.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/echo":{"post":{"description":"Returns the same payload received in the request.","operationId":"TdDqWeb.EchoController.echo","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Echo payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Returns the same payload received in the request"}},"summary":"Echo payload","tags":["Health Check"]}}}}
```


# Quality Rules

## Get quality rule

> Retrieve the specified quality rule by ID if the user has view permission.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/{id}":{"get":{"description":"Retrieve the specified quality rule by ID if the user has view permission.","operationId":"TdDqWeb.RuleController.show","parameters":[{"description":"Rule ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}},"description":"Quality rule 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"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get quality rule","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"business_concept_name":{"nullable":true,"type":"string"},"current_business_concept_version":{"additionalProperties":true,"nullable":true,"type":"object"},"deleted_at":{"nullable":true,"type":"string"},"description":{"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"}},"type":"object"},"domain_id":{"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"nullable":true,"type":"string"},"updated_by":{"nullable":true,"type":"integer"},"version":{"type":"integer"}},"required":["id","name","domain_id","active","version"],"type":"object"},"user_permissions":{"additionalProperties":false,"properties":{"manage_quality_rules":{"type":"boolean"}},"type":"object"}},"required":["data"],"title":"RuleResponse","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"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Update quality rule

> Update an existing quality rule using the provided data after permission checks.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/{id}":{"put":{"description":"Update an existing quality rule using the provided data after permission checks.","operationId":"TdDqWeb.RuleController.update","parameters":[{"description":"Rule ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCreateRequest"}}},"description":"Rule update request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}},"description":"Quality rule 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 quality rule","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleCreateRequest":{"additionalProperties":false,"properties":{"rule":{"additionalProperties":true,"properties":{"active":{"nullable":true,"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"description":{"nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"domain_id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"}},"required":["rule"],"title":"RuleCreateRequest","type":"object"},"RuleResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"business_concept_name":{"nullable":true,"type":"string"},"current_business_concept_version":{"additionalProperties":true,"nullable":true,"type":"object"},"deleted_at":{"nullable":true,"type":"string"},"description":{"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"}},"type":"object"},"domain_id":{"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"nullable":true,"type":"string"},"updated_by":{"nullable":true,"type":"integer"},"version":{"type":"integer"}},"required":["id","name","domain_id","active","version"],"type":"object"},"user_permissions":{"additionalProperties":false,"properties":{"manage_quality_rules":{"type":"boolean"}},"type":"object"}},"required":["data"],"title":"RuleResponse","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 quality rule

> Delete the quality rule identified by ID if the current user has deletion permission.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/{id}":{"delete":{"description":"Delete the quality rule identified by ID if the current user has deletion permission.","operationId":"TdDqWeb.RuleController.delete","parameters":[{"description":"Rule ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"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"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete quality rule","tags":["Quality Rules"]}}},"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"},"TdDqNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqNotFoundResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Update quality rule

> Update an existing quality rule using the provided data after permission checks.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/{id}":{"patch":{"description":"Update an existing quality rule using the provided data after permission checks.","operationId":"TdDqWeb.RuleController.update (2)","parameters":[{"description":"Rule ID","in":"path","name":"id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCreateRequest"}}},"description":"Rule update request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}},"description":"Quality rule 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 quality rule","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleCreateRequest":{"additionalProperties":false,"properties":{"rule":{"additionalProperties":true,"properties":{"active":{"nullable":true,"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"description":{"nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"domain_id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"}},"required":["rule"],"title":"RuleCreateRequest","type":"object"},"RuleResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"business_concept_name":{"nullable":true,"type":"string"},"current_business_concept_version":{"additionalProperties":true,"nullable":true,"type":"object"},"deleted_at":{"nullable":true,"type":"string"},"description":{"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"}},"type":"object"},"domain_id":{"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"nullable":true,"type":"string"},"updated_by":{"nullable":true,"type":"integer"},"version":{"type":"integer"}},"required":["id","name","domain_id","active","version"],"type":"object"},"user_permissions":{"additionalProperties":false,"properties":{"manage_quality_rules":{"type":"boolean"}},"type":"object"}},"required":["data"],"title":"RuleResponse","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 quality rules CSV

> Upload a CSV file containing quality rules and process the records for ingestion.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/upload":{"post":{"description":"Upload a CSV file containing quality rules and process the records for ingestion.","operationId":"TdDqWeb.RuleUploadController.create","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RuleUploadRequest"}}},"description":"Rule upload request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleUploadResponse"}}},"description":"Rule 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 quality rules CSV","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleUploadRequest":{"properties":{"rules":{"format":"binary","type":"string"}},"required":["rules"],"title":"RuleUploadRequest","type":"object"},"RuleUploadResponse":{"properties":{"errors":{"items":{"additionalProperties":true,"type":"object"},"type":"array"},"ids":{"items":{"type":"integer"},"type":"array"}},"title":"RuleUploadResponse","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnprocessableEntityResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Search quality rules

> Search quality rules using the request payload and return paginated results.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/search":{"post":{"description":"Search quality rules using the request payload and return paginated results.","operationId":"TdDqWeb.RuleSearchController.create","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"type":"integer"}},{"description":"Page size","in":"query","name":"size","required":false,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSearchRequest"}}},"description":"Rule search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleSearchResponse"}}},"description":"Rule search 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":"Search quality rules","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Search filters","nullable":true,"properties":{"active":{"description":"Filter by active status","items":{"type":"boolean"},"type":"array"},"business_concept_id":{"description":"Filter by business concept ID","items":{"type":"integer"},"type":"array"},"domain_id":{"description":"Filter by domain ID","items":{"type":"integer"},"type":"array"},"system":{"description":"Filter by system","items":{"type":"string"},"type":"array"}},"type":"object"},"must":{"additionalProperties":true,"nullable":true,"type":"object"},"must_not":{"additionalProperties":true,"nullable":true,"type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"}},"title":"RuleSearchRequest","type":"object"},"RuleSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"business_concept_name":{"nullable":true,"type":"string"},"current_business_concept_version":{"additionalProperties":true,"nullable":true,"type":"object"},"deleted_at":{"nullable":true,"type":"string"},"description":{"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":{"nullable":true,"type":"string"}},"type":"object"},"domain_id":{"nullable":true,"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"nullable":true,"type":"string"},"updated_by":{"additionalProperties":true,"nullable":true,"type":"object"},"version":{"type":"integer"}},"required":["id","name","active","version"],"type":"object"},"type":"array"},"filters":{"additionalProperties":true,"type":"object"},"user_permissions":{"additionalProperties":false,"properties":{"manage_quality_rules":{"type":"boolean"}},"type":"object"}},"required":["data"],"title":"RuleSearchResponse","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"}}}}
```

## List quality rules by business concept

> Retrieve quality rules filtered by the specified business concept and authorize access where applicable.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/concept/{business_concept_id}":{"get":{"description":"Retrieve quality rules filtered by the specified business concept and authorize access where applicable.","operationId":"TdDqWeb.RuleController.get_rules_by_concept","parameters":[{"description":"Business concept ID","in":"path","name":"business_concept_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleIndexResponse"}}},"description":"Quality rules 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":"List quality rules by business concept","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleIndexResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"_managable_domain_ids":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"business_concept_name":{"nullable":true,"type":"string"},"deleted_at":{"nullable":true,"type":"string"},"description":{"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"}},"type":"object"},"domain_id":{"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"nullable":true,"type":"string"},"updated_by":{"nullable":true,"type":"integer"},"version":{"type":"integer"}},"required":["id","name","domain_id","active","version"],"type":"object"},"type":"array"},"user_permissions":{"additionalProperties":false,"properties":{"manage_quality_rules":{"type":"boolean"}},"type":"object"}},"required":["data"],"title":"RuleIndexResponse","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"}}}}
```

## Get rule filters

> Return the available filter values for quality rule searches.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_filters/search":{"post":{"description":"Return the available filter values for quality rule searches.","operationId":"TdDqWeb.RuleFilterController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterSearchRequest"}}},"description":"Filter search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FilterSearchResponse"}}},"description":"Filter 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 filters","tags":["Quality Rules"]}}},"components":{"schemas":{"FilterSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria (e.g., domain_id, status, etc.)","type":"object"}},"title":"FilterSearchRequest","type":"object"},"FilterSearchResponse":{"properties":{"filters":{"additionalProperties":true,"type":"object"}},"title":"FilterSearchResponse","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"}}}}
```

## Reindex quality rule search

> Trigger a full reindex of the quality rule search index for the current tenant.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules/search/reindex_all":{"get":{"description":"Trigger a full reindex of the quality rule search index for the current tenant.","operationId":"TdDqWeb.RuleSearchController.reindex","parameters":[],"responses":{"202":{"description":"Accepted"},"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":"Reindex quality rule search","tags":["Quality Rules"]}}},"components":{"schemas":{"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"}}}}
```

## List quality rules

> Retrieve all quality rules visible to the current user and include domain enrichment.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules":{"get":{"description":"Retrieve all quality rules visible to the current user and include domain enrichment.","operationId":"TdDqWeb.RuleController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleIndexResponse"}}},"description":"Quality rules response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List quality rules","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleIndexResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":true,"nullable":true,"type":"object"},"_managable_domain_ids":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"data":{"items":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"business_concept_name":{"nullable":true,"type":"string"},"deleted_at":{"nullable":true,"type":"string"},"description":{"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"}},"type":"object"},"domain_id":{"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"nullable":true,"type":"string"},"updated_by":{"nullable":true,"type":"integer"},"version":{"type":"integer"}},"required":["id","name","domain_id","active","version"],"type":"object"},"type":"array"},"user_permissions":{"additionalProperties":false,"properties":{"manage_quality_rules":{"type":"boolean"}},"type":"object"}},"required":["data"],"title":"RuleIndexResponse","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 quality rule

> Create a new quality rule from the provided payload after authorization.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rules":{"post":{"description":"Create a new quality rule from the provided payload after authorization.","operationId":"TdDqWeb.RuleController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleCreateRequest"}}},"description":"Rule creation request","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResponse"}}},"description":"Quality rule 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 quality rule","tags":["Quality Rules"]}}},"components":{"schemas":{"RuleCreateRequest":{"additionalProperties":false,"properties":{"rule":{"additionalProperties":true,"properties":{"active":{"nullable":true,"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"description":{"nullable":true,"type":"string"},"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"domain_id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"}},"required":["rule"],"title":"RuleCreateRequest","type":"object"},"RuleResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"active":{"type":"boolean"},"business_concept_id":{"nullable":true,"type":"integer"},"business_concept_name":{"nullable":true,"type":"string"},"current_business_concept_version":{"additionalProperties":true,"nullable":true,"type":"object"},"deleted_at":{"nullable":true,"type":"string"},"description":{"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"}},"type":"object"},"domain_id":{"type":"integer"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"name":{"type":"string"},"updated_at":{"nullable":true,"type":"string"},"updated_by":{"nullable":true,"type":"integer"},"version":{"type":"integer"}},"required":["id","name","domain_id","active","version"],"type":"object"},"user_permissions":{"additionalProperties":false,"properties":{"manage_quality_rules":{"type":"boolean"}},"type":"object"}},"required":["data"],"title":"RuleResponse","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"}}}}
```


# Executions

## Search executions

> Searches executions using the provided filters and returns matching results.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/executions/search":{"post":{"description":"Searches executions using the provided filters and returns matching results.","operationId":"TdDqWeb.ExecutionSearchController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionSearchRequest"}}},"description":"Execution search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionSearchResponse"}}},"description":"Execution 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 executions","tags":["Executions"]}}},"components":{"schemas":{"ExecutionSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria","type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"},"sources":{"description":"Filter by source external IDs","items":{"type":"string"},"nullable":true,"type":"array"},"status":{"description":"Filter by status","nullable":true,"type":"string"}},"title":"ExecutionSearchRequest","type":"object"},"ExecutionSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Execution"},"type":"array"}},"required":["data"],"title":"ExecutionSearchResponse","type":"object"},"Execution":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"group":{"additionalProperties":true,"nullable":true,"type":"object"},"implementation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"goal":{"nullable":true,"type":"number"},"id":{"type":"integer"},"implementation_key":{"type":"string"},"minimum":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"}},"required":["id","implementation_key"],"type":"object"},"quality_events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"result":{"additionalProperties":true,"nullable":true,"type":"object"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"},"status":{"description":"Execution status","nullable":true,"type":"string"}},"type":"object"},"id":{"description":"Execution ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"Execution","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"}}}}
```

## List executions

> Retrieves executions, optionally filtered by execution group.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/execution_groups/{execution_group_id}/executions":{"get":{"description":"Retrieves executions, optionally filtered by execution group.","operationId":"TdDqWeb.ExecutionController.index (2)","parameters":[{"description":"Filter by execution group ID","in":"query","name":"group_id","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionIndexResponse"}}},"description":"Executions response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List executions","tags":["Executions"]}}},"components":{"schemas":{"ExecutionIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Execution"},"type":"array"}},"required":["data"],"title":"ExecutionIndexResponse","type":"object"},"Execution":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"group":{"additionalProperties":true,"nullable":true,"type":"object"},"implementation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"goal":{"nullable":true,"type":"number"},"id":{"type":"integer"},"implementation_key":{"type":"string"},"minimum":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"}},"required":["id","implementation_key"],"type":"object"},"quality_events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"result":{"additionalProperties":true,"nullable":true,"type":"object"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"},"status":{"description":"Execution status","nullable":true,"type":"string"}},"type":"object"},"id":{"description":"Execution ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"Execution","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"}}}}
```

## List executions

> Retrieves executions, optionally filtered by execution group.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/executions":{"get":{"description":"Retrieves executions, optionally filtered by execution group.","operationId":"TdDqWeb.ExecutionController.index","parameters":[{"description":"Filter by execution group ID","in":"query","name":"group_id","required":false,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionIndexResponse"}}},"description":"Executions response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List executions","tags":["Executions"]}}},"components":{"schemas":{"ExecutionIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Execution"},"type":"array"}},"required":["data"],"title":"ExecutionIndexResponse","type":"object"},"Execution":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"group":{"additionalProperties":true,"nullable":true,"type":"object"},"implementation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"goal":{"nullable":true,"type":"number"},"id":{"type":"integer"},"implementation_key":{"type":"string"},"minimum":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"}},"required":["id","implementation_key"],"type":"object"},"quality_events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"result":{"additionalProperties":true,"nullable":true,"type":"object"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"},"status":{"description":"Execution status","nullable":true,"type":"string"}},"type":"object"},"id":{"description":"Execution ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"Execution","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 execution group

> Retrieves detailed information for the specified execution group.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/execution_groups/{id}":{"get":{"description":"Retrieves detailed information for the specified execution group.","operationId":"TdDqWeb.ExecutionGroupController.show","parameters":[{"description":"Execution group ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionGroupShowResponse"}}},"description":"Execution group 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"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get execution group","tags":["Executions"]}}},"components":{"schemas":{"ExecutionGroupShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ExecutionGroup"}},"required":["data"],"title":"ExecutionGroupShowResponse","type":"object"},"ExecutionGroup":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"executions":{"description":"List of executions","items":{"$ref":"#/components/schemas/Execution"},"type":"array"}},"type":"object"},"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"id":{"description":"Execution group ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"ExecutionGroup","type":"object"},"Execution":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"group":{"additionalProperties":true,"nullable":true,"type":"object"},"implementation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"goal":{"nullable":true,"type":"number"},"id":{"type":"integer"},"implementation_key":{"type":"string"},"minimum":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"}},"required":["id","implementation_key"],"type":"object"},"quality_events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"result":{"additionalProperties":true,"nullable":true,"type":"object"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"},"status":{"description":"Execution status","nullable":true,"type":"string"}},"type":"object"},"id":{"description":"Execution ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"Execution","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"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## List execution groups

> Retrieves all execution groups available to the current user.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/execution_groups":{"get":{"description":"Retrieves all execution groups available to the current user.","operationId":"TdDqWeb.ExecutionGroupController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionGroupIndexResponse"}}},"description":"Execution groups response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List execution groups","tags":["Executions"]}}},"components":{"schemas":{"ExecutionGroupIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/ExecutionGroup"},"type":"array"}},"required":["data"],"title":"ExecutionGroupIndexResponse","type":"object"},"ExecutionGroup":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"executions":{"description":"List of executions","items":{"$ref":"#/components/schemas/Execution"},"type":"array"}},"type":"object"},"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"id":{"description":"Execution group ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"ExecutionGroup","type":"object"},"Execution":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"group":{"additionalProperties":true,"nullable":true,"type":"object"},"implementation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"goal":{"nullable":true,"type":"number"},"id":{"type":"integer"},"implementation_key":{"type":"string"},"minimum":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"}},"required":["id","implementation_key"],"type":"object"},"quality_events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"result":{"additionalProperties":true,"nullable":true,"type":"object"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"},"status":{"description":"Execution status","nullable":true,"type":"string"}},"type":"object"},"id":{"description":"Execution ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"Execution","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 execution group

> Creates a new execution group using the provided execution parameters.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/execution_groups":{"post":{"description":"Creates a new execution group using the provided execution parameters.","operationId":"TdDqWeb.ExecutionGroupController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionGroupCreateRequest"}}},"description":"Execution group creation request","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ExecutionGroupShowResponse"}}},"description":"Execution group 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 execution group","tags":["Executions"]}}},"components":{"schemas":{"ExecutionGroupCreateRequest":{"additionalProperties":false,"oneOf":[{"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"implementation_ids":{"description":"List of implementation IDs to execute","items":{"type":"integer"},"type":"array"}},"required":["implementation_ids"],"type":"object"},{"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"filters":{"additionalProperties":true,"description":"Search filters to select implementations (e.g., {\"id\": [1,2]})","type":"object"}},"required":["filters"],"type":"object"},{"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"executions":{"description":"Direct list of execution objects","items":{"additionalProperties":false,"properties":{"implementation_id":{"type":"integer"}},"required":["implementation_id"],"type":"object"},"type":"array"}},"required":["executions"],"type":"object"}],"title":"ExecutionGroupCreateRequest","type":"object"},"ExecutionGroupShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/ExecutionGroup"}},"required":["data"],"title":"ExecutionGroupShowResponse","type":"object"},"ExecutionGroup":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"executions":{"description":"List of executions","items":{"$ref":"#/components/schemas/Execution"},"type":"array"}},"type":"object"},"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"id":{"description":"Execution group ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"ExecutionGroup","type":"object"},"Execution":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"group":{"additionalProperties":true,"nullable":true,"type":"object"},"implementation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"goal":{"nullable":true,"type":"number"},"id":{"type":"integer"},"implementation_key":{"type":"string"},"minimum":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"}},"required":["id","implementation_key"],"type":"object"},"quality_events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"result":{"additionalProperties":true,"nullable":true,"type":"object"},"rule":{"additionalProperties":false,"nullable":true,"properties":{"id":{"nullable":true,"type":"integer"},"name":{"nullable":true,"type":"string"}},"type":"object"},"status":{"description":"Execution status","nullable":true,"type":"string"}},"type":"object"},"id":{"description":"Execution ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"}},"required":["id","inserted_at"],"title":"Execution","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"}}}}
```


# Rule Results

## List rule results

> Return paginated rule results, optionally filtering by date and comparison field.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results":{"get":{"description":"Return paginated rule results, optionally filtering by date and comparison field.","operationId":"TdDqWeb.RuleResultController.index","parameters":[{"description":"Filter results since this date (ISO 8601)","in":"query","name":"since","required":false,"schema":{"format":"date-time","type":"string"}},{"description":"Field to compare 'since' against ('date' or 'updated_at')","in":"query","name":"from","required":false,"schema":{"enum":["date","updated_at"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultsIndexResponse"}}},"description":"Rule results response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List rule results","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultsIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/RuleResult"},"type":"array"}},"required":["data"],"title":"RuleResultsIndexResponse","type":"object"},"RuleResult":{"additionalProperties":false,"properties":{"date":{"format":"date-time","nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"has_remediation":{"nullable":true,"type":"boolean"},"id":{"type":"integer"},"implementation_id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"RuleResult","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Upload rule results

> Upload a CSV file with rule result records and process them into the system.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results":{"post":{"description":"Upload a CSV file with rule result records and process them into the system.","operationId":"TdDqWeb.RuleResultController.create","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/RuleResultUploadRequest"}}},"description":"Rule result upload request","required":false},"responses":{"200":{"description":"Rule result upload successful"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload rule results","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultUploadRequest":{"additionalProperties":false,"properties":{"rule_results":{"description":"CSV file with rule results (columns: implementation_key, date, result, records, errors, m:param1, ...)","format":"binary","type":"string"}},"required":["rule_results"],"title":"RuleResultUploadRequest","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnprocessableEntityResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Search rule results

> Perform a search for rule results with optional pagination and return the matching results.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/search":{"post":{"description":"Perform a search for rule results with optional pagination and return the matching results.","operationId":"TdDqWeb.RuleResultSearchController.create","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Page size","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultSearchRequest"}}},"description":"Rule result search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultSearchResponse"}}},"description":"Rule result search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search rule results","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria (e.g., status, implementation_id, date range)","type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"}},"title":"RuleResultSearchRequest","type":"object"},"RuleResultSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/RuleResult"},"type":"array"}},"required":["data"],"title":"RuleResultSearchResponse","type":"object"},"RuleResult":{"additionalProperties":false,"properties":{"date":{"format":"date-time","nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"has_remediation":{"nullable":true,"type":"boolean"},"id":{"type":"integer"},"implementation_id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"RuleResult","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Get a rule result

> Retrieve a specific rule result by its ID if the current user can view it.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{id}":{"get":{"description":"Retrieve a specific rule result by its ID if the current user can view it.","operationId":"TdDqWeb.RuleResultController.show","parameters":[{"description":"Rule result ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RuleResultResponse"}}},"description":"Rule result response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a rule result","tags":["Rule Results"]}}},"components":{"schemas":{"RuleResultResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RuleResult"}},"required":["data"],"title":"RuleResultResponse","type":"object"},"RuleResult":{"additionalProperties":false,"properties":{"date":{"format":"date-time","nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"has_remediation":{"nullable":true,"type":"boolean"},"id":{"type":"integer"},"implementation_id":{"nullable":true,"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"result_type":{"nullable":true,"type":"string"},"rule_id":{"nullable":true,"type":"integer"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"title":"RuleResult","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Delete a rule result

> Delete the specified rule result record after authorization.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{id}":{"delete":{"description":"Delete the specified rule result record after authorization.","operationId":"TdDqWeb.RuleResultController.delete","parameters":[{"description":"Rule result ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Rule result deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a rule result","tags":["Rule Results"]}}},"components":{"schemas":{"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqForbiddenResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```


# Functions

## Delete function

> Deletes the specified function.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/functions/{id}":{"delete":{"description":"Deletes the specified function.","operationId":"TdDqWeb.FunctionController.delete","parameters":[{"description":"Function 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 function","tags":["Functions"]}}},"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"}}}}
```

## List functions

> Retrieves all available functions the user can query.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/functions":{"get":{"description":"Retrieves all available functions the user can query.","operationId":"TdDqWeb.FunctionController.index","parameters":[],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionIndexResponse"}}},"description":"Functions response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List functions","tags":["Functions"]}}},"components":{"schemas":{"FunctionIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of functions","items":{"$ref":"#/components/schemas/Function"},"type":"array"}},"required":["data"],"title":"FunctionIndexResponse","type":"object"},"Function":{"additionalProperties":false,"properties":{"args":{"description":"Function arguments","items":{"additionalProperties":false,"properties":{"name":{"description":"Argument name","type":"string"},"type":{"description":"Argument type","nullable":true,"type":"string"},"values":{"description":"Allowed values","items":{"type":"string"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"},"type":"array"},"group":{"description":"Group name","nullable":true,"type":"string"},"id":{"description":"Function ID","type":"integer"},"name":{"description":"Function name","type":"string"},"return_type":{"description":"Return type","nullable":true,"type":"string"},"scope":{"description":"Scope","nullable":true,"type":"string"}},"required":["id","name"],"title":"Function","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 function

> Creates a new function resource.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/functions":{"post":{"description":"Creates a new function resource.","operationId":"TdDqWeb.FunctionController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionCreateRequest"}}},"description":"Function creation request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionCreateResponse"}}},"description":"Function 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 function","tags":["Functions"]}}},"components":{"schemas":{"FunctionCreateRequest":{"additionalProperties":false,"properties":{"args":{"description":"Function arguments","items":{"additionalProperties":false,"properties":{"name":{"description":"Argument name","type":"string"},"type":{"description":"Argument type","nullable":true,"type":"string"},"values":{"description":"Allowed values","items":{"type":"string"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"},"nullable":true,"type":"array"},"group":{"description":"Group name","nullable":true,"type":"string"},"name":{"description":"Function name","type":"string"},"return_type":{"description":"Return type","nullable":true,"type":"string"},"scope":{"description":"Scope","nullable":true,"type":"string"}},"required":["name"],"title":"FunctionCreateRequest","type":"object"},"FunctionCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Function"}},"required":["data"],"title":"FunctionCreateResponse","type":"object"},"Function":{"additionalProperties":false,"properties":{"args":{"description":"Function arguments","items":{"additionalProperties":false,"properties":{"name":{"description":"Argument name","type":"string"},"type":{"description":"Argument type","nullable":true,"type":"string"},"values":{"description":"Allowed values","items":{"type":"string"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"},"type":"array"},"group":{"description":"Group name","nullable":true,"type":"string"},"id":{"description":"Function ID","type":"integer"},"name":{"description":"Function name","type":"string"},"return_type":{"description":"Return type","nullable":true,"type":"string"},"scope":{"description":"Scope","nullable":true,"type":"string"}},"required":["id","name"],"title":"Function","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"}}}}
```

## Update all functions

> Replaces all functions with the provided function definitions.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/functions":{"put":{"description":"Replaces all functions with the provided function definitions.","operationId":"TdDqWeb.FunctionsController.update","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionsUpdateRequest"}}},"description":"Functions update request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionsUpdateResponse"}}},"description":"Functions 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":"Update all functions","tags":["Functions"]}}},"components":{"schemas":{"FunctionsUpdateRequest":{"additionalProperties":false,"properties":{"functions":{"description":"List of functions to replace","items":{"additionalProperties":false,"properties":{"args":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"type":{"nullable":true,"type":"string"},"values":{"items":{"type":"string"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"},"nullable":true,"type":"array"},"group":{"description":"Group name","nullable":true,"type":"string"},"name":{"description":"Function name","type":"string"},"return_type":{"description":"Return type","nullable":true,"type":"string"},"scope":{"description":"Scope","nullable":true,"type":"string"}},"required":["name"],"type":"object"},"type":"array"}},"required":["functions"],"title":"FunctionsUpdateRequest","type":"object"},"FunctionsUpdateResponse":{"additionalProperties":false,"properties":{"data":{"description":"Updated list of functions","items":{"$ref":"#/components/schemas/Function"},"type":"array"}},"required":["data"],"title":"FunctionsUpdateResponse","type":"object"},"Function":{"additionalProperties":false,"properties":{"args":{"description":"Function arguments","items":{"additionalProperties":false,"properties":{"name":{"description":"Argument name","type":"string"},"type":{"description":"Argument type","nullable":true,"type":"string"},"values":{"description":"Allowed values","items":{"type":"string"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"},"type":"array"},"group":{"description":"Group name","nullable":true,"type":"string"},"id":{"description":"Function ID","type":"integer"},"name":{"description":"Function name","type":"string"},"return_type":{"description":"Return type","nullable":true,"type":"string"},"scope":{"description":"Scope","nullable":true,"type":"string"}},"required":["id","name"],"title":"Function","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"}}}}
```

## Update all functions

> Replaces all functions with the provided function definitions.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/functions":{"patch":{"description":"Replaces all functions with the provided function definitions.","operationId":"TdDqWeb.FunctionsController.update (2)","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionsUpdateRequest"}}},"description":"Functions update request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FunctionsUpdateResponse"}}},"description":"Functions 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":"Update all functions","tags":["Functions"]}}},"components":{"schemas":{"FunctionsUpdateRequest":{"additionalProperties":false,"properties":{"functions":{"description":"List of functions to replace","items":{"additionalProperties":false,"properties":{"args":{"items":{"additionalProperties":false,"properties":{"name":{"type":"string"},"type":{"nullable":true,"type":"string"},"values":{"items":{"type":"string"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"},"nullable":true,"type":"array"},"group":{"description":"Group name","nullable":true,"type":"string"},"name":{"description":"Function name","type":"string"},"return_type":{"description":"Return type","nullable":true,"type":"string"},"scope":{"description":"Scope","nullable":true,"type":"string"}},"required":["name"],"type":"object"},"type":"array"}},"required":["functions"],"title":"FunctionsUpdateRequest","type":"object"},"FunctionsUpdateResponse":{"additionalProperties":false,"properties":{"data":{"description":"Updated list of functions","items":{"$ref":"#/components/schemas/Function"},"type":"array"}},"required":["data"],"title":"FunctionsUpdateResponse","type":"object"},"Function":{"additionalProperties":false,"properties":{"args":{"description":"Function arguments","items":{"additionalProperties":false,"properties":{"name":{"description":"Argument name","type":"string"},"type":{"description":"Argument type","nullable":true,"type":"string"},"values":{"description":"Allowed values","items":{"type":"string"},"nullable":true,"type":"array"}},"required":["name"],"type":"object"},"type":"array"},"group":{"description":"Group name","nullable":true,"type":"string"},"id":{"description":"Function ID","type":"integer"},"name":{"description":"Function name","type":"string"},"return_type":{"description":"Return type","nullable":true,"type":"string"},"scope":{"description":"Scope","nullable":true,"type":"string"}},"required":["id","name"],"title":"Function","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"}}}}
```


# Segment Results

## Search segment results

> Searches segment results with optional pagination.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{rule_result_id}/segment_results":{"get":{"description":"Searches segment results with optional pagination.","operationId":"TdDqWeb.SegmentResultController.index (2)","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Page size","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SegmentResultSearchRequest"}}},"description":"Segment result search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SegmentResultSearchResponse"}}},"description":"Segment result search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search segment results","tags":["Segment Results"]}}},"components":{"schemas":{"SegmentResultSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria (e.g., parent_id, segment_name)","type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"}},"title":"SegmentResultSearchRequest","type":"object"},"SegmentResultSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":false,"properties":{"date":{"nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"parent_id":{"type":"integer"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"segment_name":{"nullable":true,"type":"string"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","parent_id"],"type":"object"},"type":"array"}},"required":["data"],"title":"SegmentResultSearchResponse","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 segment results

> Searches segment results with optional pagination.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/segment_results":{"post":{"description":"Searches segment results with optional pagination.","operationId":"TdDqWeb.SegmentResultController.index","parameters":[{"description":"Page number","in":"query","name":"page","required":false,"schema":{"default":0,"minimum":0,"type":"integer"}},{"description":"Page size","in":"query","name":"size","required":false,"schema":{"default":20,"minimum":1,"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SegmentResultSearchRequest"}}},"description":"Segment result search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SegmentResultSearchResponse"}}},"description":"Segment result search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search segment results","tags":["Segment Results"]}}},"components":{"schemas":{"SegmentResultSearchRequest":{"additionalProperties":false,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria (e.g., parent_id, segment_name)","type":"object"},"page":{"default":0,"description":"Page number","minimum":0,"type":"integer"},"size":{"default":20,"description":"Page size","minimum":1,"type":"integer"}},"title":"SegmentResultSearchRequest","type":"object"},"SegmentResultSearchResponse":{"additionalProperties":false,"properties":{"data":{"items":{"additionalProperties":false,"properties":{"date":{"nullable":true,"type":"string"},"details":{"additionalProperties":true,"nullable":true,"type":"object"},"errors":{"nullable":true,"type":"integer"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"params":{"additionalProperties":true,"nullable":true,"type":"object"},"parent_id":{"type":"integer"},"records":{"nullable":true,"type":"integer"},"result":{"nullable":true,"type":"number"},"segment_name":{"nullable":true,"type":"string"},"updated_at":{"nullable":true,"type":"string"}},"required":["id","parent_id"],"type":"object"},"type":"array"}},"required":["data"],"title":"SegmentResultSearchResponse","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"}}}}
```


# Remediations

## Get remediation for a rule result

> Retrieves remediation details for the specified rule result.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{rule_result_id}/remediation":{"get":{"description":"Retrieves remediation details for the specified rule result.","operationId":"TdDqWeb.RemediationController.show","parameters":[{"description":"Rule result ID","in":"path","name":"rule_result_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationResponse"}}},"description":"Remediation response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get remediation for a rule result","tags":["Remediations"]}}},"components":{"schemas":{"RemediationResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":false,"nullable":true,"properties":{"create":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["POST"],"type":"string"}},"required":["href","method"],"type":"object"},"delete":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["DELETE"],"type":"string"}},"required":["href","method"],"type":"object"},"show":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["GET"],"type":"string"}},"required":["href","method"],"type":"object"},"update":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["PATCH"],"type":"string"}},"required":["href","method"],"type":"object"}},"type":"object"},"data":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"type":"object"}},"required":["data"],"title":"RemediationResponse","type":"object"},"TdDqUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqUnauthorizedResponse","type":"object"},"TdDqNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqNotFoundResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Create remediation for a rule result

> Creates remediation for the specified rule result.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{rule_result_id}/remediation":{"post":{"description":"Creates remediation for the specified rule result.","operationId":"TdDqWeb.RemediationController.create","parameters":[{"description":"Rule result ID","in":"path","name":"rule_result_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationRequest"}}},"description":"Remediation request","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationResponse"}}},"description":"Remediation 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 remediation for a rule result","tags":["Remediations"]}}},"components":{"schemas":{"RemediationRequest":{"additionalProperties":false,"properties":{"remediation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"df_name":{"description":"Template name","type":"string"}},"required":["df_name"],"type":"object"},"rule_result_id":{"description":"Rule result ID (also provided in path)","type":"integer"}},"required":["remediation"],"title":"RemediationRequest","type":"object"},"RemediationResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":false,"nullable":true,"properties":{"create":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["POST"],"type":"string"}},"required":["href","method"],"type":"object"},"delete":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["DELETE"],"type":"string"}},"required":["href","method"],"type":"object"},"show":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["GET"],"type":"string"}},"required":["href","method"],"type":"object"},"update":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["PATCH"],"type":"string"}},"required":["href","method"],"type":"object"}},"type":"object"},"data":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"type":"object"}},"required":["data"],"title":"RemediationResponse","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"}}}}
```

## Update remediation for a rule result

> Updates remediation for the specified rule result.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{rule_result_id}/remediation":{"put":{"description":"Updates remediation for the specified rule result.","operationId":"TdDqWeb.RemediationController.update","parameters":[{"description":"Rule result ID","in":"path","name":"rule_result_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationRequest"}}},"description":"Remediation request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationResponse"}}},"description":"Remediation 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 remediation for a rule result","tags":["Remediations"]}}},"components":{"schemas":{"RemediationRequest":{"additionalProperties":false,"properties":{"remediation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"df_name":{"description":"Template name","type":"string"}},"required":["df_name"],"type":"object"},"rule_result_id":{"description":"Rule result ID (also provided in path)","type":"integer"}},"required":["remediation"],"title":"RemediationRequest","type":"object"},"RemediationResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":false,"nullable":true,"properties":{"create":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["POST"],"type":"string"}},"required":["href","method"],"type":"object"},"delete":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["DELETE"],"type":"string"}},"required":["href","method"],"type":"object"},"show":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["GET"],"type":"string"}},"required":["href","method"],"type":"object"},"update":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["PATCH"],"type":"string"}},"required":["href","method"],"type":"object"}},"type":"object"},"data":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"type":"object"}},"required":["data"],"title":"RemediationResponse","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 remediation for a rule result

> Deletes remediation associated with the specified rule result.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{rule_result_id}/remediation":{"delete":{"description":"Deletes remediation associated with the specified rule result.","operationId":"TdDqWeb.RemediationController.delete","parameters":[{"description":"Rule result ID","in":"path","name":"rule_result_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Remediation deleted"},"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"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdDqInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete remediation for a rule result","tags":["Remediations"]}}},"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"},"TdDqNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqNotFoundResponse","type":"object"},"TdDqInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdDqInternalServerErrorResponse","type":"object"}}}}
```

## Update remediation for a rule result

> Updates remediation for the specified rule result.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/rule_results/{rule_result_id}/remediation":{"patch":{"description":"Updates remediation for the specified rule result.","operationId":"TdDqWeb.RemediationController.update (2)","parameters":[{"description":"Rule result ID","in":"path","name":"rule_result_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationRequest"}}},"description":"Remediation request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RemediationResponse"}}},"description":"Remediation 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 remediation for a rule result","tags":["Remediations"]}}},"components":{"schemas":{"RemediationRequest":{"additionalProperties":false,"properties":{"remediation":{"additionalProperties":false,"properties":{"df_content":{"additionalProperties":true,"description":"Dynamic content","nullable":true,"type":"object"},"df_name":{"description":"Template name","type":"string"}},"required":["df_name"],"type":"object"},"rule_result_id":{"description":"Rule result ID (also provided in path)","type":"integer"}},"required":["remediation"],"title":"RemediationRequest","type":"object"},"RemediationResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":false,"nullable":true,"properties":{"create":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["POST"],"type":"string"}},"required":["href","method"],"type":"object"},"delete":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["DELETE"],"type":"string"}},"required":["href","method"],"type":"object"},"show":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["GET"],"type":"string"}},"required":["href","method"],"type":"object"},"update":{"additionalProperties":false,"properties":{"href":{"type":"string"},"method":{"enum":["PATCH"],"type":"string"}},"required":["href","method"],"type":"object"}},"type":"object"},"data":{"additionalProperties":false,"nullable":true,"properties":{"df_content":{"additionalProperties":true,"nullable":true,"type":"object"},"df_name":{"nullable":true,"type":"string"},"dynamic_content":{"additionalProperties":true,"nullable":true,"type":"object"},"id":{"type":"integer"},"inserted_at":{"nullable":true,"type":"string"},"updated_at":{"nullable":true,"type":"string"}},"required":["id"],"type":"object"}},"required":["data"],"title":"RemediationResponse","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"}}}}
```


# Quality Events

## Create quality event

> Creates a quality event for the specified execution.

```json
{"openapi":"3.0.0","info":{"title":"td-dq","version":"Truedat 8.8.2"},"paths":{"/api/executions/{execution_id}/quality_events":{"post":{"description":"Creates a quality event for the specified execution.","operationId":"TdDqWeb.QualityEventController.create","parameters":[{"description":"Execution ID","in":"path","name":"execution_id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualityEventCreateRequest"}}},"description":"Quality event creation request","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/QualityEventCreateResponse"}}},"description":"Quality event 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 quality event","tags":["Quality Events"]}}},"components":{"schemas":{"QualityEventCreateRequest":{"additionalProperties":false,"properties":{"quality_event":{"additionalProperties":false,"properties":{"message":{"description":"Optional message","nullable":true,"type":"string"},"type":{"description":"Event type (e.g., SUCCESS, ERROR)","type":"string"}},"required":["type"],"type":"object"}},"required":["quality_event"],"title":"QualityEventCreateRequest","type":"object"},"QualityEventCreateResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/QualityEvent"}},"required":["data"],"title":"QualityEventCreateResponse","type":"object"},"QualityEvent":{"additionalProperties":false,"properties":{"execution_id":{"type":"integer"},"id":{"type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"message":{"nullable":true,"type":"string"},"type":{"type":"string"}},"required":["id","inserted_at","execution_id","type"],"title":"QualityEvent","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"}}}}
```


# Link Manager APIs


# Data Catalog, Data Lineage and Grants APIs

**🔄 Changelog: To learn about the changes introduced in each version, please refer to** [**Truedat Docs**](https://docs.truedat.io)**.**


# Health Check

## Health check

> Simple health check endpoint that returns 'pong'.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/ping":{"get":{"description":"Simple health check endpoint that returns 'pong'.","operationId":"TdLmWeb.PingController.ping","parameters":[],"responses":{"200":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"Service is reachable"}},"summary":"Health check","tags":["Health Check"]}}}}
```


# Relations

## List all relations

> Retrieves a paginated list of all relations, optionally filtered by status. Default status is 'approved'.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations":{"get":{"description":"Retrieves a paginated list of all relations, optionally filtered by status. Default status is 'approved'.","operationId":"TdLmWeb.RelationController.index","parameters":[{"description":"Filter by status. Default: 'approved'","in":"query","name":"status","required":false,"schema":{"enum":["approved","pending","rejected","nil"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationListResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List all relations","tags":["Relations"]}}},"components":{"schemas":{"RelationListResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":{"properties":{"href":{"description":"Action URL","type":"string"},"input":{"additionalProperties":true,"description":"Expected input data","type":"object"},"method":{"description":"HTTP method","type":"string"}},"required":["href","method"],"type":"object"},"description":"Available actions (hypermedia)","type":"object"},"data":{"description":"List of relations","items":{"$ref":"#/components/schemas/RelationResponse"},"type":"array"},"hypermedia":{"additionalProperties":true,"description":"Hypermedia data for navigation","nullable":true,"type":"object"}},"required":["data"],"title":"RelationListResponse","type":"object"},"RelationResponse":{"additionalProperties":false,"properties":{"context":{"additionalProperties":true,"description":"Additional context for the relation","type":"object"},"deleted_at":{"description":"Soft deletion timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_at":{"description":"Disable timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_reason":{"description":"Disable reason","nullable":true,"type":"string"},"id":{"description":"Relation ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"origin":{"description":"Relation origin","nullable":true,"type":"string"},"source_id":{"description":"Source resource ID","type":"integer"},"source_type":{"description":"Source resource type","type":"string"},"status":{"description":"Relation status (nil, approved, pending, rejected)","nullable":true,"type":"string"},"tag":{"$ref":"#/components/schemas/TagOrNull"},"tag_id":{"description":"Associated tag ID","nullable":true,"type":"integer"},"tag_type":{"description":"Tag type (derived from tag.value.type)","nullable":true,"type":"string"},"tags":{"description":"List of associated tags (legacy)","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"},"target_id":{"description":"Target resource ID","type":"integer"},"target_type":{"description":"Target resource type","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","source_id","source_type","target_id","target_type","context","updated_at","inserted_at"],"title":"RelationResponse","type":"object"},"TagOrNull":{"additionalProperties":false,"nullable":true,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagOrNull","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Create a new relation

> Creates a new relation between two resources. The relation can include context, tags, origin, and status information.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations":{"post":{"description":"Creates a new relation between two resources. The relation can include context, tags, origin, and status information.","operationId":"TdLmWeb.RelationController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationRequest"}}},"description":"Relation","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationShowResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmBadRequestResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create a new relation","tags":["Relations"]}}},"components":{"schemas":{"RelationRequest":{"additionalProperties":false,"properties":{"relation":{"additionalProperties":false,"description":"Relation data","properties":{"context":{"additionalProperties":true,"description":"Additional context for the relation","nullable":true,"type":"object"},"origin":{"description":"Relation origin (defaults to nil)","nullable":true,"type":"string"},"source_id":{"description":"Source resource ID","type":"integer"},"source_type":{"description":"Source resource type","enum":["business_concept","data_field","data_structure","ingest","implementation_ref","quality_control"],"type":"string"},"status":{"description":"Relation status (only 'pending' or nil)","enum":["pending"],"nullable":true,"type":"string"},"tag_ids":{"description":"List of tag IDs (currently only one is supported)","items":{"type":"integer"},"type":"array"},"tags":{"description":"Legacy field for compatibility (not used in creation)","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"},"target_id":{"description":"Target resource ID","type":"integer"},"target_type":{"description":"Target resource type","enum":["business_concept","data_field","data_structure","ingest","implementation_ref","quality_control"],"type":"string"}},"required":["source_id","source_type","target_id","target_type"],"type":"object"}},"required":["relation"],"title":"RelationRequest","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"RelationShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RelationResponse"}},"required":["data"],"title":"RelationShowResponse","type":"object"},"RelationResponse":{"additionalProperties":false,"properties":{"context":{"additionalProperties":true,"description":"Additional context for the relation","type":"object"},"deleted_at":{"description":"Soft deletion timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_at":{"description":"Disable timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_reason":{"description":"Disable reason","nullable":true,"type":"string"},"id":{"description":"Relation ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"origin":{"description":"Relation origin","nullable":true,"type":"string"},"source_id":{"description":"Source resource ID","type":"integer"},"source_type":{"description":"Source resource type","type":"string"},"status":{"description":"Relation status (nil, approved, pending, rejected)","nullable":true,"type":"string"},"tag":{"$ref":"#/components/schemas/TagOrNull"},"tag_id":{"description":"Associated tag ID","nullable":true,"type":"integer"},"tag_type":{"description":"Tag type (derived from tag.value.type)","nullable":true,"type":"string"},"tags":{"description":"List of associated tags (legacy)","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"},"target_id":{"description":"Target resource ID","type":"integer"},"target_type":{"description":"Target resource type","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","source_id","source_type","target_id","target_type","context","updated_at","inserted_at"],"title":"RelationResponse","type":"object"},"TagOrNull":{"additionalProperties":false,"nullable":true,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagOrNull","type":"object"},"TdLmBadRequestResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmBadRequestResponse","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnprocessableEntityResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Hard delete multiple relations

> Permanently removes multiple relations from the database based on a list of IDs. This operation is irreversible and requires administrative privileges.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/hard_delete":{"delete":{"description":"Permanently removes multiple relations from the database based on a list of IDs. This operation is irreversible and requires administrative privileges.","operationId":"TdLmWeb.RelationController.hard_delete","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HardDeleteRequest"}}},"description":"IDs","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/HardDeleteResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Hard delete multiple relations","tags":["Relations"]}}},"components":{"schemas":{"HardDeleteRequest":{"additionalProperties":false,"properties":{"ids":{"description":"List of relation IDs to permanently delete","items":{"type":"integer"},"type":"array"}},"required":["ids"],"title":"HardDeleteRequest","type":"object"},"HardDeleteResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"deleted":{"description":"IDs of successfully deleted relations","items":{"type":"integer"},"type":"array"},"errors":{"description":"Errors encountered during deletion","items":{"type":"string"},"type":"array"}},"required":["deleted"],"type":"object"}},"required":["data"],"title":"HardDeleteResponse","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnprocessableEntityResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Search relations

> Searches for relations based on resource IDs and types, with optional status filtering. Supports both resource-based and parameter-based search modes.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/search":{"post":{"description":"Searches for relations based on resource IDs and types, with optional status filtering. Supports both resource-based and parameter-based search modes.","operationId":"TdLmWeb.RelationController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationSearchRequest"}}},"description":"Search parameters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationListResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search relations","tags":["Relations"]}}},"components":{"schemas":{"RelationSearchRequest":{"additionalProperties":false,"properties":{"related_to_type":{"description":"Related resource type (required for resource-based search)","type":"string"},"resource_id":{"description":"Root resource ID for search (required for resource-based search)","type":"integer"},"resource_type":{"description":"Root resource type (required for resource-based search)","type":"string"},"source_id":{"description":"Source ID (alternative search)","type":"integer"},"source_type":{"description":"Source type (alternative search)","type":"string"},"status":{"description":"Status filter (defaults to 'approved')","enum":["approved","pending","rejected","nil"],"nullable":true,"type":"string"}},"title":"RelationSearchRequest","type":"object"},"RelationListResponse":{"additionalProperties":false,"properties":{"_actions":{"additionalProperties":{"properties":{"href":{"description":"Action URL","type":"string"},"input":{"additionalProperties":true,"description":"Expected input data","type":"object"},"method":{"description":"HTTP method","type":"string"}},"required":["href","method"],"type":"object"},"description":"Available actions (hypermedia)","type":"object"},"data":{"description":"List of relations","items":{"$ref":"#/components/schemas/RelationResponse"},"type":"array"},"hypermedia":{"additionalProperties":true,"description":"Hypermedia data for navigation","nullable":true,"type":"object"}},"required":["data"],"title":"RelationListResponse","type":"object"},"RelationResponse":{"additionalProperties":false,"properties":{"context":{"additionalProperties":true,"description":"Additional context for the relation","type":"object"},"deleted_at":{"description":"Soft deletion timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_at":{"description":"Disable timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_reason":{"description":"Disable reason","nullable":true,"type":"string"},"id":{"description":"Relation ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"origin":{"description":"Relation origin","nullable":true,"type":"string"},"source_id":{"description":"Source resource ID","type":"integer"},"source_type":{"description":"Source resource type","type":"string"},"status":{"description":"Relation status (nil, approved, pending, rejected)","nullable":true,"type":"string"},"tag":{"$ref":"#/components/schemas/TagOrNull"},"tag_id":{"description":"Associated tag ID","nullable":true,"type":"integer"},"tag_type":{"description":"Tag type (derived from tag.value.type)","nullable":true,"type":"string"},"tags":{"description":"List of associated tags (legacy)","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"},"target_id":{"description":"Target resource ID","type":"integer"},"target_type":{"description":"Target resource type","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","source_id","source_type","target_id","target_type","context","updated_at","inserted_at"],"title":"RelationResponse","type":"object"},"TagOrNull":{"additionalProperties":false,"nullable":true,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagOrNull","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Get a relation by ID

> Retrieves the full details of a single relation by its unique identifier, including associated tags and enriched attributes.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/{id}":{"get":{"description":"Retrieves the full details of a single relation by its unique identifier, including associated tags and enriched attributes.","operationId":"TdLmWeb.RelationController.show","parameters":[{"description":"Relation ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/RelationShowResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmNotFoundResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a relation by ID","tags":["Relations"]}}},"components":{"schemas":{"RelationShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/RelationResponse"}},"required":["data"],"title":"RelationShowResponse","type":"object"},"RelationResponse":{"additionalProperties":false,"properties":{"context":{"additionalProperties":true,"description":"Additional context for the relation","type":"object"},"deleted_at":{"description":"Soft deletion timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_at":{"description":"Disable timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_reason":{"description":"Disable reason","nullable":true,"type":"string"},"id":{"description":"Relation ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","type":"string"},"origin":{"description":"Relation origin","nullable":true,"type":"string"},"source_id":{"description":"Source resource ID","type":"integer"},"source_type":{"description":"Source resource type","type":"string"},"status":{"description":"Relation status (nil, approved, pending, rejected)","nullable":true,"type":"string"},"tag":{"$ref":"#/components/schemas/TagOrNull"},"tag_id":{"description":"Associated tag ID","nullable":true,"type":"integer"},"tag_type":{"description":"Tag type (derived from tag.value.type)","nullable":true,"type":"string"},"tags":{"description":"List of associated tags (legacy)","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"},"target_id":{"description":"Target resource ID","type":"integer"},"target_type":{"description":"Target resource type","type":"string"},"updated_at":{"description":"Update timestamp","format":"date-time","type":"string"}},"required":["id","source_id","source_type","target_id","target_type","context","updated_at","inserted_at"],"title":"RelationResponse","type":"object"},"TagOrNull":{"additionalProperties":false,"nullable":true,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagOrNull","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmNotFoundResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Soft delete a relation

> Performs a soft delete of a relation by setting its deleted\_at timestamp, making it invisible in search results but retaining the data for auditing.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/{id}":{"delete":{"description":"Performs a soft delete of a relation by setting its deleted_at timestamp, making it invisible in search results but retaining the data for auditing.","operationId":"TdLmWeb.RelationController.delete","parameters":[{"description":"Relation ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Relation deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmNotFoundResponse"}}},"description":"Not Found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Soft delete a relation","tags":["Relations"]}}},"components":{"schemas":{"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmNotFoundResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```


# Search

## Get filter values

> Retrieve possible filter values for search facets.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/filters":{"post":{"description":"Retrieve possible filter values for search facets.","operationId":"TdLmWeb.SearchController.filters","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FiltersRequest"}}},"description":"Filter request","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/FiltersResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get filter values","tags":["Search"]}}},"components":{"schemas":{"FiltersRequest":{"additionalProperties":true,"description":"Optional filters to apply when retrieving filter values. Currently unused but reserved for future extensions.","properties":{"domain_ids":{"description":"Filter by domain IDs","items":{"type":"integer"},"type":"array"},"resource_type":{"description":"Filter by resource type (e.g., 'business_concept')","type":"string"},"status":{"description":"Filter by status values","items":{"type":"string"},"type":"array"}},"title":"FiltersRequest","type":"object"},"FiltersResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":{"$ref":"#/components/schemas/FilterValue"},"description":"Filter keys with their possible values","type":"object"}},"required":["data"],"title":"FiltersResponse","type":"object"},"FilterValue":{"additionalProperties":true,"properties":{"values":{"description":"List of possible values for this filter","items":{"type":"string"},"type":"array"}},"required":["values"],"title":"FilterValue","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Search relations

> Search for relations with filters, pagination, sorting and scrolling.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/index_search":{"post":{"description":"Search for relations with filters, pagination, sorting and scrolling.","operationId":"TdLmWeb.SearchController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchRequest"}}},"description":"Search parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SearchResponse"}}},"description":"OK","headers":{}},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search relations","tags":["Search"]}}},"components":{"schemas":{"SearchRequest":{"additionalProperties":false,"description":"Search parameters for relations","properties":{"filters":{"additionalProperties":{"items":{"type":"string"},"type":"array"},"description":"Filters to apply (e.g., status, etc.)","type":"object"},"from":{"description":"Starting offset for pagination","minimum":0,"type":"integer"},"linkable":{"description":"If true, filters results to those linkable by the user","type":"boolean"},"must":{"additionalProperties":true,"description":"Mandatory filters (e.g., source_type, target_type)","properties":{"source_type":{"description":"Source resource type","type":"string"},"target_type":{"description":"Target resource type","type":"string"}},"type":"object"},"query":{"description":"Search query string","type":"string"},"scroll":{"description":"Scroll time (e.g., '1m') to enable scrolling","type":"string"},"scroll_id":{"description":"Scroll ID for retrieving next page (when scrolling)","type":"string"},"size":{"description":"Number of results per page","maximum":100,"minimum":1,"type":"integer"},"sort":{"additionalProperties":{"enum":["asc","desc"],"type":"string"},"description":"Sorting criteria (field: order)","type":"object"}},"title":"SearchRequest","type":"object"},"SearchResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of matching relations","items":{"$ref":"#/components/schemas/RelationSearchResult"},"type":"array"},"scroll_id":{"description":"Scroll ID for retrieving next page (if scroll requested)","nullable":true,"type":"string"}},"required":["data"],"title":"SearchResponse","type":"object"},"RelationSearchResult":{"additionalProperties":true,"description":"A relation as returned by search, including additional fields","properties":{"deleted":{"description":"Soft deletion flag","nullable":true,"type":"boolean"},"deleted_at":{"description":"Deletion timestamp","format":"date-time","nullable":true,"type":"string"},"disabled":{"description":"Disabled flag","nullable":true,"type":"boolean"},"disabled_at":{"description":"Disabled timestamp","format":"date-time","nullable":true,"type":"string"},"disabled_reason":{"description":"Reason for disabling","nullable":true,"type":"string"},"domain_ids":{"description":"All domain IDs involved in the relation","items":{"type":"integer"},"type":"array"},"id":{"description":"Relation ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"ngram_source_name":{"description":"Ngram field for source name","nullable":true,"type":"string"},"ngram_source_name_es":{"description":"Ngram field for source name (Spanish)","nullable":true,"type":"string"},"ngram_target_name":{"description":"Ngram field for target name","nullable":true,"type":"string"},"ngram_target_name_es":{"description":"Ngram field for target name (Spanish)","nullable":true,"type":"string"},"origin":{"description":"Origin of the relation (e.g., 'suggested')","nullable":true,"type":"string"},"source_data":{"additionalProperties":true,"description":"Full source resource data","nullable":true,"type":"object"},"source_domain_ids":{"description":"Domain IDs of the source resource","items":{"type":"integer"},"type":"array"},"source_id":{"description":"Source resource ID","type":"integer"},"source_name":{"description":"Name of the source resource","type":"string"},"source_name_es":{"description":"Source name in Spanish","nullable":true,"type":"string"},"source_type":{"description":"Type of the source resource","type":"string"},"status":{"description":"Status of the relation (pending, approved, rejected)","nullable":true,"type":"string"},"tag_type":{"description":"Tag type derived from tag","nullable":true,"type":"string"},"target_data":{"additionalProperties":true,"description":"Full target resource data","nullable":true,"type":"object"},"target_domain_ids":{"description":"Domain IDs of the target resource","items":{"type":"integer"},"type":"array"},"target_id":{"description":"Target resource ID","type":"integer"},"target_name":{"description":"Name of the target resource","type":"string"},"target_name_es":{"description":"Target name in Spanish","nullable":true,"type":"string"},"target_type":{"description":"Type of the target resource","type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","type":"string"}},"required":["id","domain_ids","source_domain_ids","source_id","source_name","source_type","target_domain_ids","target_id","target_name","target_type","updated_at"],"title":"RelationSearchResult","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Reindex all relations

> Triggers a full reindexing of all relations in Elasticsearch.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/index_search/reindex_all":{"get":{"description":"Triggers a full reindexing of all relations in Elasticsearch.","operationId":"TdLmWeb.SearchController.reindex_all","parameters":[],"responses":{"202":{"description":"Reindexing accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Reindex all relations","tags":["Search"]}}},"components":{"schemas":{"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```


# XLSX

## Upload Excel file to create relations in bulk

> Accepts a multipart/form-data file upload containing relations data, processes it asynchronously, and returns a task reference for tracking the upload status.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/links/upload":{"post":{"description":"Accepts a multipart/form-data file upload containing relations data, processes it asynchronously, and returns a task reference for tracking the upload status.","operationId":"TdLmWeb.XlsxController.upload","parameters":[],"requestBody":{"content":{"multipart/form-data":{"schema":{"$ref":"#/components/schemas/XlsxUploadRequest"}}},"required":true},"responses":{"202":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/XlsxUploadResponse"}}},"description":"Accepted"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmBadRequestMissingParamsResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Upload Excel file to create relations in bulk","tags":["XLSX"]}}},"components":{"schemas":{"XlsxUploadRequest":{"additionalProperties":false,"properties":{"relations":{"description":"Excel file (application/vnd.openxmlformats-officedocument.spreadsheetml.sheet or application/octet-stream)","format":"binary","type":"string"},"source":{"description":"Source resource type (e.g., business_concept)","type":"string"},"target":{"description":"Target resource type (e.g., data_structure)","type":"string"}},"required":["source","target","relations"],"title":"XlsxUploadRequest","type":"object"},"XlsxUploadResponse":{"additionalProperties":false,"properties":{"file_hash":{"description":"MD5 hash of the uploaded file","type":"string"},"status":{"description":"Upload status (e.g., PENDING, EVENT_FAILED)","type":"string"},"task_reference":{"description":"Reference to the background job (e.g., oban:123)","type":"string"}},"required":["status","file_hash","task_reference"],"title":"XlsxUploadResponse","type":"object"},"TdLmBadRequestMissingParamsResponse":{"additionalProperties":false,"properties":{"error":{"description":"Error code (e.g., missing_params)","type":"string"}},"required":["error"],"title":"TdLmBadRequestMissingParamsResponse","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```


# Bulk Updates

## Bulk update status of relations

> Updates the status of multiple relations in a single request.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/status":{"post":{"description":"Updates the status of multiple relations in a single request.","operationId":"TdLmWeb.BulkUpdateStatusController.update","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateStatusRequest"}}},"description":"Update parameters","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/BulkUpdateStatusResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Bulk update status of relations","tags":["Bulk Updates"]}}},"components":{"schemas":{"BulkUpdateStatusRequest":{"additionalProperties":false,"description":"Request to update status of multiple relations","properties":{"relation_ids":{"description":"List of relation IDs","items":{"type":"integer"},"type":"array"},"status":{"description":"New status to apply (e.g., 'approved', 'rejected', 'pending')","enum":["approved","rejected","pending"],"type":"string"}},"required":["relation_ids","status"],"title":"BulkUpdateStatusRequest","type":"object"},"BulkUpdateStatusResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":false,"properties":{"errors":{"additionalProperties":{"$ref":"#/components/schemas/ErrorDetail"},"description":"Errors grouped by reason","type":"object"},"relations":{"description":"List of successfully updated relations","items":{"$ref":"#/components/schemas/RelationSuccessResult"},"type":"array"}},"required":["relations","errors"],"type":"object"}},"required":["data"],"title":"BulkUpdateStatusResponse","type":"object"},"ErrorDetail":{"additionalProperties":false,"description":"Details of errors for a specific reason","properties":{"message":{"description":"Error message","type":"string"},"reason":{"description":"Error reason code","type":"string"},"relations":{"description":"List of relations that failed with this error","items":{"$ref":"#/components/schemas/RelationErrorResult"},"type":"array"}},"required":["message","reason","relations"],"title":"ErrorDetail","type":"object"},"RelationErrorResult":{"additionalProperties":false,"description":"Relation details for error responses (status omitted)","properties":{"id":{"type":"integer"},"source_id":{"type":"integer"},"source_name":{"type":"string"},"source_type":{"type":"string"},"tag_type":{"nullable":true,"type":"string"},"target_id":{"type":"integer"},"target_name":{"type":"string"},"target_type":{"type":"string"}},"required":["id","source_id","source_type","source_name","target_id","target_type","target_name"],"title":"RelationErrorResult","type":"object"},"RelationSuccessResult":{"additionalProperties":false,"description":"Relation details for successful updates (includes status)","properties":{"id":{"description":"Relation ID","type":"integer"},"source_id":{"description":"Source resource ID","type":"integer"},"source_name":{"description":"Source resource name","type":"string"},"source_type":{"description":"Source resource type","type":"string"},"status":{"description":"Updated status","type":"string"},"tag_type":{"description":"Tag type if present","nullable":true,"type":"string"},"target_id":{"description":"Target resource ID","type":"integer"},"target_name":{"description":"Target resource name","type":"string"},"target_type":{"description":"Target resource type","type":"string"}},"required":["id","source_id","source_type","source_name","target_id","target_type","target_name","status"],"title":"RelationSuccessResult","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```


# Graphs

## Get resource graph

> Retrieves a graph of relations for a given resource, enriched with names and versions.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/relations/{resource_id}/graph":{"get":{"description":"Retrieves a graph of relations for a given resource, enriched with names and versions.","operationId":"TdLmWeb.GraphController.graph","parameters":[{"description":"ID of the root resource","in":"path","name":"resource_id","required":true,"schema":{"type":"integer"}},{"description":"Type of the root resource (business_concept, ingest, data_structure)","in":"query","name":"type","required":true,"schema":{"enum":["business_concept","ingest","data_structure"],"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/GraphResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get resource graph","tags":["Graphs"]}}},"components":{"schemas":{"GraphResponse":{"additionalProperties":false,"description":"Graph data containing nodes and edges","properties":{"data":{"additionalProperties":false,"properties":{"edges":{"description":"List of edges","items":{"$ref":"#/components/schemas/EdgeObject"},"type":"array"},"nodes":{"description":"List of nodes","items":{"$ref":"#/components/schemas/NodeObject"},"type":"array"}},"required":["nodes","edges"],"type":"object"}},"required":["data"],"title":"GraphResponse","type":"object"},"EdgeObject":{"additionalProperties":false,"description":"An edge representing a relation between two nodes","properties":{"id":{"description":"Relation ID","type":"integer"},"source_id":{"description":"Source node ID (e.g., 'business_concept:123')","type":"string"},"tag":{"allOf":[{"$ref":"#/components/schemas/TagObject"}],"description":"Associated tag (may be null)","nullable":true},"tags":{"description":"List of tags associated with the edge","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"},"target_id":{"description":"Target node ID (e.g., 'business_concept:124')","type":"string"}},"required":["id","source_id","target_id","tags"],"title":"EdgeObject","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"NodeObject":{"additionalProperties":false,"description":"A node in the graph representing a resource","properties":{"id":{"description":"Unique identifier","type":"string"},"name":{"description":"Resource name (enriched from cache)","nullable":true,"type":"string"},"resource_id":{"description":"Resource ID","type":"integer"},"resource_type":{"description":"Resource type","type":"string"},"version_id":{"description":"Version ID (for business_concept and ingest)","nullable":true,"type":"integer"}},"required":["id","resource_id","resource_type"],"title":"NodeObject","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```


# Tags

## List all tags

> Returns a list of all tags, optionally filtered by query parameters.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/tags":{"get":{"description":"Returns a list of all tags, optionally filtered by query parameters.","operationId":"TdLmWeb.TagController.index","parameters":[{"description":"Filter by tag value fields. The optional `value` parameter is a JSON object that filters tags where the `value` field matches the provided keys.\nCommon filter keys:\n  - `target_type` (string): e.g., \"ingest\", \"data_field\"\n  - `type` (string): e.g., \"business_concept\", \"technical\"\n  - `expandable` (string): e.g., \"true\" or \"false\"\nYou can also use any other key present in the tag's `value` object.\nExample: `{\"target_type\": \"ingest\", \"type\": \"business_concept\"}`\n","explode":true,"in":"query","name":"value","required":false,"schema":{"additionalProperties":true,"type":"object"},"style":"deepObject"}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagListResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List all tags","tags":["Tags"]}}},"components":{"schemas":{"TagListResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of tags","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"}},"required":["data"],"title":"TagListResponse","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Create a new tag

> Creates a new tag with the provided value.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/tags":{"post":{"description":"Creates a new tag with the provided value.","operationId":"TdLmWeb.TagController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRequest"}}},"description":"Tag data","required":true},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagShowResponse"}}},"description":"Created"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmBadRequestResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create a new tag","tags":["Tags"]}}},"components":{"schemas":{"TagRequest":{"additionalProperties":false,"properties":{"tag":{"additionalProperties":false,"description":"Tag data","properties":{"value":{"additionalProperties":true,"description":"Dynamic value of the tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"type":"object"}},"required":["value"],"type":"object"}},"required":["tag"],"title":"TagRequest","type":"object"},"TagShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TagObject"}},"required":["data"],"title":"TagShowResponse","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TdLmBadRequestResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmBadRequestResponse","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnprocessableEntityResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Search tags

> Search tags using filters in the request body.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/tags/search":{"post":{"description":"Search tags using filters in the request body.","operationId":"TdLmWeb.TagController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagSearchRequest"}}},"description":"Search filters","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagListResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search tags","tags":["Tags"]}}},"components":{"schemas":{"TagSearchRequest":{"additionalProperties":false,"description":"Search filters for tags. Can filter by value fields (e.g., target_type).","properties":{"value":{"additionalProperties":true,"description":"Filter by tag value fields","type":"object"}},"title":"TagSearchRequest","type":"object"},"TagListResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of tags","items":{"$ref":"#/components/schemas/TagObject"},"type":"array"}},"required":["data"],"title":"TagListResponse","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Get a tag by ID

> Returns a single tag by its ID.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/tags/{id}":{"get":{"description":"Returns a single tag by its ID.","operationId":"TdLmWeb.TagController.show","parameters":[{"description":"Tag ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagShowResponse"}}},"description":"OK"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a tag by ID","tags":["Tags"]}}},"components":{"schemas":{"TagShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TagObject"}},"required":["data"],"title":"TagShowResponse","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Update a tag

> Updates an existing tag with new data.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/tags/{id}":{"put":{"description":"Updates an existing tag with new data.","operationId":"TdLmWeb.TagController.update","parameters":[{"description":"Tag ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRequest"}}},"description":"Tag data","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagShowResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmBadRequestResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update a tag","tags":["Tags"]}}},"components":{"schemas":{"TagRequest":{"additionalProperties":false,"properties":{"tag":{"additionalProperties":false,"description":"Tag data","properties":{"value":{"additionalProperties":true,"description":"Dynamic value of the tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"type":"object"}},"required":["value"],"type":"object"}},"required":["tag"],"title":"TagRequest","type":"object"},"TagShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TagObject"}},"required":["data"],"title":"TagShowResponse","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TdLmBadRequestResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmBadRequestResponse","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnprocessableEntityResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Delete a tag

> Permanently deletes a tag.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/tags/{id}":{"delete":{"description":"Permanently deletes a tag.","operationId":"TdLmWeb.TagController.delete","parameters":[{"description":"Tag ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"responses":{"204":{"description":"Tag deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a tag","tags":["Tags"]}}},"components":{"schemas":{"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```

## Update a tag

> Updates an existing tag with new data.

```json
{"openapi":"3.0.0","info":{"title":"td-lm","version":"Truedat 8.8.0"},"paths":{"/api/tags/{id}":{"patch":{"description":"Updates an existing tag with new data.","operationId":"TdLmWeb.TagController.update (2)","parameters":[{"description":"Tag ID","in":"path","name":"id","required":true,"schema":{"type":"integer"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagRequest"}}},"description":"Tag data","required":true},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TagShowResponse"}}},"description":"OK"},"400":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmBadRequestResponse"}}},"description":"Bad Request"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdLmInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update a tag","tags":["Tags"]}}},"components":{"schemas":{"TagRequest":{"additionalProperties":false,"properties":{"tag":{"additionalProperties":false,"description":"Tag data","properties":{"value":{"additionalProperties":true,"description":"Dynamic value of the tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"type":"object"}},"required":["value"],"type":"object"}},"required":["tag"],"title":"TagRequest","type":"object"},"TagShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/TagObject"}},"required":["data"],"title":"TagShowResponse","type":"object"},"TagObject":{"additionalProperties":false,"properties":{"id":{"description":"Tag ID","type":"integer"},"value":{"$ref":"#/components/schemas/TagValue"}},"required":["id","value"],"title":"TagObject","type":"object"},"TagValue":{"additionalProperties":true,"description":"Dynamic value of a tag","properties":{"expandable":{"description":"Optional expandable flag","nullable":true,"type":"string"},"target_type":{"description":"Target resource type","type":"string"},"type":{"description":"Tag type","type":"string"}},"required":["target_type","type"],"title":"TagValue","type":"object"},"TdLmBadRequestResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmBadRequestResponse","type":"object"},"TdLmUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnauthorizedResponse","type":"object"},"TdLmForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmForbiddenResponse","type":"object"},"TdLmUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmUnprocessableEntityResponse","type":"object"},"TdLmInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdLmInternalServerErrorResponse","type":"object"}}}}
```


# Connectors Management APIs


# Connector Management APIs

**🔄 Changelog: To learn about the changes introduced in each version, please refer to** [**Truedat Docs**](https://docs.truedat.io)**.**


# Configurations

## List configurations

> Returns a list of configurations, optionally filtered by type.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/configurations":{"get":{"description":"Returns a list of configurations, optionally filtered by type.","operationId":"TdCxWeb.ConfigurationController.index","parameters":[{"description":"Filter by configuration type","in":"query","name":"type","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationIndexResponse"}}},"description":"Configurations"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List configurations","tags":["Configurations"]}}},"components":{"schemas":{"ConfigurationIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of configurations","items":{"$ref":"#/components/schemas/Configuration"},"type":"array"}},"required":["data"],"title":"ConfigurationIndexResponse","type":"object"},"Configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content (key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Rich content with origin metadata","nullable":true,"type":"object"},"external_id":{"description":"Configuration external identifier","type":"string"},"id":{"description":"Configuration internal ID","type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"secrets_key":{"description":"Key for secrets (null if no secrets)","nullable":true,"type":"string"},"type":{"description":"Configuration type (template name)","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","external_id","type","content"],"title":"Configuration","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Create a configuration

> Creates a new configuration resource.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/configurations":{"post":{"description":"Creates a new configuration resource.","operationId":"TdCxWeb.ConfigurationController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationCreateRequest"}}},"description":"Configuration","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationShowResponse"}}},"description":"Created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create a configuration","tags":["Configurations"]}}},"components":{"schemas":{"ConfigurationCreateRequest":{"additionalProperties":false,"properties":{"configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content","type":"object"},"external_id":{"description":"Unique external ID","type":"string"},"type":{"description":"Configuration type (template name)","type":"string"}},"required":["external_id","type"],"type":"object"}},"required":["configuration"],"title":"ConfigurationCreateRequest","type":"object"},"ConfigurationShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Configuration"}},"required":["data"],"title":"ConfigurationShowResponse","type":"object"},"Configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content (key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Rich content with origin metadata","nullable":true,"type":"object"},"external_id":{"description":"Configuration external identifier","type":"string"},"id":{"description":"Configuration internal ID","type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"secrets_key":{"description":"Key for secrets (null if no secrets)","nullable":true,"type":"string"},"type":{"description":"Configuration type (template name)","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","external_id","type","content"],"title":"Configuration","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Sign a payload with a configuration

> Signs a payload with a configuration.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/configurations/{configuration_external_id}/sign":{"post":{"description":"Signs a payload with a configuration.","operationId":"TdCxWeb.ConfigurationSignerController.create","parameters":[{"description":"Configuration external ID","in":"path","name":"configuration_external_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationSignRequest"}}},"description":"Sign payload","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationSignResponse"}}},"description":"Signed"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Sign a payload with a configuration","tags":["Configurations"]}}},"components":{"schemas":{"ConfigurationSignRequest":{"additionalProperties":false,"properties":{"payload":{"additionalProperties":true,"description":"Payload to be signed","type":"object"}},"required":["payload"],"title":"ConfigurationSignRequest","type":"object"},"ConfigurationSignResponse":{"additionalProperties":false,"properties":{"token":{"description":"Signed JWT token","type":"string"}},"required":["token"],"title":"ConfigurationSignResponse","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Get a configuration by external ID

> Fetches a single configuration using its external ID.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/configurations/{external_id}":{"get":{"description":"Fetches a single configuration using its external ID.","operationId":"TdCxWeb.ConfigurationController.show","parameters":[{"description":"Configuration external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationShowResponse"}}},"description":"Configuration"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a configuration by external ID","tags":["Configurations"]}}},"components":{"schemas":{"ConfigurationShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Configuration"}},"required":["data"],"title":"ConfigurationShowResponse","type":"object"},"Configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content (key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Rich content with origin metadata","nullable":true,"type":"object"},"external_id":{"description":"Configuration external identifier","type":"string"},"id":{"description":"Configuration internal ID","type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"secrets_key":{"description":"Key for secrets (null if no secrets)","nullable":true,"type":"string"},"type":{"description":"Configuration type (template name)","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","external_id","type","content"],"title":"Configuration","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Update a configuration

> Updates an existing configuration identified by its external ID.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/configurations/{external_id}":{"put":{"description":"Updates an existing configuration identified by its external ID.","operationId":"TdCxWeb.ConfigurationController.update","parameters":[{"description":"Configuration external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationUpdateRequest"}}},"description":"Configuration","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationShowResponse"}}},"description":"Updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update a configuration","tags":["Configurations"]}}},"components":{"schemas":{"ConfigurationUpdateRequest":{"additionalProperties":false,"properties":{"configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content","nullable":true,"type":"object"},"type":{"description":"Configuration type","nullable":true,"type":"string"}},"type":"object"}},"required":["configuration"],"title":"ConfigurationUpdateRequest","type":"object"},"ConfigurationShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Configuration"}},"required":["data"],"title":"ConfigurationShowResponse","type":"object"},"Configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content (key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Rich content with origin metadata","nullable":true,"type":"object"},"external_id":{"description":"Configuration external identifier","type":"string"},"id":{"description":"Configuration internal ID","type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"secrets_key":{"description":"Key for secrets (null if no secrets)","nullable":true,"type":"string"},"type":{"description":"Configuration type (template name)","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","external_id","type","content"],"title":"Configuration","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Delete a configuration

> Permanently deletes a configuration by its external ID.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/configurations/{external_id}":{"delete":{"description":"Permanently deletes a configuration by its external ID.","operationId":"TdCxWeb.ConfigurationController.delete","parameters":[{"description":"Configuration external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Configuration deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a configuration","tags":["Configurations"]}}},"components":{"schemas":{"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Update a configuration

> Updates an existing configuration identified by its external ID.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/configurations/{external_id}":{"patch":{"description":"Updates an existing configuration identified by its external ID.","operationId":"TdCxWeb.ConfigurationController.update (2)","parameters":[{"description":"Configuration external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationUpdateRequest"}}},"description":"Configuration","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/ConfigurationShowResponse"}}},"description":"Updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update a configuration","tags":["Configurations"]}}},"components":{"schemas":{"ConfigurationUpdateRequest":{"additionalProperties":false,"properties":{"configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content","nullable":true,"type":"object"},"type":{"description":"Configuration type","nullable":true,"type":"string"}},"type":"object"}},"required":["configuration"],"title":"ConfigurationUpdateRequest","type":"object"},"ConfigurationShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Configuration"}},"required":["data"],"title":"ConfigurationShowResponse","type":"object"},"Configuration":{"additionalProperties":false,"properties":{"content":{"additionalProperties":true,"description":"Configuration content (key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Rich content with origin metadata","nullable":true,"type":"object"},"external_id":{"description":"Configuration external identifier","type":"string"},"id":{"description":"Configuration internal ID","type":"integer"},"inserted_at":{"format":"date-time","type":"string"},"secrets_key":{"description":"Key for secrets (null if no secrets)","nullable":true,"type":"string"},"type":{"description":"Configuration type (template name)","type":"string"},"updated_at":{"format":"date-time","type":"string"}},"required":["id","external_id","type","content"],"title":"Configuration","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```


# Health Check

## Echo payload

> Returns the same payload received in the request.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/echo":{"post":{"description":"Returns the same payload received in the request.","operationId":"TdCxWeb.EchoController.echo","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Echo payload","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"additionalProperties":true,"type":"object"}}},"description":"Returns the same payload received in the request"}},"summary":"Echo payload","tags":["Health Check"]}}}}
```

## Health check

> Simple health check endpoint that returns 'pong'

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/ping":{"get":{"description":"Simple health check endpoint that returns 'pong'","operationId":"TdCxWeb.PingController.ping","parameters":[],"responses":{"200":{"content":{"text/plain":{"schema":{"type":"string"}}},"description":"Service is reachable"}},"summary":"Health check","tags":["Health Check"]}}}}
```


# Jobs

## Search available job filters

> Searches available job filters.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/job_filters/search":{"post":{"description":"Searches available job filters.","operationId":"TdCxWeb.JobFilterController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobFilterSearchRequest"}}},"description":"Job filter search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobFilterSearchResponse"}}},"description":"Job filter search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search available job filters","tags":["Jobs"]}}},"components":{"schemas":{"JobFilterSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"description":"Current filters","nullable":true,"type":"object"},"must":{"additionalProperties":true,"description":"Must conditions","nullable":true,"type":"object"}},"title":"JobFilterSearchRequest","type":"object"},"JobFilterSearchResponse":{"additionalProperties":false,"properties":{"data":{"additionalProperties":{"additionalProperties":false,"properties":{"buckets":{"items":{"additionalProperties":false,"properties":{"count":{"type":"integer"},"key":{"type":"string"}},"required":["key"],"type":"object"},"type":"array"},"values":{"items":{"type":"string"},"type":"array"}},"required":["buckets","values"],"type":"object"},"description":"Aggregated filter values (keyed by filter field)","type":"object"}},"required":["data"],"title":"JobFilterSearchResponse","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Search jobs

> Searches jobs.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/jobs/search":{"post":{"description":"Searches jobs.","operationId":"TdCxWeb.JobController.search","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSearchRequest"}}},"description":"Job search request","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobSearchResponse"}}},"description":"Job search response"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Search jobs","tags":["Jobs"]}}},"components":{"schemas":{"JobSearchRequest":{"additionalProperties":true,"properties":{"filters":{"additionalProperties":true,"description":"Filter criteria","nullable":true,"type":"object"},"must":{"additionalProperties":true,"description":"Must conditions","nullable":true,"type":"object"},"page":{"default":0,"description":"Page number (0-indexed)","nullable":true,"type":"integer"},"query":{"description":"Search query text","nullable":true,"type":"string"},"size":{"default":50,"description":"Page size","maximum":100,"minimum":1,"nullable":true,"type":"integer"}},"title":"JobSearchRequest","type":"object"},"JobSearchResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of jobs matching the search","items":{"$ref":"#/components/schemas/Job"},"type":"array"}},"required":["data"],"title":"JobSearchResponse","type":"object"},"Job":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"source":{"properties":{"active":{"nullable":true,"type":"boolean"},"external_id":{"type":"string"},"id":{"type":"integer"},"type":{"type":"string"}},"required":["id","external_id","type"],"type":"object"}},"type":"object"},"end_date":{"description":"End timestamp","format":"date-time","nullable":true,"type":"string"},"external_id":{"description":"Job external identifier","type":"string"},"id":{"description":"Job internal ID","nullable":true,"type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"message":{"description":"Status message","nullable":true,"type":"string"},"source":{"additionalProperties":false,"nullable":true,"properties":{"external_id":{"type":"string"},"type":{"type":"string"}},"required":["external_id","type"],"type":"object"},"source_id":{"description":"Source internal ID","nullable":true,"type":"integer"},"start_date":{"description":"Start timestamp","format":"date-time","nullable":true,"type":"string"},"status":{"description":"Job status","nullable":true,"type":"string"},"type":{"description":"Job type","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["external_id"],"title":"Job","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Reindex all jobs

> Starts a background job to reindex all jobs in the search index

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/jobs/search/reindex_all":{"get":{"description":"Starts a background job to reindex all jobs in the search index","operationId":"TdCxWeb.SearchController.reindex_all","parameters":[],"responses":{"202":{"description":"Accepted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Reindex all jobs","tags":["Jobs"]}}},"components":{"schemas":{"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Get a job by external ID

> Fetches a job by external ID.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/jobs/{external_id}":{"get":{"description":"Fetches a job by external ID.","operationId":"TdCxWeb.JobController.show","parameters":[{"description":"Job external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobShowResponse"}}},"description":"Job"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a job by external ID","tags":["Jobs"]}}},"components":{"schemas":{"JobShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Job"}},"required":["data"],"title":"JobShowResponse","type":"object"},"Job":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"source":{"properties":{"active":{"nullable":true,"type":"boolean"},"external_id":{"type":"string"},"id":{"type":"integer"},"type":{"type":"string"}},"required":["id","external_id","type"],"type":"object"}},"type":"object"},"end_date":{"description":"End timestamp","format":"date-time","nullable":true,"type":"string"},"external_id":{"description":"Job external identifier","type":"string"},"id":{"description":"Job internal ID","nullable":true,"type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"message":{"description":"Status message","nullable":true,"type":"string"},"source":{"additionalProperties":false,"nullable":true,"properties":{"external_id":{"type":"string"},"type":{"type":"string"}},"required":["external_id","type"],"type":"object"},"source_id":{"description":"Source internal ID","nullable":true,"type":"integer"},"start_date":{"description":"Start timestamp","format":"date-time","nullable":true,"type":"string"},"status":{"description":"Job status","nullable":true,"type":"string"},"type":{"description":"Job type","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["external_id"],"title":"Job","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## List jobs for a source

> Returns jobs for a source.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources/{source_external_id}/jobs":{"get":{"description":"Returns jobs for a source.","operationId":"TdCxWeb.JobController.index","parameters":[{"description":"Source external ID","in":"path","name":"source_external_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobIndexResponse"}}},"description":"Jobs"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List jobs for a source","tags":["Jobs"]}}},"components":{"schemas":{"JobIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of jobs for the source","items":{"$ref":"#/components/schemas/Job"},"type":"array"}},"required":["data"],"title":"JobIndexResponse","type":"object"},"Job":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"source":{"properties":{"active":{"nullable":true,"type":"boolean"},"external_id":{"type":"string"},"id":{"type":"integer"},"type":{"type":"string"}},"required":["id","external_id","type"],"type":"object"}},"type":"object"},"end_date":{"description":"End timestamp","format":"date-time","nullable":true,"type":"string"},"external_id":{"description":"Job external identifier","type":"string"},"id":{"description":"Job internal ID","nullable":true,"type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"message":{"description":"Status message","nullable":true,"type":"string"},"source":{"additionalProperties":false,"nullable":true,"properties":{"external_id":{"type":"string"},"type":{"type":"string"}},"required":["external_id","type"],"type":"object"},"source_id":{"description":"Source internal ID","nullable":true,"type":"integer"},"start_date":{"description":"Start timestamp","format":"date-time","nullable":true,"type":"string"},"status":{"description":"Job status","nullable":true,"type":"string"},"type":{"description":"Job type","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["external_id"],"title":"Job","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Create a job for a source

> Creates a job for a source.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources/{source_external_id}/jobs":{"post":{"description":"Creates a job for a source.","operationId":"TdCxWeb.JobController.create","parameters":[{"description":"Source external ID","in":"path","name":"source_external_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobCreateRequest"}}},"description":"Job","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/JobShowResponse"}}},"description":"Created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create a job for a source","tags":["Jobs"]}}},"components":{"schemas":{"JobCreateRequest":{"additionalProperties":false,"properties":{"job":{"additionalProperties":false,"properties":{"parameters":{"additionalProperties":true,"description":"Job parameters","nullable":true,"type":"object"},"type":{"description":"Job type","type":"string"}},"required":["type"],"type":"object"}},"required":["job"],"title":"JobCreateRequest","type":"object"},"JobShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Job"}},"required":["data"],"title":"JobShowResponse","type":"object"},"Job":{"additionalProperties":false,"properties":{"_embedded":{"additionalProperties":false,"nullable":true,"properties":{"events":{"items":{"additionalProperties":true,"type":"object"},"nullable":true,"type":"array"},"source":{"properties":{"active":{"nullable":true,"type":"boolean"},"external_id":{"type":"string"},"id":{"type":"integer"},"type":{"type":"string"}},"required":["id","external_id","type"],"type":"object"}},"type":"object"},"end_date":{"description":"End timestamp","format":"date-time","nullable":true,"type":"string"},"external_id":{"description":"Job external identifier","type":"string"},"id":{"description":"Job internal ID","nullable":true,"type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"message":{"description":"Status message","nullable":true,"type":"string"},"source":{"additionalProperties":false,"nullable":true,"properties":{"external_id":{"type":"string"},"type":{"type":"string"}},"required":["external_id","type"],"type":"object"},"source_id":{"description":"Source internal ID","nullable":true,"type":"integer"},"start_date":{"description":"Start timestamp","format":"date-time","nullable":true,"type":"string"},"status":{"description":"Job status","nullable":true,"type":"string"},"type":{"description":"Job type","nullable":true,"type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["external_id"],"title":"Job","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```


# Events

## List events for a job

> Returns the events for a job.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/jobs/{job_external_id}/events":{"get":{"description":"Returns the events for a job.","operationId":"TdCxWeb.EventController.index","parameters":[{"description":"Job external ID","in":"path","name":"job_external_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventIndexResponse"}}},"description":"Events"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List events for a job","tags":["Events"]}}},"components":{"schemas":{"EventIndexResponse":{"additionalProperties":false,"properties":{"data":{"description":"List of events for the job","items":{"$ref":"#/components/schemas/Event"},"type":"array"}},"required":["data"],"title":"EventIndexResponse","type":"object"},"Event":{"additionalProperties":false,"properties":{"id":{"description":"Event internal ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"job_id":{"description":"Job internal ID","nullable":true,"type":"integer"},"message":{"description":"Event message","type":"string"},"metadata":{"additionalProperties":true,"description":"Additional event metadata","nullable":true,"type":"object"},"type":{"description":"Event type","type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["id","type","message"],"title":"Event","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Create an event for a job

> Creates an event for a job.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/jobs/{job_external_id}/events":{"post":{"description":"Creates an event for a job.","operationId":"TdCxWeb.EventController.create","parameters":[{"description":"Job external ID","in":"path","name":"job_external_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventCreateRequest"}}},"description":"Event","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/EventShowResponse"}}},"description":"Created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create an event for a job","tags":["Events"]}}},"components":{"schemas":{"EventCreateRequest":{"additionalProperties":false,"properties":{"event":{"additionalProperties":false,"properties":{"message":{"description":"Event message","type":"string"},"metadata":{"additionalProperties":true,"description":"Additional event metadata","nullable":true,"type":"object"},"type":{"description":"Event type","type":"string"}},"required":["type","message"],"type":"object"}},"required":["event"],"title":"EventCreateRequest","type":"object"},"EventShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Event"}},"required":["data"],"title":"EventShowResponse","type":"object"},"Event":{"additionalProperties":false,"properties":{"id":{"description":"Event internal ID","type":"integer"},"inserted_at":{"description":"Creation timestamp","format":"date-time","nullable":true,"type":"string"},"job_id":{"description":"Job internal ID","nullable":true,"type":"integer"},"message":{"description":"Event message","type":"string"},"metadata":{"additionalProperties":true,"description":"Additional event metadata","nullable":true,"type":"object"},"type":{"description":"Event type","type":"string"},"updated_at":{"description":"Last update timestamp","format":"date-time","nullable":true,"type":"string"}},"required":["id","type","message"],"title":"Event","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```


# Sources

## List sources

> Returns a list of sources.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources":{"get":{"description":"Returns a list of sources.","operationId":"TdCxWeb.SourceController.index","parameters":[{"description":"Filter by source type","in":"query","name":"type","required":false,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceIndexResponse"}}},"description":"Sources"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"List sources","tags":["Sources"]}}},"components":{"schemas":{"SourceIndexResponse":{"additionalProperties":false,"properties":{"data":{"items":{"$ref":"#/components/schemas/Source"},"type":"array"}},"required":["data"],"title":"SourceIndexResponse","type":"object"},"Source":{"additionalProperties":false,"properties":{"active":{"description":"Whether the source is active","type":"boolean"},"config":{"additionalProperties":true,"description":"Source configuration (flattened key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Configuration with metadata (value, origin)","nullable":true,"type":"object"},"external_id":{"description":"Source external identifier","type":"string"},"id":{"description":"Source internal ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"job_types":{"description":"List of job types supported by the source","items":{"type":"string"},"nullable":true,"type":"array"},"secrets":{"additionalProperties":true,"description":"Source secrets (visible with proper permissions)","nullable":true,"type":"object"},"type":{"description":"Source type (template name)","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","external_id","type","active"],"title":"Source","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Create a source

> Creates a source.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources":{"post":{"description":"Creates a source.","operationId":"TdCxWeb.SourceController.create","parameters":[],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceCreateRequest"}}},"description":"Source","required":false},"responses":{"201":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceShowResponse"}}},"description":"Created"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Create a source","tags":["Sources"]}}},"components":{"schemas":{"SourceCreateRequest":{"properties":{"source":{"additionalProperties":false,"properties":{"active":{"description":"Whether the source is active","nullable":true,"type":"boolean"},"config":{"additionalProperties":true,"type":"object"},"external_id":{"type":"string"},"type":{"type":"string"}},"required":["external_id","type"],"type":"object"}},"required":["source"],"title":"SourceCreateRequest","type":"object"},"SourceShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Source"}},"required":["data"],"title":"SourceShowResponse","type":"object"},"Source":{"additionalProperties":false,"properties":{"active":{"description":"Whether the source is active","type":"boolean"},"config":{"additionalProperties":true,"description":"Source configuration (flattened key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Configuration with metadata (value, origin)","nullable":true,"type":"object"},"external_id":{"description":"Source external identifier","type":"string"},"id":{"description":"Source internal ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"job_types":{"description":"List of job types supported by the source","items":{"type":"string"},"nullable":true,"type":"array"},"secrets":{"additionalProperties":true,"description":"Source secrets (visible with proper permissions)","nullable":true,"type":"object"},"type":{"description":"Source type (template name)","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","external_id","type","active"],"title":"Source","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Get a source by external ID

> Fetches a source by external ID.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources/{external_id}":{"get":{"description":"Fetches a source by external ID.","operationId":"TdCxWeb.SourceController.show","parameters":[{"description":"Source external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceShowResponse"}}},"description":"Source"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Get a source by external ID","tags":["Sources"]}}},"components":{"schemas":{"SourceShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Source"}},"required":["data"],"title":"SourceShowResponse","type":"object"},"Source":{"additionalProperties":false,"properties":{"active":{"description":"Whether the source is active","type":"boolean"},"config":{"additionalProperties":true,"description":"Source configuration (flattened key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Configuration with metadata (value, origin)","nullable":true,"type":"object"},"external_id":{"description":"Source external identifier","type":"string"},"id":{"description":"Source internal ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"job_types":{"description":"List of job types supported by the source","items":{"type":"string"},"nullable":true,"type":"array"},"secrets":{"additionalProperties":true,"description":"Source secrets (visible with proper permissions)","nullable":true,"type":"object"},"type":{"description":"Source type (template name)","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","external_id","type","active"],"title":"Source","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Update a source or source configuration

> Update either the source properties or the source configuration. Use 'source' key for general source updates or 'source\_config' key for configuration updates.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources/{external_id}":{"put":{"description":"Update either the source properties or the source configuration. Use 'source' key for general source updates or 'source_config' key for configuration updates.","operationId":"TdCxWeb.SourceController.update","parameters":[{"description":"Source external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceUpdateUnionRequest"}}},"description":"Source update","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceShowResponse"}}},"description":"Updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update a source or source configuration","tags":["Sources"]}}},"components":{"schemas":{"SourceUpdateUnionRequest":{"anyOf":[{"$ref":"#/components/schemas/SourceUpdateRequestSource"},{"$ref":"#/components/schemas/SourceUpdateRequestConfig"}],"description":"Update request that can contain either 'source' (general source update) or 'source_config' (configuration update). Only one of them should be provided.","title":"SourceUpdateUnionRequest"},"SourceUpdateRequestSource":{"additionalProperties":false,"properties":{"source":{"additionalProperties":false,"properties":{"active":{"description":"Active status","nullable":true,"type":"boolean"},"config":{"additionalProperties":true,"description":"Source configuration","nullable":true,"type":"object"},"type":{"description":"Source type","nullable":true,"type":"string"}},"type":"object"}},"required":["source"],"title":"SourceUpdateRequestSource","type":"object"},"SourceUpdateRequestConfig":{"additionalProperties":false,"properties":{"source_config":{"additionalProperties":true,"description":"Source configuration object to merge/update","type":"object"}},"required":["source_config"],"title":"SourceUpdateRequestConfig","type":"object"},"SourceShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Source"}},"required":["data"],"title":"SourceShowResponse","type":"object"},"Source":{"additionalProperties":false,"properties":{"active":{"description":"Whether the source is active","type":"boolean"},"config":{"additionalProperties":true,"description":"Source configuration (flattened key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Configuration with metadata (value, origin)","nullable":true,"type":"object"},"external_id":{"description":"Source external identifier","type":"string"},"id":{"description":"Source internal ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"job_types":{"description":"List of job types supported by the source","items":{"type":"string"},"nullable":true,"type":"array"},"secrets":{"additionalProperties":true,"description":"Source secrets (visible with proper permissions)","nullable":true,"type":"object"},"type":{"description":"Source type (template name)","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","external_id","type","active"],"title":"Source","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Delete a source

> Deletes a source.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources/{external_id}":{"delete":{"description":"Deletes a source.","operationId":"TdCxWeb.SourceController.delete","parameters":[{"description":"Source external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"responses":{"204":{"description":"Source deleted"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Delete a source","tags":["Sources"]}}},"components":{"schemas":{"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```

## Update a source or source configuration

> Update either the source properties or the source configuration. Use 'source' key for general source updates or 'source\_config' key for configuration updates.

```json
{"openapi":"3.0.0","info":{"title":"td-cx","version":"Truedat 8.9.3"},"paths":{"/api/sources/{external_id}":{"patch":{"description":"Update either the source properties or the source configuration. Use 'source' key for general source updates or 'source_config' key for configuration updates.","operationId":"TdCxWeb.SourceController.update (2)","parameters":[{"description":"Source external ID","in":"path","name":"external_id","required":true,"schema":{"type":"string"}}],"requestBody":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceUpdateUnionRequest"}}},"description":"Source update","required":false},"responses":{"200":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/SourceShowResponse"}}},"description":"Updated"},"401":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnauthorizedResponse"}}},"description":"Unauthorized"},"403":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxForbiddenResponse"}}},"description":"Forbidden"},"404":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxNotFoundResponse"}}},"description":"Not found"},"422":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxUnprocessableEntityResponse"}}},"description":"Unprocessable Entity"},"500":{"content":{"application/json":{"schema":{"$ref":"#/components/schemas/TdCxInternalServerErrorResponse"}}},"description":"Internal Server Error"}},"summary":"Update a source or source configuration","tags":["Sources"]}}},"components":{"schemas":{"SourceUpdateUnionRequest":{"anyOf":[{"$ref":"#/components/schemas/SourceUpdateRequestSource"},{"$ref":"#/components/schemas/SourceUpdateRequestConfig"}],"description":"Update request that can contain either 'source' (general source update) or 'source_config' (configuration update). Only one of them should be provided.","title":"SourceUpdateUnionRequest"},"SourceUpdateRequestSource":{"additionalProperties":false,"properties":{"source":{"additionalProperties":false,"properties":{"active":{"description":"Active status","nullable":true,"type":"boolean"},"config":{"additionalProperties":true,"description":"Source configuration","nullable":true,"type":"object"},"type":{"description":"Source type","nullable":true,"type":"string"}},"type":"object"}},"required":["source"],"title":"SourceUpdateRequestSource","type":"object"},"SourceUpdateRequestConfig":{"additionalProperties":false,"properties":{"source_config":{"additionalProperties":true,"description":"Source configuration object to merge/update","type":"object"}},"required":["source_config"],"title":"SourceUpdateRequestConfig","type":"object"},"SourceShowResponse":{"additionalProperties":false,"properties":{"data":{"$ref":"#/components/schemas/Source"}},"required":["data"],"title":"SourceShowResponse","type":"object"},"Source":{"additionalProperties":false,"properties":{"active":{"description":"Whether the source is active","type":"boolean"},"config":{"additionalProperties":true,"description":"Source configuration (flattened key-value pairs)","type":"object"},"dynamic_content":{"additionalProperties":true,"description":"Configuration with metadata (value, origin)","nullable":true,"type":"object"},"external_id":{"description":"Source external identifier","type":"string"},"id":{"description":"Source internal ID","type":"integer"},"inserted_at":{"format":"date-time","nullable":true,"type":"string"},"job_types":{"description":"List of job types supported by the source","items":{"type":"string"},"nullable":true,"type":"array"},"secrets":{"additionalProperties":true,"description":"Source secrets (visible with proper permissions)","nullable":true,"type":"object"},"type":{"description":"Source type (template name)","type":"string"},"updated_at":{"format":"date-time","nullable":true,"type":"string"}},"required":["id","external_id","type","active"],"title":"Source","type":"object"},"TdCxUnauthorizedResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnauthorizedResponse","type":"object"},"TdCxForbiddenResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxForbiddenResponse","type":"object"},"TdCxNotFoundResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxNotFoundResponse","type":"object"},"TdCxUnprocessableEntityResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxUnprocessableEntityResponse","type":"object"},"TdCxInternalServerErrorResponse":{"properties":{"errors":{"properties":{"detail":{"type":"string"}},"type":"object"}},"title":"TdCxInternalServerErrorResponse","type":"object"}}}}
```


# v8

In this section you will be able to find all features and fixes released with Truedat's versions 8.x


# v8.9

Version released on 03/08/2026

### Features and fixes delivered with this release

#### Features&#xD;&#xD;

* TD-8272 In 'Manage requests' page, add option to filter by requests placed on behalf of other users.
* TD-8257 Bulk delete and update of grants.
* TD-8270 Improve structures reindex process.
* TD-8297 Standardize agent data-access tools: paginate nested collections instead of bulk-fetching.
* TD-8337 Vulnerabilities.
* TD-8306 Add API documentation to Gitbook.

#### Fixes&#xD;

* TD-7953 In implementations, Linked structures filter has disappeared.
* TD-7767 Profiling tab for parent structures not displayed.
* TD-8274 \[HF] In structures, Grants tab displays only direct grants.
* TD-8371 \[HF] hackney 4.x incompatibilities Elasticsearch HTTP/2.
* TD-8296 Agent stream failures due to Finch connection pool exhaustion on RetrieveBusinessConcept.
* TD-8295 Agents are retrieving images in the business concept view.


# v8.8

Version released on 13/07/2026

### Features and fixes delivered with this release

#### Features&#xD;&#xD;

* TD-7968 Concepts suggestions to use AI agentic workflow&#x20;
* TD-7965 Notes suggestions to use AI agentic workflow
* TD-8139 AI assistant to be used by non-admin users&#x20;
* TD-8101 Improve context management Conversation Memory Budget&#x20;
* TD-8210 Implementations download and upload to use implementation ref&#x20;
* TD-8062 Move implementations excel upload to centralised process&#x20;
* TD-8212 Template's name and label to have maximum of 31 characters&#x20;
* TD-8313 In structure's detail, domain modal change and confirmation message added
* TD-8307 APIs documentation for td-bg, td-dd, td-dq, td-cx and td-lm
* TD-8316 Add source\_id to ProfileExecution data\_structure embedding&#x20;

#### Fixes&#xD;

* TD-8276 Blank spaces displayed as code in fields with markdown widget
* TD-8140 In structures, tabs Impact and Lineage are displayed to users with no permission to view lineage
* TD-8278 Visual bug Dominio|Grupo|Tipo fields overlap in /structures/:id view
* TD-8241 Concept Relation Graph zoom Not available if has too many nodes
* TD-8280 OIDC verify\_none is not working




---

[Next Page](/llms-full.txt/1)

