{ "openapi": "3.0.1", "info": { "title": "Fenergo Nebula Reports Command", "description": "**Reports Command API**:


Reports Command API provides endpoints in order to manage and configure all related models and their versions.


**Reports Command API provides**:
", "version": "2.0" }, "servers": [ { "url": "/reportscommand" } ], "paths": { "/api/v2/Categories": { "post": { "tags": [ "Categories", "v2" ], "summary": "Create a new query category", "operationId": "CreateCategory", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/CreateCategoryDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatedCategoryDtoServiceResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceResponse" } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Categories/{categoryId}": { "put": { "tags": [ "Categories", "v2" ], "summary": "Update an existing query category", "operationId": "UpdateCategory", "parameters": [ { "name": "categoryId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/UpdateCategoryDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Not Found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } }, "delete": { "tags": [ "Categories", "v2" ], "summary": "Delete (soft-delete) a query category", "operationId": "DeleteCategory", "parameters": [ { "name": "categoryId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Not Found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable": { "post": { "tags": [ "CustomTable", "v2" ], "summary": "Create a new custom table.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "CreateCustomTable", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/CreateCustomTableDtoServiceRequest" } ] } } } }, "responses": { "201": { "description": "Created. Custom table created successfully.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatedCustomTableDtoServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/name": { "put": { "tags": [ "CustomTable", "v2" ], "summary": "Rename an existing custom table.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "RenameCustomTable", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/RenameCustomTableDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "NoContent. Custom table renamed successfully." }, "400": { "description": "Bad request. The request has missing/invalid values.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/type": { "put": { "tags": [ "CustomTable", "v2" ], "summary": "Set the type of an existing custom table.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "SetCustomTableType", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/SetCustomTableTypeDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "NoContent. Table type updated successfully." }, "400": { "description": "Bad request. The request has missing/invalid values.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/description": { "put": { "tags": [ "CustomTable", "v2" ], "summary": "Update the description of an existing custom table.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "UpdateCustomTableDescription", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/UpdateCustomTableDescriptionDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "NoContent. Description updated successfully." }, "400": { "description": "Bad request. The request has missing/invalid values.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/schema": { "put": { "tags": [ "CustomTable", "v2" ], "summary": "Replace the schema (column definitions) of a custom table.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "EditCustomTableSchema", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/EditCustomTableSchemaDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Not Found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}": { "delete": { "tags": [ "CustomTable", "v2" ], "summary": "Delete an existing custom table.", "description": "

Required permissions:
Following permissions are required: ReportingDelete", "operationId": "DeleteCustomTable", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "204": { "description": "NoContent. Custom table deleted successfully." }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal Server Error" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/duplicate": { "post": { "tags": [ "CustomTable", "v2" ], "summary": "Duplicate a custom table to a new table with a given name.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "DuplicateCustomTable", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/DuplicateCustomTableDtoServiceRequest" } ] } } } }, "responses": { "201": { "description": "Created. Custom table duplicated successfully.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatedCustomTableDtoServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The source custom table was not found or deleted.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/data/preview": { "post": { "tags": [ "CustomTable", "v2" ], "summary": "Preview the schema inferred from a CSV file without persisting any data.\nReturns proposed column names and Glue types for user confirmation.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "PreviewImportCustomTableData", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" } } }, "encoding": { "file": { "style": "form" } } }, "application/json": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" } } }, "encoding": { "file": { "style": "form" } } } } }, "responses": { "200": { "description": "OK. Returns the proposed column schema and sampled row count.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/PreviewImportCustomTableDataDtoServiceResponse" } } } }, "400": { "description": "Bad request. The file is invalid, empty, or too large.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/data": { "post": { "tags": [ "CustomTable", "v2" ], "summary": "Commit a CSV upload with a confirmed column schema. Stores data in S3 and registers the table in Glue.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "ImportCustomTableData", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" }, "mode": { "type": "string" }, "columns": { "type": "string" } } }, "encoding": { "file": { "style": "form" }, "mode": { "style": "form" }, "columns": { "style": "form" } } }, "application/json": { "schema": { "type": "object", "properties": { "file": { "type": "string", "format": "binary" }, "mode": { "type": "string" }, "columns": { "type": "string" } } }, "encoding": { "file": { "style": "form" }, "mode": { "style": "form" }, "columns": { "style": "form" } } } } }, "responses": { "204": { "description": "NoContent. Import completed successfully." }, "400": { "description": "Bad request. The file is invalid or the column spec is missing.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/rows": { "post": { "tags": [ "CustomTable", "v2" ], "summary": "Append a single row to a custom table.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "AddCustomTableRow", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/AddCustomTableRowDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "NoContent. Row appended successfully." }, "400": { "description": "Bad request. Schema is empty or request data is missing.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found or is deleted.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/CustomTable/{id}/rows/{rowIndex}": { "put": { "tags": [ "CustomTable", "v2" ], "summary": "Update a single row in a custom table by its 0-based index.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "UpdateCustomTableRow", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "rowIndex", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/UpdateCustomTableRowDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "NoContent. Row updated successfully." }, "400": { "description": "Bad request. Row index is out of bounds or request data is missing.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found or is deleted.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } }, "delete": { "tags": [ "CustomTable", "v2" ], "summary": "Delete a single row from a custom table by its 0-based index.", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "DeleteCustomTableRow", "parameters": [ { "name": "id", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "rowIndex", "in": "path", "required": true, "schema": { "type": "integer", "format": "int32" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "204": { "description": "NoContent. Row deleted successfully." }, "400": { "description": "Bad request. Row index is out of bounds.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The custom table was not found or is deleted.", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Favourites/{queryId}": { "post": { "tags": [ "Favourites", "v2" ], "summary": "Add a query to the current user's favourites", "operationId": "AddFavourite", "parameters": [ { "name": "queryId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Not Found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } }, "delete": { "tags": [ "Favourites", "v2" ], "summary": "Remove a query from the current user's favourites", "operationId": "RemoveFavourite", "parameters": [ { "name": "queryId", "in": "path", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Not Found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Query": { "post": { "tags": [ "Query", "v2" ], "summary": "Create a new Query definition", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "CreateSqlQueryDefinitionV2", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Create query request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/CreateSqlQueryDefinitionDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Success. Query definition created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatedSqlQueryDefinitionDtoServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Query/{Id}": { "put": { "tags": [ "Query", "v2" ], "summary": "Update a Query definition", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "UpdateSqlQueryDefinitionV2", "parameters": [ { "name": "Id", "in": "path", "description": "The Id of the existing Query definition model to update", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Create query request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/UpdateSqlQueryDefinitionDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Success. Query definition updated" }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The resource was not found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } }, "delete": { "tags": [ "Query", "v2" ], "summary": "Delete a Query definition", "description": "

Required permissions:
Following permissions are required: ReportingDelete", "operationId": "DeleteSqlQueryDefinitionV2", "parameters": [ { "name": "Id", "in": "path", "description": "The Id of the existing Query definition model to delete", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "202": { "description": "Success. Query definition deleted" }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The resource was not found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report": { "post": { "tags": [ "Report", "v2" ], "summary": "Create report", "description": "

Required permissions:
Following permissions are required: ReportingExecute", "operationId": "CreateReportV2", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Create report request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/CreateReportV2DtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Success. Report created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GuidServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report/assistant/query": { "post": { "tags": [ "Report", "v2" ], "summary": "Creates AI driven report query based on User Input", "description": "

Required permissions:
Following permissions are required: ReportingExecute", "operationId": "CreateQueryStatement", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Create query request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/CreateQueryRequestDtoServiceRequest" } ] } } } }, "responses": { "200": { "description": "OK", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateQueryResponseDtoServiceResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report/agent": { "post": { "tags": [ "Report", "v2" ], "summary": "Triggers an asynchronous AI agent conversation turn", "description": "

Required permissions:
Following permissions are required: ReportingExecute", "operationId": "AgentConversationTurn", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Agent conversation turn request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/AgentConversationTurnRequestDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Accepted", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/AgentConversationTurnResponseDtoServiceResponse" } } } }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report/insights": { "post": { "tags": [ "Report", "v2" ], "summary": "Triggers an asynchronous AI insights analysis on a completed report result set", "description": "

Required permissions:
Following permissions are required: ReportingExecute", "operationId": "CreateReportInsights", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Report insights request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/CreateReportInsightsRequestDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Accepted. Insights analysis enqueued. Use the returned conversationId to subscribe to the agent WebSocket stream.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreateReportInsightsResponseDtoServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values, the report was not found, or the report is not in Completed status.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report/insights/feedback": { "post": { "tags": [ "Report", "v2" ], "summary": "Records user feedback on a generated report insight", "description": "

Required permissions:
Following permissions are required: ReportingExecute", "operationId": "SubmitReportInsightFeedback", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Insight feedback request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/SubmitReportInsightFeedbackRequestDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Accepted. Feedback recorded.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/SubmitReportInsightFeedbackResponseDtoServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values or the report was not found.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report/conversations/{conversationId}/title": { "patch": { "tags": [ "Report", "v2" ], "summary": "Renames a conversation.", "description": "

Required permissions:
Following permissions are required: ReportingExecute", "operationId": "UpdateConversationTitle", "parameters": [ { "name": "conversationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/UpdateConversationTitleRequestDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report/conversations/{conversationId}": { "delete": { "tags": [ "Report", "v2" ], "summary": "Deletes a conversation.", "description": "

Required permissions:
Following permissions are required: ReportingExecute", "operationId": "DeleteConversation", "parameters": [ { "name": "conversationId", "in": "path", "required": true, "schema": { "type": "string" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "204": { "description": "No Content" }, "400": { "description": "Bad Request", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Report/Preview": { "post": { "tags": [ "Report", "v2" ], "summary": "Preview report", "description": "

Required permissions:
At least one of the following permissions is required: ReportingEdit, ReportingExecute", "operationId": "Preview", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Create report request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/PreviewReportDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Success. Report created", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/report-branding": { "put": { "tags": [ "ReportBranding", "v2" ], "summary": "Configure report branding", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "ConfigureReportBranding", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Configure report branding request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/ConfigureReportBrandingDtoServiceRequest" } ] } } } }, "responses": { "202": { "description": "Success. Branding configured", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/GuidServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } }, "delete": { "tags": [ "ReportBranding", "v2" ], "summary": "Reset report branding", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "ResetReportBranding", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "204": { "description": "Success. Branding reset" }, "400": { "description": "Bad request. The operation could not be completed" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/report-branding/logo": { "post": { "tags": [ "ReportBranding", "v2" ], "summary": "Upload a tenant report branding logo", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "UploadLogo", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "content": { "multipart/form-data": { "schema": { "type": "object", "properties": { "file": { "type": "string", "description": "The logo file to upload (multipart/form-data field name `file`).", "format": "binary" } } }, "encoding": { "file": { "style": "form" } } }, "application/json": { "schema": { "type": "object", "properties": { "file": { "type": "string", "description": "The logo file to upload (multipart/form-data field name `file`).", "format": "binary" } } }, "encoding": { "file": { "style": "form" } } } } }, "responses": { "200": { "description": "Success. Logo uploaded and S3 key returned", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/UploadLogoResponseDtoServiceResponse" } } } }, "400": { "description": "Bad request. The file is missing, the wrong type, or too large", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal server exception. Please, contact your provider.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": null, "messages": [ { "message": "Internal server exception. Please, contact your provider.", "type": "Error", "errorCode": "INTERNAL_SERVER_ERROR" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Schedule": { "post": { "tags": [ "Schedule", "v2" ], "summary": "Create a new report schedule", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "CreateSchedule", "parameters": [ { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Create schedule request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/CreateScheduleDtoServiceRequest" } ] } } } }, "responses": { "201": { "description": "Created. Schedule created successfully", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/CreatedScheduleDtoServiceResponse" } } } }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The referenced query was not found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "409": { "description": "Conflict saving changes in expected version", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "There are conflicts that cannot be resolved automatically, get latest and apply your changes", "type": "Error", "errorCode": "CONFLICT" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } }, "/api/v2/Schedule/{id}": { "put": { "tags": [ "Schedule", "v2" ], "summary": "Update an existing report schedule", "description": "

Required permissions:
Following permissions are required: ReportingEdit", "operationId": "UpdateSchedule", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the schedule to update", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "requestBody": { "description": "Update schedule request", "content": { "application/json": { "schema": { "allOf": [ { "$ref": "#/components/schemas/UpdateScheduleDtoServiceRequest" } ] } } } }, "responses": { "204": { "description": "NoContent. Schedule updated successfully" }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The schedule or referenced query was not found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } }, "delete": { "tags": [ "Schedule", "v2" ], "summary": "Delete an existing report schedule", "description": "

Required permissions:
Following permissions are required: ReportingDelete", "operationId": "DeleteSchedule", "parameters": [ { "name": "id", "in": "path", "description": "The ID of the schedule to delete", "required": true, "schema": { "type": "string", "format": "uuid" } }, { "name": "X-TENANT-ID", "in": "header", "description": "The UiD of the tenant representing organization", "required": true, "schema": { "type": "string" }, "example": "b11f8be3-f29b-4959-8964-956d4af7c468" } ], "responses": { "204": { "description": "NoContent. Schedule deleted successfully" }, "400": { "description": "Bad request. The request has missing/invalid values", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ValidationErrorModelListServiceResponse" } } } }, "404": { "description": "Resource not found", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "NotFound. The schedule was not found", "type": "Error", "errorCode": "Error Code" } ] } } } }, "500": { "description": "Internal Server Error" }, "401": { "description": "User is not authorized to perform this request", "content": { "application/json": { "example": { "message": "Unauthorized" } } } }, "403": { "description": "Access to resource is forbidden.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/ObjectServiceResponse" }, "example": { "data": { }, "messages": [ { "message": "Access denied. Following permissions are required: Permission1, Permission2", "type": "Forbidden", "errorCode": "Error Code" } ] } } } }, "410": { "description": "Endpoint marked as deprecated was terminated. This response will be present only if the endpoint was marked as deprecated and has reached the sunset date. During the deprecation period, the API will include additional 'sunset' and 'deprecation' headers.", "content": { "application/json": { "schema": { "$ref": "#/components/schemas/StringServiceResponse" }, "example": { "data": null, "messages": [ { "message": "This endpoint is obsolete and was terminated on yyyy-MM-dd", "type": "Error", "errorCode": "OBSOLETE_ENDPOINT" } ] } } } } } } } }, "components": { "schemas": { "AddCustomTableRowDto": { "type": "object", "properties": { "values": { "type": "object", "additionalProperties": { "type": "string", "nullable": true }, "description": "Column values keyed by column name.", "nullable": true } }, "additionalProperties": false, "description": "Payload for appending a single row to a custom table." }, "AddCustomTableRowDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/AddCustomTableRowDto" } ], "description": "Payload for appending a single row to a custom table.", "nullable": true } }, "additionalProperties": false }, "AgentConversationTurnRequestDto": { "type": "object", "properties": { "conversationId": { "type": "string", "description": "Existing conversation id. If omitted, a new id is generated.", "nullable": true, "example": "1b2d983e-79c8-4d11-8b17-52095a3f6ad0" }, "prompt": { "type": "string", "description": "User prompt for the agent.", "nullable": true, "example": "Build me a report showing all entities created this week." }, "timeZone": { "type": "string", "description": "Local timezone of the user.", "nullable": true, "example": "Europe/Athens" }, "title": { "type": "string", "description": "Optional title for the conversation. If provided on first message, used instead of auto-generated title.", "nullable": true }, "source": { "type": "string", "description": "Conversation source. Values: \"standalone\", \"query\". Used to distinguish conversation origins.", "nullable": true } }, "additionalProperties": false, "description": "API request to trigger an agent conversation turn." }, "AgentConversationTurnRequestDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/AgentConversationTurnRequestDto" } ], "description": "API request to trigger an agent conversation turn.", "nullable": true } }, "additionalProperties": false }, "AgentConversationTurnResponseDto": { "type": "object", "properties": { "conversationId": { "type": "string", "nullable": true }, "status": { "type": "string", "nullable": true } }, "additionalProperties": false, "description": "API response for an asynchronous agent conversation turn trigger." }, "AgentConversationTurnResponseDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/AgentConversationTurnResponseDto" } ], "description": "API response for an asynchronous agent conversation turn trigger.", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "ConfigureReportBrandingDto": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether tenant report branding is enabled." }, "logo": { "allOf": [ { "$ref": "#/components/schemas/LogoDto" } ], "description": "Logo asset details. Null if no logo has been configured.", "nullable": true }, "pdfFooter": { "type": "string", "description": "Text content placed in the footer of generated PDF reports.", "nullable": true }, "xlsx": { "allOf": [ { "$ref": "#/components/schemas/XlsxConfigDto" } ], "description": "XLSX-specific branding configuration.", "nullable": true }, "email": { "allOf": [ { "$ref": "#/components/schemas/EmailConfigDto" } ], "description": "Email-specific branding configuration.", "nullable": true } }, "additionalProperties": false, "description": "Request payload for configuring tenant-level report branding." }, "ConfigureReportBrandingDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/ConfigureReportBrandingDto" } ], "description": "Request payload for configuring tenant-level report branding.", "nullable": true } }, "additionalProperties": false }, "CoverSheetDto": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether the cover sheet is included in the report." }, "showLogo": { "type": "boolean", "description": "Whether the tenant logo is displayed on the cover sheet." }, "showGeneratedDate": { "type": "boolean", "description": "Whether the report generation date is shown on the cover sheet." } }, "additionalProperties": false, "description": "Configuration for the cover sheet injected into XLSX reports." }, "CreateCategoryDto": { "required": [ "colour", "name" ], "type": "object", "properties": { "name": { "maxLength": 24, "minLength": 1, "type": "string", "description": "Category display name (max 24 characters)" }, "colour": { "minLength": 1, "type": "string", "description": "Hex colour code for the category badge (e.g. #FF5733)" } }, "additionalProperties": false, "description": "Data required to create a new query category" }, "CreateCategoryDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateCategoryDto" } ], "description": "Data required to create a new query category", "nullable": true } }, "additionalProperties": false }, "CreateCustomTableDto": { "type": "object", "properties": { "name": { "type": "string", "description": "Raw user-supplied table name.", "nullable": true }, "description": { "type": "string", "description": "Optional human-readable description.", "nullable": true }, "tableType": { "allOf": [ { "$ref": "#/components/schemas/CustomTableType" } ], "description": "Classification of the table. Defaults to Reference.", "nullable": true }, "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomTableColumn" }, "description": "Optional column definitions to pre-define at creation time.", "nullable": true } }, "additionalProperties": false, "description": "Payload for creating a new custom table." }, "CreateCustomTableDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateCustomTableDto" } ], "description": "Payload for creating a new custom table.", "nullable": true } }, "additionalProperties": false }, "CreateQueryRequestDto": { "type": "object", "properties": { "input": { "type": "string", "description": "User input", "nullable": true, "example": "Give me all entities of type company with country of incorporation in EU" }, "queryId": { "type": "string", "description": "Id of report query", "nullable": true, "example": "f1809ba2-2dea-4543-ab4f-1cea6593e3de" }, "currentQuery": { "type": "string", "description": "Current query", "nullable": true, "example": "SELECT * FROM entities" }, "timeZone": { "type": "string", "description": "Local timezone of the user", "nullable": true, "example": "Europe/Athens" } }, "additionalProperties": false, "description": "API request to generate AI driven report query" }, "CreateQueryRequestDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateQueryRequestDto" } ], "description": "API request to generate AI driven report query", "nullable": true } }, "additionalProperties": false }, "CreateQueryResponseDto": { "type": "object", "properties": { "title": { "type": "string", "description": "Short title", "nullable": true }, "query": { "type": "string", "description": "SQL query", "nullable": true }, "description": { "type": "string", "description": "Short description", "nullable": true }, "answer": { "type": "string", "description": "Text describing how the query answers the user's question", "nullable": true }, "error": { "type": "string", "description": "Error message (if applicable)", "nullable": true } }, "additionalProperties": false, "description": "Create Query Response DTO" }, "CreateQueryResponseDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateQueryResponseDto" } ], "description": "Create Query Response DTO", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "CreateReportInsightsRequestDto": { "type": "object", "properties": { "reportId": { "type": "string", "description": "Identifier of the completed report whose results should be analysed.\nMust be a non-empty string that parses as a GUID.", "nullable": true, "example": "3df1f622-7c6e-46a6-8b52-987f9142b6fa" }, "timeZone": { "type": "string", "description": "IANA timezone of the requesting user.\nDefaults to `UTC` when omitted or empty.", "nullable": true, "example": "Europe/Athens" } }, "additionalProperties": false, "description": "API request body for `POST /api/v2/report/insights`.\nWrapped in `ServiceRequest` at the controller layer." }, "CreateReportInsightsRequestDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateReportInsightsRequestDto" } ], "description": "API request body for `POST /api/v2/report/insights`.\nWrapped in `ServiceRequest` at the controller layer.", "nullable": true } }, "additionalProperties": false }, "CreateReportInsightsResponseDto": { "type": "object", "properties": { "conversationId": { "type": "string", "description": "Newly generated conversation identifier.\nSubscribe to the report agent WebSocket stream using this value.", "nullable": true }, "status": { "type": "string", "description": "Initial processing status. Always `\"Processing\"` on a successful 202 response.", "nullable": true }, "rowCount": { "type": "integer", "description": "Row count from the completed report. Null when the report predates row-count tracking.\nLets the UI display a row-count badge without waiting for tool execution.", "format": "int32", "nullable": true }, "queryName": { "type": "string", "description": "Display name of the saved query associated with this report, when available.\nUsed for drawer labels and export filenames.", "nullable": true } }, "additionalProperties": false, "description": "API response for `POST /api/v2/report/insights`.\nThe frontend uses Fenergo.Nebula.Reports.Command.Application.Features.Agent.Insights.CreateReportInsightsResponseDto.ConversationId to subscribe to the existing\nagent WebSocket stream (`/ws/report/agent`)." }, "CreateReportInsightsResponseDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateReportInsightsResponseDto" } ], "description": "API response for `POST /api/v2/report/insights`.\nThe frontend uses Fenergo.Nebula.Reports.Command.Application.Features.Agent.Insights.CreateReportInsightsResponseDto.ConversationId to subscribe to the existing\nagent WebSocket stream (`/ws/report/agent`).", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "CreateReportV2Dto": { "type": "object", "properties": { "sqlQuery": { "type": "string", "description": "SQL query of the report", "nullable": true, "example": "Select * from entitydata where category='Retail'" }, "description": { "type": "string", "description": "Short description of the report", "nullable": true, "example": "My Monthly report for active retail clients" }, "queryId": { "type": "string", "description": "The id of the query. Is null if the report that is being executed is not from a saves query", "format": "uuid", "nullable": true, "example": " 10a675cb-b286-4ebc-8e7a-25627d54b662 " }, "parameters": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Parameter values to substitute into the SQL query placeholders", "nullable": true, "example": { "from_date": "2026-01-01", "to_date": "2026-03-16" } } }, "additionalProperties": false, "description": "A report model to run a simple query" }, "CreateReportV2DtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateReportV2Dto" } ], "description": "A report model to run a simple query", "nullable": true } }, "additionalProperties": false }, "CreateScheduleDto": { "allOf": [ { "$ref": "#/components/schemas/ScheduleBaseDto" }, { "type": "object", "additionalProperties": false } ], "description": "Payload for creating a new report schedule" }, "CreateScheduleDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateScheduleDto" } ], "description": "Payload for creating a new report schedule", "nullable": true } }, "additionalProperties": false }, "CreateSqlQueryDefinitionDto": { "required": [ "name", "sqlQuery" ], "type": "object", "properties": { "sqlQuery": { "minLength": 1, "type": "string", "description": "Query definition Sql Query", "example": "Select Id From entitydata" }, "name": { "minLength": 1, "type": "string", "description": "Query definition name", "example": "GetAllEntityDataIds" }, "description": { "type": "string", "description": "Query definition description", "nullable": true, "example": "Get all entitydata Ids" }, "id": { "type": "string", "description": "Query ID", "format": "uuid", "nullable": true, "example": "33e5b6f5-1b95-49fb-a616-413b390ff8a8" }, "parameters": { "type": "array", "items": { "$ref": "#/components/schemas/QueryParameterDto" }, "description": "Parameter definitions for placeholders in the SQL query", "nullable": true }, "categoryId": { "type": "string", "description": "Optional category to assign this query to", "format": "uuid", "nullable": true } }, "additionalProperties": false, "description": "A new query definition item" }, "CreateSqlQueryDefinitionDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreateSqlQueryDefinitionDto" } ], "description": "A new query definition item", "nullable": true } }, "additionalProperties": false }, "CreatedCategoryDto": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "additionalProperties": false, "description": "Response returned after a category is created" }, "CreatedCategoryDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreatedCategoryDto" } ], "description": "Response returned after a category is created", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "CreatedCustomTableDto": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" }, "tenant": { "type": "string", "nullable": true }, "name": { "type": "string", "nullable": true }, "normalisedName": { "type": "string", "nullable": true }, "createdAtUtc": { "type": "string", "format": "date-time" }, "tableType": { "allOf": [ { "$ref": "#/components/schemas/CustomTableType" } ], "description": "0 = Reference, 1 = Operational", "x-enumNames": [ "Reference", "Operational" ] }, "schema": { "type": "array", "items": { "$ref": "#/components/schemas/CustomTableColumn" }, "nullable": true } }, "additionalProperties": false, "description": "Response returned after a custom table is successfully created." }, "CreatedCustomTableDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreatedCustomTableDto" } ], "description": "Response returned after a custom table is successfully created.", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "CreatedScheduleDto": { "type": "object", "properties": { "id": { "type": "string", "format": "uuid" } }, "additionalProperties": false, "description": "Response returned after a schedule is successfully created" }, "CreatedScheduleDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreatedScheduleDto" } ], "description": "Response returned after a schedule is successfully created", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "CreatedSqlQueryDefinitionDto": { "type": "object", "properties": { "id": { "type": "string", "description": "Created query unique Id", "format": "uuid", "example": "7e57cfd6-881c-4587-ada8-24a23b76464e" } }, "additionalProperties": false, "description": "Response representing created query" }, "CreatedSqlQueryDefinitionDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/CreatedSqlQueryDefinitionDto" } ], "description": "Response representing created query", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "CustomTableColumn": { "type": "object", "properties": { "name": { "type": "string", "nullable": true }, "glueType": { "type": "string", "nullable": true }, "description": { "type": "string", "nullable": true }, "nullable": { "type": "boolean" } }, "additionalProperties": false }, "CustomTableType": { "enum": [ 0, 1 ], "type": "integer", "description": "0 = Reference, 1 = Operational", "format": "int32", "x-enumNames": [ "Reference", "Operational" ] }, "DisclaimerDto": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether the disclaimer block is included in the report." }, "text": { "type": "string", "description": "Disclaimer text content.", "nullable": true } }, "additionalProperties": false, "description": "Configuration for the disclaimer block appended to XLSX reports." }, "DuplicateCustomTableDto": { "type": "object", "properties": { "name": { "type": "string", "description": "Raw user-supplied name for the new table.", "nullable": true }, "description": { "type": "string", "description": "Optional human-readable description for the new table.", "nullable": true } }, "additionalProperties": false, "description": "Payload for duplicating a custom table." }, "DuplicateCustomTableDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/DuplicateCustomTableDto" } ], "description": "Payload for duplicating a custom table.", "nullable": true } }, "additionalProperties": false }, "EditCustomTableSchemaDto": { "type": "object", "properties": { "columns": { "type": "array", "items": { "$ref": "#/components/schemas/CustomTableColumn" }, "description": "New column definitions. Must contain at least one column.", "nullable": true } }, "additionalProperties": false, "description": "Payload for replacing the column schema of an existing custom table." }, "EditCustomTableSchemaDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/EditCustomTableSchemaDto" } ], "description": "Payload for replacing the column schema of an existing custom table.", "nullable": true } }, "additionalProperties": false }, "EmailConfigDto": { "type": "object", "properties": { "senderDisplayName": { "type": "string", "description": "Display name shown in the From field of outgoing report emails.", "nullable": true }, "subjectLine": { "type": "string", "description": "Subject line for outgoing report emails.", "nullable": true }, "body": { "type": "string", "description": "Body content of outgoing report emails.", "nullable": true }, "footer": { "allOf": [ { "$ref": "#/components/schemas/EmailFooterDto" } ], "description": "Footer settings for outgoing report emails.", "nullable": true }, "showLogo": { "type": "boolean", "description": "Whether the tenant logo is displayed in the email." } }, "additionalProperties": false, "description": "Email-specific branding configuration applied to report notification emails." }, "EmailFooterDto": { "type": "object", "properties": { "enabled": { "type": "boolean", "description": "Whether the email footer is included." }, "text": { "type": "string", "description": "Footer text content.", "nullable": true } }, "additionalProperties": false, "description": "Configuration for the footer block appended to report notification emails." }, "GuidServiceResponse": { "type": "object", "properties": { "data": { "type": "string", "format": "uuid" }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "HeaderRowDto": { "type": "object", "properties": { "backgroundColour": { "type": "string", "description": "Background colour of the header row (hex, e.g. \"#1B2A4A\").", "nullable": true }, "textColour": { "type": "string", "description": "Text colour of the header row (hex, e.g. \"#FFFFFF\").", "nullable": true }, "freezeRow": { "type": "boolean", "description": "Whether the header row is frozen so it remains visible when scrolling." }, "autoFitColumns": { "type": "boolean", "description": "Whether columns are auto-fitted to their content width." } }, "additionalProperties": false, "description": "Configuration for the header row styling in XLSX reports." }, "HttpValidationProblemDetails": { "allOf": [ { "$ref": "#/components/schemas/ProblemDetails" }, { "type": "object", "properties": { "errors": { "type": "object", "additionalProperties": { "type": "array", "items": { "type": "string" } }, "nullable": true } }, "additionalProperties": { } } ] }, "LogoDto": { "type": "object", "properties": { "s3Key": { "type": "string", "description": "S3 object key for the stored logo file.", "nullable": true }, "filename": { "type": "string", "description": "Original filename of the uploaded logo.", "nullable": true }, "sizeBytes": { "type": "integer", "description": "Size of the logo file in bytes.", "format": "int64", "nullable": true }, "mimeType": { "type": "string", "description": "MIME type of the logo file (e.g. \"image/png\").", "nullable": true } }, "additionalProperties": false, "description": "Represents the logo asset associated with tenant report branding." }, "ObjectServiceResponse": { "type": "object", "properties": { "data": { "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "PreviewImportCustomTableDataDto": { "type": "object", "properties": { "columns": { "type": "array", "items": { "$ref": "#/components/schemas/CustomTableColumn" }, "nullable": true }, "rowCount": { "type": "integer", "format": "int32" } }, "additionalProperties": false, "description": "Response DTO returned by the CSV preview endpoint.\nContains the proposed column schema (name + suggested Glue type) and the\nsampled row count, so the caller can confirm or override types before committing." }, "PreviewImportCustomTableDataDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/PreviewImportCustomTableDataDto" } ], "description": "Response DTO returned by the CSV preview endpoint.\nContains the proposed column schema (name + suggested Glue type) and the\nsampled row count, so the caller can confirm or override types before committing.", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "PreviewParameterDefinitionDto": { "type": "object", "properties": { "name": { "type": "string", "description": "Parameter name, matching the {{placeholder}} in the SQL template", "nullable": true }, "type": { "type": "string", "description": "Parameter type: String | Date | Number | Boolean | Select", "nullable": true } }, "additionalProperties": false, "description": "Carries the type metadata for a single parameter in a preview request." }, "PreviewReportDto": { "type": "object", "properties": { "sqlQuery": { "type": "string", "description": "SQL query of the report", "nullable": true, "example": "Select * from entitydata where category='Retail' limit 5" }, "parameters": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Parameter values to substitute into the SQL query placeholders", "nullable": true }, "parameterDefinitions": { "type": "array", "items": { "$ref": "#/components/schemas/PreviewParameterDefinitionDto" }, "description": "Parameter type definitions for type-aware substitution (e.g. Date → DATE 'yyyy-MM-dd')", "nullable": true } }, "additionalProperties": false, "description": "A report model to run a simple query" }, "PreviewReportDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/PreviewReportDto" } ], "description": "A report model to run a simple query", "nullable": true } }, "additionalProperties": false }, "ProblemDetails": { "type": "object", "properties": { "type": { "type": "string", "nullable": true }, "title": { "type": "string", "nullable": true }, "status": { "type": "integer", "format": "int32", "nullable": true }, "detail": { "type": "string", "nullable": true }, "instance": { "type": "string", "nullable": true } }, "additionalProperties": { } }, "QueryParameterDto": { "type": "object", "properties": { "name": { "type": "string", "nullable": true }, "displayLabel": { "type": "string", "nullable": true }, "type": { "type": "string", "nullable": true }, "required": { "type": "boolean" }, "defaultValue": { "type": "string", "nullable": true }, "options": { "type": "array", "items": { "type": "string" }, "nullable": true } }, "additionalProperties": false, "description": "API contract DTO for a query parameter definition" }, "RenameCustomTableDto": { "type": "object", "properties": { "newName": { "type": "string", "description": "Replacement raw name.", "nullable": true } }, "additionalProperties": false, "description": "Payload for renaming an existing custom table." }, "RenameCustomTableDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/RenameCustomTableDto" } ], "description": "Payload for renaming an existing custom table.", "nullable": true } }, "additionalProperties": false }, "ScheduleBaseDto": { "required": [ "format", "frequency", "name", "queryId", "recipients", "timeOfDay", "timezone" ], "type": "object", "properties": { "name": { "minLength": 1, "type": "string", "description": "Human-readable name for the schedule" }, "queryId": { "type": "string", "description": "ID of the saved query to run on this schedule", "format": "uuid" }, "frequency": { "allOf": [ { "$ref": "#/components/schemas/ScheduleFrequency" } ], "description": "0 = OneTime, 1 = Daily, 2 = Weekly, 3 = Monthly", "x-enumNames": [ "OneTime", "Daily", "Weekly", "Monthly" ] }, "daysOfWeek": { "type": "array", "items": { "type": "integer", "format": "int32" }, "description": "Days of week for Weekly frequency (0=Sun..6=Sat). Min 1 required for Weekly.", "nullable": true }, "dayOfMonth": { "type": "integer", "description": "Day of month for Monthly frequency (1..28)", "format": "int32", "nullable": true }, "timeOfDay": { "minLength": 1, "type": "string", "description": "Time of day to run in HH:mm format (e.g. \"08:00\")" }, "timezone": { "minLength": 1, "type": "string", "description": "IANA timezone identifier (e.g. \"Europe/London\")" }, "format": { "allOf": [ { "$ref": "#/components/schemas/ScheduleFormat" } ], "description": "0 = Pdf, 1 = Xlsx, 2 = Csv", "x-enumNames": [ "Pdf", "Xlsx", "Csv" ] }, "recipients": { "type": "array", "items": { "type": "string" }, "description": "Email addresses to deliver the report to (max 20)" }, "oneTimeRunAtUtc": { "type": "string", "description": "For OneTime frequency: the exact UTC datetime to run. Must be at least 1 hour in the future.", "format": "date-time", "nullable": true }, "parameters": { "type": "object", "additionalProperties": { "type": "string" }, "description": "Fixed parameter values to inject into the SQL query at execution time (name → value)", "nullable": true } }, "additionalProperties": false, "description": "Shared schedule payload properties used by both create and update commands." }, "ScheduleFormat": { "enum": [ 0, 1, 2 ], "type": "integer", "description": "0 = Pdf, 1 = Xlsx, 2 = Csv", "format": "int32", "x-enumNames": [ "Pdf", "Xlsx", "Csv" ] }, "ScheduleFrequency": { "enum": [ 0, 1, 2, 3 ], "type": "integer", "description": "0 = OneTime, 1 = Daily, 2 = Weekly, 3 = Monthly", "format": "int32", "x-enumNames": [ "OneTime", "Daily", "Weekly", "Monthly" ] }, "ScheduleStatus": { "enum": [ 0, 1, 2, 3, 4 ], "type": "integer", "description": "0 = Active, 1 = Paused, 2 = Suspended, 3 = Completed, 4 = Deleted", "format": "int32", "x-enumNames": [ "Active", "Paused", "Suspended", "Completed", "Deleted" ] }, "ServiceResponse": { "type": "object", "properties": { "data": { "type": "string", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "ServiceResponseMessage": { "type": "object", "properties": { "message": { "type": "string", "nullable": true }, "type": { "type": "string", "nullable": true }, "errorCode": { "type": "string", "nullable": true } }, "additionalProperties": false }, "SetCustomTableTypeDto": { "type": "object", "properties": { "tableType": { "allOf": [ { "$ref": "#/components/schemas/CustomTableType" } ], "description": "0 = Reference, 1 = Operational", "x-enumNames": [ "Reference", "Operational" ] } }, "additionalProperties": false }, "SetCustomTableTypeDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/SetCustomTableTypeDto" } ], "nullable": true } }, "additionalProperties": false }, "StringServiceResponse": { "type": "object", "properties": { "data": { "type": "string", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "SubmitReportInsightFeedbackRequestDto": { "type": "object", "properties": { "reportId": { "type": "string", "description": "Identifier of the report whose insight the user is rating.\nMust be a non-empty, GUID-compatible string that belongs to the requesting tenant.", "nullable": true, "example": "3df1f622-7c6e-46a6-8b52-987f9142b6fa" }, "conversationId": { "type": "string", "description": "Identifier of the insights conversation that produced the rated insight.\nMust be a non-empty, GUID-compatible string.", "nullable": true, "example": "6b5c5b33-9c4b-4dd4-bd49-0b78d0ff8a18" }, "rating": { "type": "string", "description": "Thumbs-up / thumbs-down signal.\nAccepted values: `\"useful\"` or `\"notUseful\"` (case-insensitive).", "nullable": true, "example": "useful" }, "feedbackText": { "type": "string", "description": "Optional free-text explanation provided by the user.\nMaximum 2,000 characters; plain text only (no HTML).\nTreated as sensitive tenant data.", "nullable": true, "example": "The risk rating distribution chart was exactly what I needed." }, "insightMessageId": { "type": "string", "description": "Optional identifier for a specific insight message within the conversation,\nallowing per-turn feedback when conversations later support multiple insight turns.", "nullable": true, "example": "agent-turn-1" }, "insightSummary": { "type": "string", "description": "Optional short non-sensitive summary of the rated insight for future tenant-memory retrieval.\nThe canonical memory payload stores this summary instead of raw report rows.", "nullable": true }, "chartSuggested": { "type": "boolean", "description": "Indicates whether a chart suggestion was present in the rated insight.\nProvides an analytics dimension without requiring the backend to inspect the payload.", "nullable": true, "example": true }, "storeInTenantMemory": { "type": "boolean", "description": "Controls whether the feedback should be written into tenant-scoped long-term agent memory.\nWhen `null`, the behaviour is determined by the tenant/operational configuration\n(enabled by default until `AgentInsights:EnableTenantMemory` is disabled).", "nullable": true } }, "additionalProperties": false, "description": "API request body for `POST /api/v2/report/insights/feedback`.\nWrapped in `ServiceRequest` at the controller layer." }, "SubmitReportInsightFeedbackRequestDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/SubmitReportInsightFeedbackRequestDto" } ], "description": "API request body for `POST /api/v2/report/insights/feedback`.\nWrapped in `ServiceRequest` at the controller layer.", "nullable": true } }, "additionalProperties": false }, "SubmitReportInsightFeedbackResponseDto": { "type": "object", "properties": { "status": { "type": "string", "description": "Always `\"Recorded\"` on a successful response.\nIndicates the feedback was accepted and published to the analytics/metrics pipeline.", "nullable": true } }, "additionalProperties": false, "description": "API response for `POST /api/v2/report/insights/feedback`." }, "SubmitReportInsightFeedbackResponseDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/SubmitReportInsightFeedbackResponseDto" } ], "description": "API response for `POST /api/v2/report/insights/feedback`.", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "UpdateCategoryDto": { "type": "object", "properties": { "name": { "maxLength": 24, "type": "string", "description": "New display name (max 24 characters, optional — null preserves existing)", "nullable": true }, "colour": { "type": "string", "description": "New hex colour code (e.g. #FF5733, optional — null preserves existing)", "nullable": true } }, "additionalProperties": false, "description": "Data for updating a query category" }, "UpdateCategoryDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/UpdateCategoryDto" } ], "description": "Data for updating a query category", "nullable": true } }, "additionalProperties": false }, "UpdateConversationTitleRequestDto": { "type": "object", "properties": { "title": { "type": "string", "description": "The new title (1-100 chars).", "nullable": true, "example": "Q4 Revenue Analysis" } }, "additionalProperties": false, "description": "Request body for renaming a conversation." }, "UpdateConversationTitleRequestDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/UpdateConversationTitleRequestDto" } ], "description": "Request body for renaming a conversation.", "nullable": true } }, "additionalProperties": false }, "UpdateCustomTableDescriptionDto": { "type": "object", "properties": { "newDescription": { "type": "string", "description": "Replacement description (nullable to allow clearing).", "nullable": true } }, "additionalProperties": false, "description": "Payload for updating a custom table's description." }, "UpdateCustomTableDescriptionDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/UpdateCustomTableDescriptionDto" } ], "description": "Payload for updating a custom table's description.", "nullable": true } }, "additionalProperties": false }, "UpdateCustomTableRowDto": { "type": "object", "properties": { "values": { "type": "object", "additionalProperties": { "type": "string", "nullable": true }, "description": "New column values keyed by column name.", "nullable": true } }, "additionalProperties": false, "description": "Payload for replacing values on a specific row in a custom table." }, "UpdateCustomTableRowDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/UpdateCustomTableRowDto" } ], "description": "Payload for replacing values on a specific row in a custom table.", "nullable": true } }, "additionalProperties": false }, "UpdateScheduleDto": { "allOf": [ { "$ref": "#/components/schemas/ScheduleBaseDto" }, { "required": [ "id", "status" ], "type": "object", "properties": { "id": { "type": "string", "description": "The ID of the schedule to update", "format": "uuid" }, "status": { "allOf": [ { "$ref": "#/components/schemas/ScheduleStatus" } ], "description": "0 = Active, 1 = Paused, 2 = Suspended, 3 = Completed, 4 = Deleted", "x-enumNames": [ "Active", "Paused", "Suspended", "Completed", "Deleted" ] } }, "additionalProperties": false } ], "description": "Payload for updating an existing report schedule" }, "UpdateScheduleDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/UpdateScheduleDto" } ], "description": "Payload for updating an existing report schedule", "nullable": true } }, "additionalProperties": false }, "UpdateSqlQueryDefinitionDto": { "required": [ "name", "sqlQuery" ], "type": "object", "properties": { "id": { "type": "string", "description": "Query definition Id", "format": "uuid", "example": "7e57cfd6-881c-4587-ada8-24a23b76464e" }, "sqlQuery": { "minLength": 1, "type": "string", "description": "New Query definition Sql Query", "example": "Select Id From entitydata" }, "name": { "minLength": 1, "type": "string", "description": "New Query definition name", "example": "GetAllEntityDataIds" }, "description": { "type": "string", "description": "Description for the Query Definition", "nullable": true, "example": "The List of the client Names" }, "parameters": { "type": "array", "items": { "$ref": "#/components/schemas/QueryParameterDto" }, "description": "Parameter definitions for placeholders in the SQL query", "nullable": true }, "categoryId": { "type": "string", "description": "Optional category to assign this query to", "format": "uuid", "nullable": true } }, "additionalProperties": false, "description": "A update query definition item" }, "UpdateSqlQueryDefinitionDtoServiceRequest": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/UpdateSqlQueryDefinitionDto" } ], "description": "A update query definition item", "nullable": true } }, "additionalProperties": false }, "UploadLogoResponseDto": { "type": "object", "properties": { "s3Key": { "type": "string", "description": "The S3 object key under which the uploaded logo was stored.", "nullable": true }, "mimeType": { "type": "string", "description": "The MIME type the file was stored as.", "nullable": true }, "sizeBytes": { "type": "integer", "description": "The size of the uploaded file in bytes.", "format": "int64" } }, "additionalProperties": false, "description": "Response payload returned after a logo file has been successfully uploaded to S3." }, "UploadLogoResponseDtoServiceResponse": { "type": "object", "properties": { "data": { "allOf": [ { "$ref": "#/components/schemas/UploadLogoResponseDto" } ], "description": "Response payload returned after a logo file has been successfully uploaded to S3.", "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false }, "ValidationErrorModel": { "type": "object", "properties": { "propertyName": { "type": "string", "nullable": true }, "errorMessage": { "type": "string", "nullable": true }, "attemptedValue": { "nullable": true }, "errorCode": { "type": "string", "nullable": true } }, "additionalProperties": false }, "ValidationErrorModelListServiceResponse": { "type": "object", "properties": { "data": { "type": "array", "items": { "$ref": "#/components/schemas/ValidationErrorModel" }, "nullable": true }, "messages": { "type": "array", "items": { "$ref": "#/components/schemas/ServiceResponseMessage" }, "nullable": true } }, "additionalProperties": false, "example": { "data": [ { "propertyName": "data", "errorMessage": "Data is required", "attemptedValue": "", "errorCode": "NotNullValidator" } ], "messages": [ { "message": "Data is required", "type": "Error", "errorCode": "Error Code" } ] } }, "XlsxConfigDto": { "type": "object", "properties": { "coverSheet": { "allOf": [ { "$ref": "#/components/schemas/CoverSheetDto" } ], "description": "Cover sheet settings for the XLSX report.", "nullable": true }, "headerRow": { "allOf": [ { "$ref": "#/components/schemas/HeaderRowDto" } ], "description": "Header row styling settings for the XLSX report.", "nullable": true }, "disclaimer": { "allOf": [ { "$ref": "#/components/schemas/DisclaimerDto" } ], "description": "Disclaimer block settings for the XLSX report.", "nullable": true } }, "additionalProperties": false, "description": "Top-level XLSX-specific branding configuration." } }, "securitySchemes": { "Bearer": { "type": "apiKey", "description": "Please insert JWT with Bearer into field", "name": "Authorization", "in": "header" } } }, "security": [ { "Bearer": [ ] } ] }