openapi: 3.1.0 info: title: Fast ACCOUNT_COSTS SCHEDULES API version: 0.1.0 tags: - name: SCHEDULES paths: /studio/schedules: post: tags: - SCHEDULES summary: Create Schedule Endpoint description: 'Create a new scheduled report. - **name**: Name for this schedule - **session_id**: Session to report on - **content_scope**: ''last_answer'' or ''full_chat'' - **frequency**: ''daily'', ''weekly'', ''monthly'', or ''custom'' - **hour**: Hour to run (0-23 UTC) - **emails**: Recipients' operationId: create_schedule_endpoint_studio_schedules_post security: - HTTPBearer: [] - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleCreateRequest' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - SCHEDULES summary: List Schedules description: 'List schedules. - If session_id is provided, returns schedules for that session - Otherwise, returns all schedules created by the current user' operationId: list_schedules_studio_schedules_get security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: session_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Session Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /studio/schedules/{schedule_id}: get: tags: - SCHEDULES summary: Get Schedule Endpoint description: Get details of a specific schedule. operationId: get_schedule_endpoint_studio_schedules__schedule_id__get security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - SCHEDULES summary: Update Schedule Endpoint description: Update a schedule. operationId: update_schedule_endpoint_studio_schedules__schedule_id__put security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - SCHEDULES summary: Delete Schedule Endpoint description: Delete a schedule. operationId: delete_schedule_endpoint_studio_schedules__schedule_id__delete security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /studio/schedules/{schedule_id}/toggle: post: tags: - SCHEDULES summary: Toggle Schedule description: Enable or disable a schedule. operationId: toggle_schedule_studio_schedules__schedule_id__toggle_post security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /studio/schedules/{schedule_id}/refresh-snapshot: post: tags: - SCHEDULES summary: Refresh Snapshot description: Refresh the snapshot content for a schedule. operationId: refresh_snapshot_studio_schedules__schedule_id__refresh_snapshot_post security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /studio/schedules/{schedule_id}/send-now: post: tags: - SCHEDULES summary: Send Now Endpoint description: 'Trigger a scheduled report to be sent immediately with fresh execution. Returns 202 Accepted immediately; the report is generated and emailed in the background. Check the schedule''s runs endpoint for status.' operationId: send_now_endpoint_studio_schedules__schedule_id__send_now_post security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '202': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /studio/schedules/{schedule_id}/runs: get: tags: - SCHEDULES summary: Get Schedule Runs Endpoint description: Get recent runs for a schedule. operationId: get_schedule_runs_endpoint_studio_schedules__schedule_id__runs_get security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id - name: limit in: query required: false schema: type: integer maximum: 100 default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ScheduleRunsListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /playground/schedules: post: tags: - SCHEDULES summary: Create Schedule Endpoint description: 'Create a new scheduled report. - **name**: Name for this schedule - **session_id**: Session to report on - **content_scope**: ''last_answer'' or ''full_chat'' - **frequency**: ''daily'', ''weekly'', ''monthly'', or ''custom'' - **hour**: Hour to run (0-23 UTC) - **emails**: Recipients' operationId: create_schedule_endpoint_playground_schedules_post security: - HTTPBearer: [] - HTTPBearer: [] requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleCreateRequest' responses: '201': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' get: tags: - SCHEDULES summary: List Schedules description: 'List schedules. - If session_id is provided, returns schedules for that session - Otherwise, returns all schedules created by the current user' operationId: list_schedules_playground_schedules_get security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: session_id in: query required: false schema: anyOf: - type: string - type: 'null' title: Session Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /playground/schedules/{schedule_id}: get: tags: - SCHEDULES summary: Get Schedule Endpoint description: Get details of a specific schedule. operationId: get_schedule_endpoint_playground_schedules__schedule_id__get security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' put: tags: - SCHEDULES summary: Update Schedule Endpoint description: Update a schedule. operationId: update_schedule_endpoint_playground_schedules__schedule_id__put security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id requestBody: required: true content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleUpdateRequest' responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' delete: tags: - SCHEDULES summary: Delete Schedule Endpoint description: Delete a schedule. operationId: delete_schedule_endpoint_playground_schedules__schedule_id__delete security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '204': description: Successful Response '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /playground/schedules/{schedule_id}/toggle: post: tags: - SCHEDULES summary: Toggle Schedule description: Enable or disable a schedule. operationId: toggle_schedule_playground_schedules__schedule_id__toggle_post security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /playground/schedules/{schedule_id}/refresh-snapshot: post: tags: - SCHEDULES summary: Refresh Snapshot description: Refresh the snapshot content for a schedule. operationId: refresh_snapshot_playground_schedules__schedule_id__refresh_snapshot_post security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /playground/schedules/{schedule_id}/send-now: post: tags: - SCHEDULES summary: Send Now Endpoint description: 'Trigger a scheduled report to be sent immediately with fresh execution. Returns 202 Accepted immediately; the report is generated and emailed in the background. Check the schedule''s runs endpoint for status.' operationId: send_now_endpoint_playground_schedules__schedule_id__send_now_post security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id responses: '202': description: Successful Response content: application/json: schema: {} '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' /playground/schedules/{schedule_id}/runs: get: tags: - SCHEDULES summary: Get Schedule Runs Endpoint description: Get recent runs for a schedule. operationId: get_schedule_runs_endpoint_playground_schedules__schedule_id__runs_get security: - HTTPBearer: [] - HTTPBearer: [] parameters: - name: schedule_id in: path required: true schema: type: string format: uuid title: Schedule Id - name: limit in: query required: false schema: type: integer maximum: 100 default: 10 title: Limit responses: '200': description: Successful Response content: application/json: schema: $ref: '#/components/schemas/ScheduleRunsListResponse' '422': description: Validation Error content: application/json: schema: $ref: '#/components/schemas/HTTPValidationError' components: schemas: ScheduleFrequency: type: string enum: - daily - weekly - monthly - custom title: ScheduleFrequency description: Predefined schedule frequencies. ValidationError: properties: loc: items: anyOf: - type: string - type: integer type: array title: Location msg: type: string title: Message type: type: string title: Error Type type: object required: - loc - msg - type title: ValidationError HTTPValidationError: properties: detail: items: $ref: '#/components/schemas/ValidationError' type: array title: Detail type: object title: HTTPValidationError app__schemas__ai_playground__schedules__ScheduleCreateRequest: properties: name: type: string maxLength: 255 title: Name description: Name for this schedule session_id: type: string title: Session Id description: Session ID to schedule reports for content_scope: $ref: '#/components/schemas/ContentScope' description: What content to include default: first_query frequency: $ref: '#/components/schemas/ScheduleFrequency' description: Schedule frequency default: weekly custom_cron: anyOf: - type: string maxLength: 100 - type: 'null' title: Custom Cron description: Custom cron expression (only for 'custom' frequency) hour: type: integer maximum: 23.0 minimum: 0.0 title: Hour description: Hour to run (0-23 UTC) default: 9 day_of_week: anyOf: - type: integer maximum: 6.0 minimum: 0.0 - type: 'null' title: Day Of Week description: Day of week for weekly frequency (0=Sunday … 6=Saturday). Only valid when frequency='weekly'. When omitted, defaults to Monday (1) to preserve existing behaviour. day_of_month: anyOf: - type: integer maximum: 31.0 minimum: 1.0 - type: 'null' title: Day Of Month description: 'Day of month for monthly frequency (1-31). Only valid when frequency=''monthly''. When omitted, defaults to the 1st. Follows standard cron semantics: schedules with day_of_month=29/30/31 only fire in months that contain that day (so day=31 skips February, April, June, September, November). Matches APScheduler''s CronTrigger.from_crontab so the polled next_run and the registered periodic task stay in agreement.' emails: anyOf: - items: type: string type: array - type: 'null' title: Emails description: Email addresses to send reports to slack_webhook_id: anyOf: - type: integer minimum: 1.0 - type: 'null' title: Slack Webhook Id description: Notification ID for Slack webhook delivery. Must be a positive integer; 0 is reserved for the update path (clear selection). type: object required: - name - session_id title: ScheduleCreateRequest description: Request to create a new scheduled report. app__schemas__ai_playground__schedules__ScheduleResponse: properties: id: type: string format: uuid title: Id name: type: string title: Name session_id: type: string title: Session Id content_scope: $ref: '#/components/schemas/ContentScope' cron_expr: type: string title: Cron Expr destination_type: $ref: '#/components/schemas/DestinationType' emails: items: type: string type: array title: Emails slack_webhook_id: anyOf: - type: integer - type: 'null' title: Slack Webhook Id enabled: type: boolean title: Enabled last_run: anyOf: - type: string format: date-time - type: 'null' title: Last Run next_run: anyOf: - type: string format: date-time - type: 'null' title: Next Run created_by: type: integer title: Created By created_at: type: string format: date-time title: Created At updated_at: type: string format: date-time title: Updated At day_of_week: anyOf: - type: integer maximum: 6.0 minimum: 0.0 - type: 'null' title: Day Of Week description: Cron weekday (0=Sunday … 6=Saturday) when frequency is weekly day_of_month: anyOf: - type: integer maximum: 31.0 minimum: 1.0 - type: 'null' title: Day Of Month description: Cron day-of-month (1-31) when frequency is monthly type: object required: - id - name - session_id - content_scope - cron_expr - destination_type - emails - enabled - last_run - next_run - created_by - created_at - updated_at title: ScheduleResponse description: Response containing schedule details. DestinationType: type: string enum: - email - slack - multi title: DestinationType description: 'How to deliver the scheduled report. Derived from `destination_config` at save time — `MULTI` means both emails and a Slack webhook are configured on the same schedule.' ScheduleRunsListResponse: properties: runs: items: $ref: '#/components/schemas/ScheduleRunResponse' type: array title: Runs total: type: integer title: Total type: object required: - runs - total title: ScheduleRunsListResponse description: Response containing a list of schedule runs. ScheduleRunResponse: properties: id: type: string format: uuid title: Id schedule_id: type: string format: uuid title: Schedule Id run_at: type: string format: date-time title: Run At status: type: string title: Status error_message: anyOf: - type: string - type: 'null' title: Error Message recipients_count: anyOf: - type: integer - type: 'null' title: Recipients Count sent_count: anyOf: - type: integer - type: 'null' title: Sent Count failed_count: anyOf: - type: integer - type: 'null' title: Failed Count type: object required: - id - schedule_id - run_at - status - error_message - recipients_count - sent_count - failed_count title: ScheduleRunResponse description: Response for a single schedule run. app__schemas__ai_playground__schedules__ScheduleListResponse: properties: schedules: items: $ref: '#/components/schemas/app__schemas__ai_playground__schedules__ScheduleResponse' type: array title: Schedules total: type: integer title: Total type: object required: - schedules - total title: ScheduleListResponse description: Response containing a list of schedules. ContentScope: type: string enum: - first_query - last_answer - full_chat title: ContentScope description: What content to include in the scheduled report. app__schemas__ai_playground__schedules__ScheduleUpdateRequest: properties: name: anyOf: - type: string maxLength: 255 - type: 'null' title: Name content_scope: anyOf: - $ref: '#/components/schemas/ContentScope' - type: 'null' frequency: anyOf: - $ref: '#/components/schemas/ScheduleFrequency' - type: 'null' custom_cron: anyOf: - type: string maxLength: 100 - type: 'null' title: Custom Cron hour: anyOf: - type: integer maximum: 23.0 minimum: 0.0 - type: 'null' title: Hour day_of_week: anyOf: - type: integer maximum: 6.0 minimum: 0.0 - type: 'null' title: Day Of Week description: Day of week for weekly frequency (0=Sunday … 6=Saturday). Only meaningful when the patched frequency is 'weekly'. When the patched frequency stays/becomes 'weekly' and this field is omitted, the existing weekday is preserved. day_of_month: anyOf: - type: integer maximum: 31.0 minimum: 1.0 - type: 'null' title: Day Of Month description: Day of month for monthly frequency (1-31). Only meaningful when the patched frequency is 'monthly'. emails: anyOf: - items: type: string type: array - type: 'null' title: Emails slack_webhook_id: anyOf: - type: integer minimum: 0.0 - type: 'null' title: Slack Webhook Id enabled: anyOf: - type: boolean - type: 'null' title: Enabled type: object title: ScheduleUpdateRequest description: "Request to update an existing schedule.\n\n``slack_webhook_id``:\n - ``None`` (omitted) → leave webhook unchanged\n - ``0`` → clear the current webhook\n - any positive integer → set the webhook to that notification id" securitySchemes: HTTPBearer: type: http scheme: bearer