openapi: 3.2.0 info: title: Fenergo Custom Table API version: '2.0' description: 'Operations tagged CustomTable across 2 of this provider''s published API definitions: fenergo-reportscommand-v2-0-openapi.json, fenergo-reportsquery-v2-0-openapi.json. Each path carries the servers of the definition it was published in.' servers: - url: /reportscommand - url: /reportsquery security: - Bearer: [] tags: - name: CustomTable paths: /api/v2/CustomTable: post: tags: - CustomTable 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 get: tags: - CustomTable summary: List all active custom tables for the current tenant description: 'Deleted tables are excluded. Default sort is `updatedAt` descending. Required permissions: Following permissions are required: ReportingAccess' operationId: GetAllCustomTables parameters: - name: orderBy in: query description: 'Optional sort field: `name` (ASC), `createdAt` (DESC), or `updatedAt` (DESC, default).' 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: '200': description: Success. Returns the list of custom tables. content: application/json: schema: $ref: '#/components/schemas/GetAllCustomTablesItemDtoIEnumerableServiceResponse' '400': description: Bad request — unknown orderBy value. content: application/json: schema: $ref: '#/components/schemas/ServiceResponse' '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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/name: put: tags: - CustomTable 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/type: put: tags: - CustomTable 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/description: put: tags: - CustomTable 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/schema: put: tags: - CustomTable 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}: delete: tags: - CustomTable 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 get: tags: - CustomTable summary: Get a single custom table by its identifier description: 'Returns 404 when the table does not exist, belongs to a different tenant, or has been deleted. Required permissions: Following permissions are required: ReportingAccess' operationId: GetCustomTableById parameters: - name: id in: path description: Custom table GUID. 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: '200': description: Success. Returns the custom table detail. content: application/json: schema: $ref: '#/components/schemas/GetCustomTableByIdDtoServiceResponse' '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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/duplicate: post: tags: - CustomTable 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/data/preview: post: tags: - CustomTable summary: Preview the schema inferred from a CSV file without persisting any data. 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/data: post: tags: - CustomTable summary: Commit a CSV upload with a confirmed column schema. 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/rows: post: tags: - CustomTable 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 get: tags: - CustomTable summary: Get a paginated data preview for a custom table description: 'Filter is applied across the entire table before pagination. Returns 404 when the table does not exist, belongs to a different tenant, or has been deleted. Required permissions: Following permissions are required: ReportingAccess' operationId: GetCustomTableRows parameters: - name: id in: path description: Custom table GUID. required: true schema: type: string - name: skip in: query description: Number of rows to skip (default 0). schema: type: integer format: int32 default: 0 - name: take in: query description: Number of rows to return (default 50, max 500). schema: type: integer format: int32 default: 50 - name: filter in: query description: Optional case-insensitive substring filter applied across all cells. 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: '200': description: Success. Returns the paginated row preview. content: application/json: schema: $ref: '#/components/schemas/GetCustomTableRowsDtoServiceResponse' '400': description: Bad request — invalid take value. 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/rows/{rowIndex}: put: tags: - CustomTable 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 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 servers: - url: /reportscommand /api/v2/CustomTable/{id}/export: get: tags: - CustomTable summary: Export the full CSV file for a custom table description: 'Streams the stored CSV directly from S3 as a file download. Returns 404 when the table does not exist, belongs to a different tenant, has been deleted, or has never been imported. Required permissions: Following permissions are required: ReportingAccess' operationId: ExportCustomTableCsv parameters: - name: id in: path description: Custom table GUID. 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: '200': description: Success. Returns the CSV file as an attachment. content: application/json: schema: type: string format: binary '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 servers: - url: /reportsquery /api/v2/CustomTable/limits: get: tags: - CustomTable summary: Get the configured limits for custom table operations description: 'Required permissions: Following permissions are required: ReportingAccess' operationId: GetCustomTableLimits 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: '200': description: OK. Returns the limits configuration. content: application/json: schema: $ref: '#/components/schemas/CustomTableLimitsDtoServiceResponse' '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 servers: - url: /reportsquery components: schemas: SetCustomTableTypeDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/SetCustomTableTypeDto' additionalProperties: false EditCustomTableSchemaDto: type: object properties: columns: type: - array - 'null' items: $ref: '#/components/schemas/CustomTableColumn' description: New column definitions. Must contain at least one column. additionalProperties: false description: Payload for replacing the column schema of an existing custom table. DuplicateCustomTableDto: type: object properties: name: type: - string - 'null' description: Raw user-supplied name for the new table. description: type: - string - 'null' description: Optional human-readable description for the new table. additionalProperties: false description: Payload for duplicating a custom table. CustomTableColumn: type: object properties: name: type: - string - 'null' glueType: type: - string - 'null' description: type: - string - 'null' nullable: type: boolean additionalProperties: false CreatedCustomTableDtoServiceResponse: type: object properties: data: allOf: - $ref: '#/components/schemas/CreatedCustomTableDto' description: Response returned after a custom table is successfully created. messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false UpdateCustomTableRowDto: type: object properties: values: type: - object - 'null' additionalProperties: type: - string - 'null' description: New column values keyed by column name. additionalProperties: false description: Payload for replacing values on a specific row in a custom table. CreateCustomTableDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/CreateCustomTableDto' description: Payload for creating a new custom table. additionalProperties: false PreviewImportCustomTableDataDtoServiceResponse: type: object properties: data: allOf: - $ref: '#/components/schemas/PreviewImportCustomTableDataDto' description: 'Response DTO returned by the CSV preview endpoint. Contains the proposed column schema (name + suggested Glue type) and the sampled row count, so the caller can confirm or override types before committing.' messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false DuplicateCustomTableDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/DuplicateCustomTableDto' description: Payload for duplicating a custom table. additionalProperties: false RenameCustomTableDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/RenameCustomTableDto' description: Payload for renaming an existing custom table. additionalProperties: false CreateCustomTableDto: type: object properties: name: type: - string - 'null' description: Raw user-supplied table name. description: type: - string - 'null' description: Optional human-readable description. tableType: allOf: - $ref: '#/components/schemas/CustomTableType' description: Classification of the table. Defaults to Reference. schema: type: - array - 'null' items: $ref: '#/components/schemas/CustomTableColumn' description: Optional column definitions to pre-define at creation time. additionalProperties: false description: Payload for creating a new custom table. AddCustomTableRowDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/AddCustomTableRowDto' description: Payload for appending a single row to a custom table. additionalProperties: false EditCustomTableSchemaDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/EditCustomTableSchemaDto' description: Payload for replacing the column schema of an existing custom table. additionalProperties: false RenameCustomTableDto: type: object properties: newName: type: - string - 'null' description: Replacement raw name. additionalProperties: false description: Payload for renaming an existing custom table. ObjectServiceResponse: type: object properties: data: {} messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false StringServiceResponse: type: object properties: data: type: - string - 'null' messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false CreatedCustomTableDto: type: object properties: id: type: string format: uuid tenant: type: - string - 'null' name: type: - string - 'null' normalisedName: type: - string - 'null' createdAtUtc: type: string format: date-time tableType: allOf: - $ref: '#/components/schemas/CustomTableType' description: 0 = Reference, 1 = Operational x-enumNames: - Reference - Operational schema: type: - array - 'null' items: $ref: '#/components/schemas/CustomTableColumn' additionalProperties: false description: Response returned after a custom table is successfully created. ValidationErrorModelListServiceResponse: type: object properties: data: type: - array - 'null' items: $ref: '#/components/schemas/ValidationErrorModel' messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false example: data: - propertyName: data errorMessage: Data is required attemptedValue: '' errorCode: NotNullValidator messages: - message: Data is required type: Error errorCode: Error Code UpdateCustomTableDescriptionDto: type: object properties: newDescription: type: - string - 'null' description: Replacement description (nullable to allow clearing). additionalProperties: false description: Payload for updating a custom table's description. SetCustomTableTypeDto: type: object properties: tableType: allOf: - $ref: '#/components/schemas/CustomTableType' description: 0 = Reference, 1 = Operational x-enumNames: - Reference - Operational additionalProperties: false PreviewImportCustomTableDataDto: type: object properties: columns: type: - array - 'null' items: $ref: '#/components/schemas/CustomTableColumn' rowCount: type: integer format: int32 additionalProperties: false description: 'Response DTO returned by the CSV preview endpoint. Contains the proposed column schema (name + suggested Glue type) and the sampled row count, so the caller can confirm or override types before committing.' ValidationErrorModel: type: object properties: propertyName: type: - string - 'null' errorMessage: type: - string - 'null' attemptedValue: {} errorCode: type: - string - 'null' additionalProperties: false ServiceResponseMessage: type: object properties: message: type: - string - 'null' type: type: - string - 'null' errorCode: type: - string - 'null' additionalProperties: false AddCustomTableRowDto: type: object properties: values: type: - object - 'null' additionalProperties: type: - string - 'null' description: Column values keyed by column name. additionalProperties: false description: Payload for appending a single row to a custom table. UpdateCustomTableDescriptionDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/UpdateCustomTableDescriptionDto' description: Payload for updating a custom table's description. additionalProperties: false CustomTableType: enum: - 0 - 1 type: integer description: 0 = Reference, 1 = Operational format: int32 x-enumNames: - Reference - Operational UpdateCustomTableRowDtoServiceRequest: type: object properties: data: allOf: - $ref: '#/components/schemas/UpdateCustomTableRowDto' description: Payload for replacing values on a specific row in a custom table. additionalProperties: false ServiceResponse: type: object properties: data: type: - string - 'null' messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false GetCustomTableByIdDto: type: object properties: id: type: string description: Unique identifier of the custom table. format: uuid name: type: - string - 'null' description: Display name of the custom table. description: type: - string - 'null' description: Optional description. columnCount: type: integer description: Number of columns in the schema (0 when never imported). format: int32 rowCount: type: - integer - 'null' description: Total number of data rows; null when never imported. format: int64 byteSize: type: - integer - 'null' description: Size of the stored CSV in bytes; null when never imported. format: int64 createdBy: type: - string - 'null' description: User who created the table. createdAtUtc: type: string description: UTC timestamp when the table was created. format: date-time updatedAtUtc: type: string description: UTC timestamp of the most recent update. format: date-time updatedBy: type: - string - 'null' description: User who last updated the table. lastImportedAtUtc: type: - string - 'null' description: UTC timestamp of the most recent successful data import; null when never imported. format: date-time lastImportedBy: type: - string - 'null' description: User who performed the most recent successful data import; null when never imported. schema: type: - array - 'null' items: $ref: '#/components/schemas/CustomTableColumnDto' description: Column schema. Empty when the table has never been imported. tableType: allOf: - $ref: '#/components/schemas/CustomTableType_2' description: Classification of the table. additionalProperties: false description: Detailed custom table response returned by `GET /api/v2/customtable/{id}`. GetCustomTableRowsDto: type: object properties: headers: type: - array - 'null' items: type: string description: Column header names in CSV order. rows: type: - array - 'null' items: type: array items: type: string description: Page slice of (filtered) data rows. totalFilteredCount: type: integer description: 'Total number of rows that matched the filter (or the total row count when no filter is active). Use for client-side pagination calculation.' format: int64 totalRowCount: type: integer description: Total number of rows before any filter is applied (from the aggregate metadata). format: int64 additionalProperties: false description: Paginated data preview response for `GET /api/v2/customtable/{id}/rows`. CustomTableLimitsDto: type: object properties: maxRowsPerUpload: type: integer description: Maximum number of data rows allowed in a single CSV upload. format: int32 maxBytesPerUpload: type: integer description: Maximum file size in bytes for a single CSV upload. format: int64 maxRowsPerTable: type: integer description: Maximum total number of data rows per custom table. format: int64 maxTablesPerTenant: type: integer description: Maximum number of non-deleted custom tables per tenant. format: int32 additionalProperties: false description: DTO exposing the configured limits for custom table operations. CustomTableLimitsDtoServiceResponse: type: object properties: data: allOf: - $ref: '#/components/schemas/CustomTableLimitsDto' description: DTO exposing the configured limits for custom table operations. messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false GetAllCustomTablesItemDto: type: object properties: id: type: string description: Unique identifier of the custom table. format: uuid name: type: - string - 'null' description: Display name of the custom table. description: type: - string - 'null' description: Optional description. columnCount: type: integer description: Number of columns in the schema (0 when never imported). format: int32 rowCount: type: - integer - 'null' description: Total number of data rows; null when never imported. format: int64 byteSize: type: - integer - 'null' description: Size of the stored CSV in bytes; null when never imported. format: int64 createdBy: type: - string - 'null' description: User who created the table. createdAtUtc: type: string description: UTC timestamp when the table was created. format: date-time updatedAtUtc: type: string description: UTC timestamp of the most recent update. format: date-time updatedBy: type: - string - 'null' description: User who last updated the table. lastImportedAtUtc: type: - string - 'null' description: UTC timestamp of the most recent successful data import; null when never imported. format: date-time lastImportedBy: type: - string - 'null' description: User who performed the most recent successful data import; null when never imported. tableType: allOf: - $ref: '#/components/schemas/CustomTableType_2' description: Classification of the table. additionalProperties: false description: Custom table item returned in the list response. GetCustomTableRowsDtoServiceResponse: type: object properties: data: allOf: - $ref: '#/components/schemas/GetCustomTableRowsDto' description: Paginated data preview response for `GET /api/v2/customtable/{id}/rows`. messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false CustomTableColumnDto: type: object properties: name: type: - string - 'null' description: Column name as it appears in the CSV header. type: type: - string - 'null' description: 'Raw Glue physical column type (e.g. `"string"`, `"int"`, `"bigint"`, `"double"`, `"decimal"`, `"date"`, `"timestamp"`, `"boolean"`). The UI maps this to a friendly label.' nullable: type: boolean description: Whether the column accepts null values. description: type: - string - 'null' description: Optional human-readable description of the column. additionalProperties: false description: DTO representing a single column in a custom table schema. GetAllCustomTablesItemDtoIEnumerableServiceResponse: type: object properties: data: type: - array - 'null' items: $ref: '#/components/schemas/GetAllCustomTablesItemDto' messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false GetCustomTableByIdDtoServiceResponse: type: object properties: data: allOf: - $ref: '#/components/schemas/GetCustomTableByIdDto' description: Detailed custom table response returned by `GET /api/v2/customtable/{id}`. messages: type: - array - 'null' items: $ref: '#/components/schemas/ServiceResponseMessage' additionalProperties: false CustomTableType_2: enum: - Reference - Operational type: string securitySchemes: Bearer: type: apiKey description: Please insert JWT with Bearer into field name: Authorization in: header x-refined-from: - fenergo-reportscommand-v2-0-openapi.json - fenergo-reportsquery-v2-0-openapi.json