> ## Documentation Index
> Fetch the complete documentation index at: https://docs.extole.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Generate missing reports for a schedule

> Runs a scheduled report runner for past periods that have no report yet, and returns the reports it started. A period that already has a report is left alone, so this is safe to repeat.

The scheduler itself only ever fills the most recently completed period, so a period that was never run, or whose report was deleted after a newer one existed, stays empty until this operation is called. Each generated report runs against the data available now, not the data that existed when the period closed.

Periods are filled most recent first. Use `limit` to bound how many reports are started in one call, and poll `GET /v6/report-runners/{reportRunnerId}/reports` for their status.



## OpenAPI

````yaml /api-reference/management.json post /v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports
openapi: 3.0.1
info:
  description: >-
    Configuration endpoints for the Extole platform: campaigns, components,
    audiences, persons, rewards, reporting, integrations setup, and
    administrative tooling.


    ## Updating a resource


    `PUT` merges. A field you omit from the body is left at its stored value, so
    you do not need to read a resource and send it back whole in order to change
    one field. This is a deliberate departure from the HTTP convention that
    `PUT` replaces, and it holds across this API.


    Two qualifications, both visible on each operation's own request schema:


    - Some operations mark fields `required` in their request schema. Those must
    be sent on every request, whether or not you are changing them.

    - A field that holds a list or a map is replaced, not merged, when you
    supply it. Sending one entry of a collection stores that entry and drops the
    rest, so to change one member of a collection you must send the collection's
    other members alongside it.
  title: Management API
  version: '1.0'
servers:
  - description: Production
    url: https://api.extole.io
security:
  - HEADER: []
  - QUERY: []
  - COOKIE: []
tags:
  - name: Audiences
  - name: Authentication
  - name: Batch Jobs
  - name: Batch Jobs (Legacy)
  - name: Blocks
  - name: Campaigns
  - name: Components
  - name: Components Operations
  - name: Domains
  - name: Email
  - name: Erasure
  - name: Event Streams
  - name: Optout
  - name: Profiles
  - name: Promotion Links
  - name: Report Schedules
  - name: Report Types
  - name: Reports
  - name: Reward Suppliers
  - name: Security Keys
  - name: Settings
  - name: User Notifications
  - name: User Subscriptions
  - name: Users
  - name: Webhooks
paths:
  /v6/report-runners/scheduled/{reportRunnerId}/generate-missing-reports:
    post:
      tags:
        - Report Schedules
      summary: Generate missing reports for a schedule
      description: >-
        Runs a scheduled report runner for past periods that have no report yet,
        and returns the reports it started. A period that already has a report
        is left alone, so this is safe to repeat.


        The scheduler itself only ever fills the most recently completed period,
        so a period that was never run, or whose report was deleted after a
        newer one existed, stays empty until this operation is called. Each
        generated report runs against the data available now, not the data that
        existed when the period closed.


        Periods are filled most recent first. Use `limit` to bound how many
        reports are started in one call, and poll `GET
        /v6/report-runners/{reportRunnerId}/reports` for their status.
      operationId: generateMissingReports
      parameters:
        - description: The Extole unique report runner identifier.
          in: path
          name: reportRunnerId
          required: true
          schema:
            type: string
        - description: >-
            Restrict generation to periods ending at or after this date. Omit to
            consider every period since the schedule started.
          in: query
          name: slot
          schema:
            $ref: '#/components/schemas/ZonedDateTime'
        - description: >-
            Maximum number of reports to start. Defaults to `1` when `slot` is
            omitted, and to unlimited when `slot` is supplied.
          in: query
          name: limit
          schema:
            format: int32
            type: integer
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ReportResponse'
                type: array
          description: >-
            The reports that were started, one per period that had none. Empty
            when every period already has a report.
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
                report_runner_invalid_aggregation_status:
                  $ref: >-
                    #/components/examples/report_runner_invalid_aggregation_status
                report_runner_invalid_parameter:
                  $ref: '#/components/examples/report_runner_invalid_parameter'
                report_runner_invalid_pause_status:
                  $ref: '#/components/examples/report_runner_invalid_pause_status'
                report_runner_invalid_slot:
                  $ref: '#/components/examples/report_runner_invalid_slot'
                report_runner_invalid_slot_type:
                  $ref: '#/components/examples/report_runner_invalid_slot_type'
                report_runner_invalid_status:
                  $ref: '#/components/examples/report_runner_invalid_status'
                report_runner_invalid_type:
                  $ref: '#/components/examples/report_runner_invalid_type'
                report_runner_no_execution_time_range:
                  $ref: '#/components/examples/report_runner_no_execution_time_range'
                report_runner_paused:
                  $ref: '#/components/examples/report_runner_paused'
                report_runner_slots_not_supported:
                  $ref: '#/components/examples/report_runner_slots_not_supported'
                report_runner_wrong_type:
                  $ref: '#/components/examples/report_runner_wrong_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Bad Request
        '401':
          content:
            application/json:
              examples:
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unauthorized
        '402':
          content:
            application/json:
              examples:
                payment_required:
                  $ref: '#/components/examples/payment_required'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Payment Required
        '403':
          content:
            application/json:
              examples:
                access_denied:
                  $ref: '#/components/examples/access_denied'
                method_unauthorized:
                  $ref: '#/components/examples/method_unauthorized'
                missing_access_token:
                  $ref: '#/components/examples/missing_access_token'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Forbidden
        '415':
          content:
            application/json:
              examples:
                unsupported_media_type:
                  $ref: '#/components/examples/unsupported_media_type'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Unsupported Media Type
        '429':
          content:
            application/json:
              examples:
                too_many_requests:
                  $ref: '#/components/examples/too_many_requests'
              schema:
                $ref: '#/components/schemas/RestExceptionResponse'
          description: Too Many Requests
components:
  schemas:
    ZonedDateTime:
      description: >-
        [RFC 3339](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) or
        [RFC 9557](https://datatracker.ietf.org/doc/html/rfc9557#section-4)
        date-time with a numeric [UTC
        offset](https://datatracker.ietf.org/doc/html/rfc3339#section-5.6) and
        an optional [IANA
        time-zone](https://datatracker.ietf.org/doc/html/rfc9557#section-4)
        suffix in square brackets. Precision up to milliseconds.
      example: '2025-10-24T02:00:00-07:00'
      pattern: >-
        ^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d{1,3})?(Z|[+-](?:[01][0-9]|2[0-3]):[0-5][0-9])(\[[^\]]+\])?$
      type: string
    ReportResponse:
      properties:
        completed_date:
          nullable: true
          type: string
        display_name:
          type: string
        download_uri:
          nullable: true
          type: string
        formats:
          items:
            enum:
              - CSV
              - HEADLESS_CSV
              - HEADLESS_PSV
              - JSON
              - JSONL
              - PSV
              - XLSX
            type: string
          type: array
        name:
          type: string
        report_id:
          type: string
        report_type:
          type: string
        tags:
          items:
            type: string
          type: array
          uniqueItems: true
      required:
        - completed_date
        - display_name
        - download_uri
        - formats
        - name
        - report_id
        - report_type
        - tags
      type: object
    RestExceptionResponse:
      description: Represents the API error response
      properties:
        code:
          description: Specific error code for this error type, documented per endpoint
          type: string
        http_status_code:
          description: >-
            HTTP status code that was returned with this error, useful if client
            get response code
          format: int32
          type: integer
        message:
          description: User readable English description of the error
          type: string
        parameters:
          additionalProperties:
            description: >-
              Attributes related to the error, varies be error code, documented
              per endpoint
            type: object
          description: >-
            Attributes related to the error, varies be error code, documented
            per endpoint
          type: object
        unique_id:
          description: >-
            Unique id associated with this error, useful for discussions with
            Extole
          type: string
      required:
        - code
        - http_status_code
        - message
        - parameters
        - unique_id
      type: object
  examples:
    binding_error:
      summary: binding_error
      value:
        code: binding_error
        http_status_code: 400
        message: Argument is not of the expected type
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_json:
      summary: invalid_json
      value:
        code: invalid_json
        http_status_code: 400
        message: JSON is invalid
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_parameter:
      summary: invalid_parameter
      value:
        code: invalid_parameter
        http_status_code: 400
        message: Parameter is invalid.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    missing_request_body:
      summary: missing_request_body
      value:
        code: missing_request_body
        http_status_code: 400
        message: Missing request body
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_invalid_aggregation_status:
      summary: report_runner_invalid_aggregation_status
      value:
        code: report_runner_invalid_aggregation_status
        http_status_code: 400
        message: Report runner aggregation status is invalid
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_invalid_parameter:
      summary: report_runner_invalid_parameter
      value:
        code: report_runner_invalid_parameter
        http_status_code: 400
        message: Report runner parameter(s) of invalid format
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_invalid_pause_status:
      summary: report_runner_invalid_pause_status
      value:
        code: report_runner_invalid_pause_status
        http_status_code: 400
        message: Report runner pause status is invalid
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_invalid_slot:
      summary: report_runner_invalid_slot
      value:
        code: report_runner_invalid_slot
        http_status_code: 400
        message: Report runner slot of invalid format
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_invalid_slot_type:
      summary: report_runner_invalid_slot_type
      value:
        code: report_runner_invalid_slot_type
        http_status_code: 400
        message: Report runner slot type is invalid
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_invalid_status:
      summary: report_runner_invalid_status
      value:
        code: report_runner_invalid_status
        http_status_code: 400
        message: Report runner status is invalid
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_invalid_type:
      summary: report_runner_invalid_type
      value:
        code: report_runner_invalid_type
        http_status_code: 400
        message: Report runner type is invalid
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_no_execution_time_range:
      summary: report_runner_no_execution_time_range
      value:
        code: report_runner_no_execution_time_range
        http_status_code: 400
        message: Report runner has no valid execution time ranges to run
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_paused:
      summary: report_runner_paused
      value:
        code: report_runner_paused
        http_status_code: 400
        message: Report runner is paused
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_slots_not_supported:
      summary: report_runner_slots_not_supported
      value:
        code: report_runner_slots_not_supported
        http_status_code: 400
        message: Report runner slots is not supported
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    report_runner_wrong_type:
      summary: report_runner_wrong_type
      value:
        code: report_runner_wrong_type
        http_status_code: 400
        message: Report Runner of wrong type
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    method_unauthorized:
      summary: method_unauthorized
      value:
        code: method_unauthorized
        http_status_code: 401
        message: Unauthorized access to this endpoint
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    payment_required:
      summary: payment_required
      value:
        code: payment_required
        http_status_code: 402
        message: The access_token provided is associated with an unpaid account.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    access_denied:
      summary: access_denied
      value:
        code: access_denied
        http_status_code: 403
        message: >-
          The access_token provided is not permitted to access the specified
          resource.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    missing_access_token:
      summary: missing_access_token
      value:
        code: missing_access_token
        http_status_code: 403
        message: No access_token was provided with this request.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    unsupported_media_type:
      summary: unsupported_media_type
      value:
        code: unsupported_media_type
        http_status_code: 415
        message: Request had an unsupported or no media type
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    too_many_requests:
      summary: too_many_requests
      value:
        code: too_many_requests
        http_status_code: 429
        message: >-
          The server is unable to process your request at the moment, please
          retry later.
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
  securitySchemes:
    HEADER:
      in: header
      name: Authorization
      type: apiKey
      x-bearer-format: bearer
    QUERY:
      in: query
      name: access_token
      type: apiKey
    COOKIE:
      in: cookie
      name: extole_token
      type: apiKey

````