Coval Scheduled Runs API

CRUD operations for scheduled evaluations

OpenAPI Specification

coval-scheduled-runs-api-openapi.yml Raw ↑
openapi: 3.0.3
info:
  title: Coval Agents Scheduled Runs API
  version: 1.0.0
  description: '

    Manage configurations for simulations and evaluations.

    '
  contact:
    name: Coval API Support
    email: support@coval.dev
    url: https://docs.coval.ai
  license:
    name: Proprietary
    url: https://coval.dev/terms
servers:
- url: https://api.coval.dev/v1
  description: Production API
security:
- ApiKeyAuth: []
tags:
- name: Scheduled Runs
  description: CRUD operations for scheduled evaluations
paths:
  /scheduled-runs:
    get:
      operationId: listScheduledRuns
      summary: List scheduled runs
      description: Retrieve a paginated list of scheduled runs with optional filtering.
      tags:
      - Scheduled Runs
      security:
      - ApiKeyAuth: []
      parameters:
      - name: page_size
        in: query
        required: false
        schema:
          type: integer
          minimum: 1
          maximum: 100
          default: 50
        description: Maximum number of results per page
        example: 50
      - name: page_token
        in: query
        required: false
        schema:
          type: string
        description: Opaque pagination token from previous response
      - name: enabled
        in: query
        required: false
        schema:
          type: boolean
        description: Filter by enabled state (true = active schedules, false = paused)
        example: true
      - name: template_id
        in: query
        required: false
        schema:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
        description: Filter by run template ID
        example: abc123def456ghi789jklm
      responses:
        '200':
          description: Scheduled runs retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ListScheduledRunsResponse'
              examples:
                success:
                  $ref: '#/components/examples/ListScheduledRunsSuccess'
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '500':
          $ref: '#/components/responses/InternalError'
    post:
      operationId: createScheduledRun
      summary: Create scheduled run
      description: 'Create a new scheduled run that will trigger evaluations on a recurring schedule.


        The schedule is defined using either:

        - **Rate expressions**: `rate(15 minutes)`, `rate(1 hour)`, `rate(1 day)`

        - **Cron expressions**: `cron(0 9 ? * MON-FRI *)` (9am weekdays)


        Schedules are created in an enabled state by default and will begin triggering

        at the next scheduled time.

        '
      tags:
      - Scheduled Runs
      security:
      - ApiKeyAuth: []
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CreateScheduledRunRequest'
            examples:
              rateExpression:
                $ref: '#/components/examples/CreateScheduledRunRate'
              cronExpression:
                $ref: '#/components/examples/CreateScheduledRunCron'
              disabled:
                $ref: '#/components/examples/CreateScheduledRunDisabled'
      responses:
        '201':
          description: Scheduled run created successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CreateScheduledRunResponse'
              examples:
                created:
                  $ref: '#/components/examples/ScheduledRunCreated'
        '400':
          description: Invalid request body or validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                invalidSchedule:
                  $ref: '#/components/examples/InvalidScheduleError'
                invalidTimezone:
                  $ref: '#/components/examples/InvalidTimezoneError'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Referenced run template not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                templateNotFound:
                  $ref: '#/components/examples/TemplateNotFoundError'
        '500':
          $ref: '#/components/responses/InternalError'
  /scheduled-runs/{scheduled_run_id}:
    get:
      operationId: getScheduledRun
      summary: Get scheduled run
      description: Retrieve a specific scheduled run by ID.
      tags:
      - Scheduled Runs
      security:
      - ApiKeyAuth: []
      parameters:
      - name: scheduled_run_id
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
        description: Scheduled run resource ID
        example: xyz789uvw456rst123abcd
      responses:
        '200':
          description: Scheduled run retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetScheduledRunResponse'
              examples:
                success:
                  $ref: '#/components/examples/GetScheduledRunSuccess'
        '400':
          description: Missing or invalid scheduled_run_id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Scheduled run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                notFound:
                  $ref: '#/components/examples/ScheduledRunNotFoundError'
        '500':
          $ref: '#/components/responses/InternalError'
    patch:
      operationId: updateScheduledRun
      summary: Update scheduled run
      description: 'Update specific fields of an existing scheduled run.


        Common use cases:

        - Enable/disable a schedule: `{"enabled": false}`

        - Change the schedule frequency: `{"schedule_expression": "rate(1 hour)"}`

        - Update the run template: `{"run_template_id": "new_template_id"}`

        '
      tags:
      - Scheduled Runs
      security:
      - ApiKeyAuth: []
      parameters:
      - name: scheduled_run_id
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
        description: Scheduled run resource ID
        example: xyz789uvw456rst123abcd
      requestBody:
        required: true
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/UpdateScheduledRunRequest'
            examples:
              disable:
                $ref: '#/components/examples/UpdateScheduledRunDisable'
              changeSchedule:
                $ref: '#/components/examples/UpdateScheduledRunSchedule'
      responses:
        '200':
          description: Scheduled run updated successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/UpdateScheduledRunResponse'
              examples:
                updated:
                  $ref: '#/components/examples/ScheduledRunUpdated'
        '400':
          description: Invalid request body or validation failed
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Scheduled run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                notFound:
                  $ref: '#/components/examples/ScheduledRunNotFoundError'
        '500':
          $ref: '#/components/responses/InternalError'
    delete:
      operationId: deleteScheduledRun
      summary: Delete scheduled run
      description: Delete a scheduled run and remove its associated schedule.
      tags:
      - Scheduled Runs
      security:
      - ApiKeyAuth: []
      parameters:
      - name: scheduled_run_id
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
        description: Scheduled run resource ID
        example: xyz789uvw456rst123abcd
      responses:
        '204':
          description: Scheduled run deleted successfully
        '400':
          description: Missing scheduled_run_id
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Scheduled run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                notFound:
                  $ref: '#/components/examples/ScheduledRunNotFoundError'
        '500':
          $ref: '#/components/responses/InternalError'
  /scheduled-runs/{scheduled_run_id}/runs:
    get:
      operationId: listScheduledRunHistory
      summary: List a scheduled run's produced runs
      description: 'Retrieve the runs a scheduled run has produced, most recent first

        (capped at the 500 most recent). Useful for programmatically checking

        what a schedule created via `POST /scheduled-runs`.

        '
      tags:
      - Scheduled Runs
      security:
      - ApiKeyAuth: []
      parameters:
      - name: scheduled_run_id
        in: path
        required: true
        schema:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
        description: Scheduled run resource ID
        example: xyz789uvw456rst123abcd
      responses:
        '200':
          description: Scheduled run history retrieved successfully
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GetScheduledRunHistoryResponse'
        '400':
          description: Missing scheduled_run_id in path
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          description: Scheduled run not found
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ErrorResponse'
              examples:
                notFound:
                  $ref: '#/components/examples/ScheduledRunNotFoundError'
        '500':
          $ref: '#/components/responses/InternalError'
components:
  responses:
    InternalError:
      description: Internal server error
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: INTERNAL
              message: Internal server error
              details:
              - description: An unexpected error occurred
    Unauthorized:
      description: Authentication failed
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: UNAUTHENTICATED
              message: Authentication failed
              details:
              - field: X-API-Key
                description: Invalid or missing API key
    BadRequest:
      description: Bad Request
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/ErrorResponse'
          example:
            error:
              code: INVALID_ARGUMENT
              message: Invalid request body
              details:
              - field: display_name
                description: Field required
  schemas:
    ScheduledRunResource:
      type: object
      description: Scheduled run configuration resource.
      required:
      - name
      - id
      - display_name
      - run_template_id
      - schedule_expression
      - enabled
      - create_time
      properties:
        name:
          type: string
          description: 'Resource name: "scheduled-runs/{id}"'
          example: scheduled-runs/xyz789uvw456rst123abcd
        id:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
          description: Scheduled run resource ID
          example: xyz789uvw456rst123abcd
        display_name:
          type: string
          maxLength: 200
          description: Human-readable schedule name
          example: Voice Agent Health Check
        run_template_id:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
          description: Associated run template
          example: abc123def456ghi789jklm
        schedule_expression:
          type: string
          description: 'Schedule expression in rate or cron format.


            **Rate format**: `rate(value unit)` where unit is minutes, hours, or days

            - `rate(15 minutes)` - Every 15 minutes

            - `rate(1 hour)` - Every hour

            - `rate(1 day)` - Daily


            **Cron format**: `cron(minutes hours day-of-month month day-of-week year)`

            - `cron(0 9 ? * MON-FRI *)` - 9am weekdays

            - `cron(0 2 ? * * *)` - 2am daily

            - `cron(0 0 1 * ? *)` - Midnight on 1st of month

            '
          example: rate(15 minutes)
        schedule_timezone:
          type: string
          default: UTC
          description: IANA timezone for cron expressions
          example: America/New_York
        enabled:
          type: boolean
          default: true
          description: Whether the schedule is active
          example: true
        last_run_at:
          type: string
          format: date-time
          nullable: true
          description: Timestamp of the most recent execution
          example: '2025-10-15T14:15:00Z'
        last_run_id:
          type: string
          nullable: true
          description: ID of the most recent run created by this schedule
          example: 8EktrIgaVxn9LfxkIynagX
        create_time:
          type: string
          format: date-time
          description: Creation timestamp (ISO 8601)
          example: '2025-10-14T12:00:00Z'
        update_time:
          type: string
          format: date-time
          nullable: true
          description: Last update timestamp (ISO 8601)
          example: '2025-10-15T14:30:00Z'
    GetScheduledRunResponse:
      type: object
      required:
      - scheduled_run
      properties:
        scheduled_run:
          $ref: '#/components/schemas/ScheduledRunResource'
    CreateScheduledRunRequest:
      type: object
      required:
      - display_name
      - run_template_id
      - schedule_expression
      properties:
        display_name:
          type: string
          minLength: 1
          maxLength: 200
          description: Human-readable schedule name
          example: Voice Agent Health Check
        run_template_id:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
          description: Run template to execute (must exist and be accessible)
          example: abc123def456ghi789jklm
        schedule_expression:
          type: string
          maxLength: 200
          description: 'Schedule expression in rate or cron format.


            **Rate format**: `rate(value unit)`

            - `rate(15 minutes)` - Every 15 minutes

            - `rate(1 hour)` - Every hour

            - `rate(1 day)` - Daily


            **Cron format**: `cron(minutes hours day-of-month month day-of-week year)`

            - `cron(0 9 ? * MON-FRI *)` - 9am weekdays

            - `cron(0 2 ? * * *)` - 2am daily

            '
          example: rate(15 minutes)
        schedule_timezone:
          type: string
          maxLength: 100
          default: UTC
          description: 'IANA timezone for cron expressions.


            Examples: `UTC`, `America/New_York`, `Europe/London`, `Asia/Tokyo`

            '
          example: America/New_York
        enabled:
          type: boolean
          default: true
          description: Whether to enable the schedule immediately
          example: true
    ErrorResponse:
      type: object
      required:
      - error
      properties:
        error:
          type: object
          required:
          - code
          - message
          - details
          properties:
            code:
              type: string
              enum:
              - INVALID_ARGUMENT
              - UNAUTHENTICATED
              - NOT_FOUND
              - CONFLICT
              - INTERNAL
              example: INVALID_ARGUMENT
            message:
              type: string
              description: Human-readable error message
              example: Invalid request parameter
            details:
              type: array
              items:
                type: object
                properties:
                  field:
                    type: string
                    nullable: true
                    description: Field that caused the error
                    example: schedule_expression
                  description:
                    type: string
                    description: Detailed error description
                    example: Must be 'rate(...)' or 'cron(...)' format
    UpdateScheduledRunRequest:
      type: object
      description: Partial update request (PATCH semantics - only provided fields are updated)
      properties:
        display_name:
          type: string
          minLength: 1
          maxLength: 200
          description: Human-readable schedule name
          example: Updated Schedule Name
        run_template_id:
          type: string
          pattern: ^[A-Za-z0-9]{22}$
          description: Run template to execute
          example: abc123def456ghi789jklm
        schedule_expression:
          type: string
          maxLength: 200
          description: Schedule expression in rate or cron format
          example: rate(1 hour)
        schedule_timezone:
          type: string
          maxLength: 100
          description: IANA timezone for cron expressions
          example: UTC
        enabled:
          type: boolean
          description: Enable or disable the schedule
          example: false
    UpdateScheduledRunResponse:
      type: object
      required:
      - scheduled_run
      properties:
        scheduled_run:
          $ref: '#/components/schemas/ScheduledRunResource'
    CreateScheduledRunResponse:
      type: object
      required:
      - scheduled_run
      properties:
        scheduled_run:
          $ref: '#/components/schemas/ScheduledRunResource'
    GetScheduledRunHistoryResponse:
      type: object
      required:
      - runs
      properties:
        runs:
          type: array
          description: Runs produced by the schedule, most recent first
          items:
            $ref: '#/components/schemas/ScheduledRunHistoryEntry'
    ListScheduledRunsResponse:
      type: object
      required:
      - scheduled_runs
      properties:
        scheduled_runs:
          type: array
          items:
            $ref: '#/components/schemas/ScheduledRunResource'
        next_page_token:
          type: string
          nullable: true
          description: Token for fetching next page (null if no more results)
          example: eyJvZmZzZXQiOjUwfQ==
        total_count:
          type: integer
          description: Total count of scheduled runs matching filter
          example: 12
    ScheduledRunHistoryEntry:
      type: object
      description: A run produced by a scheduled run (compact, AIP-shaped summary).
      required:
      - name
      - id
      - status
      - test_set_name
      - model_type
      - is_public
      - create_time
      properties:
        name:
          type: string
          description: Resource name in format "runs/{run_id}"
          example: runs/8EktrIgaVxn9LfxkIynagX
        id:
          type: string
          description: Run identifier
          example: 8EktrIgaVxn9LfxkIynagX
        display_name:
          type: string
          nullable: true
          description: Human-readable name for the run
          example: Nightly regression
        status:
          type: string
          description: Run status
          example: COMPLETED
        test_set_id:
          type: string
          nullable: true
          description: Test set the run executed
          example: aB1cD2eF
        test_set_name:
          type: string
          description: Test set display name
          example: Checkout flows
        agent_id:
          type: string
          nullable: true
          description: Agent under test
          example: gk3jK9mPq2xRt5vW8yZaBc
        model_type:
          type: string
          description: Model/connection type used for the run
          example: openai_realtime
        is_public:
          type: boolean
          description: Whether the run is shared via a public link
          example: false
        create_time:
          type: string
          format: date-time
          description: When the run was created (ISO 8601)
          example: '2025-10-14T12:00:00Z'
  examples:
    CreateScheduledRunRate:
      summary: Rate-based schedule (every 15 minutes)
      value:
        display_name: Voice Agent Health Check
        run_template_id: abc123def456ghi789jklm
        schedule_expression: rate(15 minutes)
        enabled: true
    TemplateNotFoundError:
      summary: Run template not found
      value:
        error:
          code: NOT_FOUND
          message: Template not found
          details:
          - field: run_template_id
            description: Run template not found or not accessible by your organization
    UpdateScheduledRunSchedule:
      summary: Change schedule frequency
      value:
        schedule_expression: rate(1 hour)
        display_name: Hourly Health Check
    UpdateScheduledRunDisable:
      summary: Disable a schedule
      value:
        enabled: false
    ScheduledRunCreated:
      summary: Scheduled run created successfully
      value:
        scheduled_run:
          name: scheduled-runs/xyz789uvw456rst123abcd
          id: xyz789uvw456rst123abcd
          display_name: Voice Agent Health Check
          run_template_id: abc123def456ghi789jklm
          schedule_expression: rate(15 minutes)
          schedule_timezone: UTC
          enabled: true
          last_run_at: null
          last_run_id: null
          create_time: '2025-10-14T12:00:00Z'
          update_time: null
    ScheduledRunNotFoundError:
      summary: Scheduled run not found
      value:
        error:
          code: NOT_FOUND
          message: Scheduled run not found
          details:
          - field: scheduled_run_id
            description: Scheduled run not found or not accessible by your organization
    InvalidScheduleError:
      summary: Invalid schedule expression
      value:
        error:
          code: INVALID_ARGUMENT
          message: Invalid request body
          details:
          - field: schedule_expression
            description: schedule_expression must be 'rate(...)' or 'cron(...)' format
    GetScheduledRunSuccess:
      summary: Successful get response
      value:
        scheduled_run:
          name: scheduled-runs/xyz789uvw456rst123abcd
          id: xyz789uvw456rst123abcd
          display_name: Voice Agent Health Check
          run_template_id: abc123def456ghi789jklm
          schedule_expression: rate(15 minutes)
          schedule_timezone: UTC
          enabled: true
          last_run_at: '2025-10-15T14:15:00Z'
          last_run_id: 8EktrIgaVxn9LfxkIynagX
          create_time: '2025-10-14T12:00:00Z'
          update_time: null
    CreateScheduledRunDisabled:
      summary: Create schedule in disabled state
      value:
        display_name: Pending Approval Schedule
        run_template_id: abc123def456ghi789jklm
        schedule_expression: rate(1 hour)
        enabled: false
    CreateScheduledRunCron:
      summary: Cron-based schedule (2am daily in EST)
      value:
        display_name: Nightly Regression Tests
        run_template_id: abc123def456ghi789jklm
        schedule_expression: cron(0 2 ? * * *)
        schedule_timezone: America/New_York
        enabled: true
    InvalidTimezoneError:
      summary: Invalid timezone
      value:
        error:
          code: INVALID_ARGUMENT
          message: Invalid request body
          details:
          - field: schedule_timezone
            description: 'Invalid IANA timezone: ''Invalid/Zone'''
    ScheduledRunUpdated:
      summary: Scheduled run updated successfully
      value:
        scheduled_run:
          name: scheduled-runs/xyz789uvw456rst123abcd
          id: xyz789uvw456rst123abcd
          display_name: Hourly Health Check
          run_template_id: abc123def456ghi789jklm
          schedule_expression: rate(1 hour)
          schedule_timezone: UTC
          enabled: true
          last_run_at: '2025-10-15T14:15:00Z'
          last_run_id: 8EktrIgaVxn9LfxkIynagX
          create_time: '2025-10-14T12:00:00Z'
          update_time: '2025-10-15T15:00:00Z'
    ListScheduledRunsSuccess:
      summary: Successful list response
      value:
        scheduled_runs:
        - name: scheduled-runs/xyz789uvw456rst123abcd
          id: xyz789uvw456rst123abcd
          display_name: Voice Agent Health Check
          run_template_id: abc123def456ghi789jklm
          schedule_expression: rate(15 minutes)
          schedule_timezone: UTC
          enabled: true
          last_run_at: '2025-10-15T14:15:00Z'
          last_run_id: 8EktrIgaVxn9LfxkIynagX
          create_time: '2025-10-14T12:00:00Z'
          update_time: null
        - name: scheduled-runs/def456ghi789jklmabc123
          id: def456ghi789jklmabc123
          display_name: Nightly Regression Tests
          run_template_id: abc123def456ghi789jklm
          schedule_expression: cron(0 2 ? * * *)
          schedule_timezone: America/New_York
          enabled: true
          last_run_at: '2025-10-15T06:00:00Z'
          last_run_id: 9FluskHbWyo0MgyiJzobY
          create_time: '2025-10-10T09:00:00Z'
          update_time: '2025-10-12T11:30:00Z'
        next_page_token: null
        total_count: 2
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication
x-visibility: external