openapi: 3.1.0 info: title: Opik REST Reports API description: "The Opik REST API is currently in beta and subject to change. If you have any questions or feedback about the APIs, please reach out on GitHub: https://github.com/comet-ml/opik.\n\nAll of the methods listed in this documentation are used by either the SDK or the UI to interact with the Opik server. As a result,\nthe methods have been optimized for these use-cases in mind. If you are looking for a method that is not listed above, please create\nand issue on GitHub or raise a PR!\n\nOpik includes two main deployment options that results in slightly different API usage:\n\n- **Self-hosted Opik instance:** You will simply need to specify the URL as `http://localhost:5173/api/` or similar. This is the default option for the docs.\n- **Opik Cloud:** You will need to specify the Opik API Key and Opik Workspace in the header. The format of the header should be:\n\n ```\n {\n \"Comet-Workspace\": \"your-workspace-name\",\n \"authorization\": \"your-api-key\"\n }\n ```\n\n The full payload would therefore look like:\n \n ```\n curl -X GET 'https://www.comet.com/opik/api/v1/private/projects' \\\n -H 'Accept: application/json' \\\n -H 'Comet-Workspace: ' \\\n -H 'authorization: '\n ```\n\n Do take note here that the authorization header value does not include the `Bearer ` prefix. To switch to using the Opik Cloud in the documentation, you can\n click on the edit button displayed when hovering over the `Base URL` displayed on the right hand side of the docs.\n" contact: name: Github Repository url: https://github.com/comet-ml/opik license: name: Apache 2.0 url: http://www.apache.org/licenses/LICENSE-2.0.html version: 1.0.0 servers: - url: http://localhost:5173/api description: Local server - url: https://www.comet.com/opik/api description: Opik Cloud tags: - name: Reports description: Ollie daily report management paths: /v1/private/projects/{projectId}/reports/{reportId}/complete: post: tags: - Reports summary: Complete report generation description: Callback from Ollie to update report status and content after generation. operationId: completeReport parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: reportId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/ReportCompleteRequest' responses: '204': description: Report updated '404': description: Report not found /v1/private/projects/{projectId}/reports/generate: post: tags: - Reports summary: Trigger report generation description: Creates a pending report and triggers asynchronous generation via the orchestrator. operationId: generateReport parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '202': description: Report generation triggered content: application/json: schema: $ref: '#/components/schemas/GenerateReportResponse' '401': description: Unauthorized '403': description: Forbidden /v1/private/projects/{projectId}/reports/preferences: get: tags: - Reports summary: Get report preferences description: Returns report preferences for a project, or null if none have been set. operationId: getReportPreference parameters: - name: projectId in: path required: true schema: type: string format: uuid responses: '200': description: Report preferences or null content: application/json: schema: $ref: '#/components/schemas/ReportPreference' put: tags: - Reports summary: Update report preferences description: Enable or disable daily report generation for a project. operationId: updateReportPreference parameters: - name: projectId in: path required: true schema: type: string format: uuid requestBody: content: application/json: schema: $ref: '#/components/schemas/ReportPreference' responses: '200': description: Updated preferences content: application/json: schema: $ref: '#/components/schemas/ReportPreference' /v1/private/projects/{projectId}/reports: get: tags: - Reports summary: Get reports for a project description: Returns a paginated list of reports, newest first. operationId: getReports parameters: - name: projectId in: path required: true schema: type: string format: uuid - name: page in: query schema: minimum: 1 type: integer format: int32 default: 1 - name: size in: query schema: maximum: 100 minimum: 1 type: integer format: int32 default: 10 responses: '200': description: Reports page content: application/json: schema: $ref: '#/components/schemas/OllieReportPage' components: schemas: OllieReport: type: object properties: id: type: string format: uuid project_id: type: string format: uuid session_id: type: string content: type: string recommended_actions: $ref: '#/components/schemas/JsonNode' status: type: string enum: - pending - completed - failed created_at: type: string format: date-time readOnly: true last_updated_at: type: string format: date-time readOnly: true ReportCompleteRequest: required: - status type: object properties: content: type: string status: type: string enum: - pending - completed - failed session_id: type: string recommended_actions: $ref: '#/components/schemas/JsonNode' JsonNode: type: object ReportPreference: type: object properties: project_id: type: string format: uuid enabled: type: boolean schedule_time: pattern: \d{2}:\d{2}:\d{2} type: string custom_prompt: maxLength: 5000 minLength: 0 type: string created_at: type: string format: date-time readOnly: true last_updated_at: type: string format: date-time readOnly: true GenerateReportResponse: type: object properties: reportId: type: string format: uuid description: Response for report generation trigger OllieReportPage: type: object properties: page: type: integer format: int32 size: type: integer format: int32 total: type: integer format: int64 content: type: array items: $ref: '#/components/schemas/OllieReport'