> ## 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.

# List report type performance profiles

> Returns per-report-type performance profiles derived from this client's report execution history over the last three months. Each profile carries a performance tier, the p90 run duration, and an optional per-range-hour normalized duration. SQL-backed report types are tiered VERY_FAST regardless of their execution history. Any other report type with at least 3 runs and more than 30% of them failing on memory or interrupt errors is tiered VERY_SLOW. Report types with fewer than 3 completed runs in the window are tiered UNKNOWN. VERY_FAST is also assigned outright to any other report type whose p90 duration is under a minute, regardless of its relative rank. Remaining report types are ranked relative to their peers, with range-parameterized types ranked by per-range-hour duration and rangeless types ranked by absolute p90 duration in separate peer groups. Results are ordered fastest first, by tier and then by p90 duration, and UNKNOWN report types come last. The list is paged: pass offset to read the next page, and a page with fewer profiles than limit is the last one. Use this to bias automated report runs toward faster report types.



## OpenAPI

````yaml /api-reference/management.json get /v4/reports/performance-profiles
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: SFTP Servers
  - name: Security Keys
  - name: Settings
  - name: User Notifications
  - name: User Subscriptions
  - name: Users
  - name: Webhooks
paths:
  /v4/reports/performance-profiles:
    get:
      tags:
        - Reports
      summary: List report type performance profiles
      description: >-
        Returns per-report-type performance profiles derived from this client's
        report execution history over the last three months. Each profile
        carries a performance tier, the p90 run duration, and an optional
        per-range-hour normalized duration. SQL-backed report types are tiered
        VERY_FAST regardless of their execution history. Any other report type
        with at least 3 runs and more than 30% of them failing on memory or
        interrupt errors is tiered VERY_SLOW. Report types with fewer than 3
        completed runs in the window are tiered UNKNOWN. VERY_FAST is also
        assigned outright to any other report type whose p90 duration is under a
        minute, regardless of its relative rank. Remaining report types are
        ranked relative to their peers, with range-parameterized types ranked by
        per-range-hour duration and rangeless types ranked by absolute p90
        duration in separate peer groups. Results are ordered fastest first, by
        tier and then by p90 duration, and UNKNOWN report types come last. The
        list is paged: pass offset to read the next page, and a page with fewer
        profiles than limit is the last one. Use this to bias automated report
        runs toward faster report types.
      parameters:
        - description: Optional maximum number of profiles to return, defaults to 100.
          in: query
          name: limit
          schema:
            type: string
        - description: >-
            Optional number of profiles to skip before the page starts, defaults
            to 0.
          in: query
          name: offset
          schema:
            type: string
      responses:
        '200':
          content:
            application/json:
              schema:
                items:
                  $ref: '#/components/schemas/ReportTypePerformanceProfileResponse'
                type: array
          description: Successful response
        '400':
          content:
            application/json:
              examples:
                binding_error:
                  $ref: '#/components/examples/binding_error'
                invalid_incoming_url:
                  $ref: '#/components/examples/invalid_incoming_url'
                invalid_json:
                  $ref: '#/components/examples/invalid_json'
                invalid_limit:
                  $ref: '#/components/examples/invalid_limit'
                invalid_offset:
                  $ref: '#/components/examples/invalid_offset'
                invalid_parameter:
                  $ref: '#/components/examples/invalid_parameter'
                invalid_uri_in_json:
                  $ref: '#/components/examples/invalid_uri_in_json'
                invalid_uri_in_query_parameter:
                  $ref: '#/components/examples/invalid_uri_in_query_parameter'
                max_fetch_size_1000:
                  $ref: '#/components/examples/max_fetch_size_1000'
                missing_request_body:
                  $ref: '#/components/examples/missing_request_body'
              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:
    ReportTypePerformanceProfileResponse:
      properties:
        p90_duration_per_range_hour:
          description: >-
            The p90 run duration normalized to seconds per hour of the report's
            requested time range. Absent when the report type takes no range
            parameter or no range could be resolved from the sampled runs.
          format: double
          type: number
        p90_duration_seconds:
          description: >-
            The p90 run duration in seconds across the sampled runs. Zero when
            there are no measurable runs.
          format: int64
          type: integer
        report_type:
          description: Name of the report type this profile describes.
          type: string
        sample_count:
          description: >-
            Number of completed runs with a measurable duration observed in the
            last three months and used to compute this profile. Runs that failed
            or never produced a duration are excluded.
          format: int32
          type: integer
        tier:
          description: >-
            Performance tier assigned to the report type. `VERY_FAST` through
            `VERY_SLOW` rank measured cost; `UNKNOWN` means there were fewer
            than 3 completed runs in the window to rank.
          enum:
            - FAST
            - MEDIUM
            - SLOW
            - UNKNOWN
            - VERY_FAST
            - VERY_SLOW
          type: string
      required:
        - p90_duration_seconds
        - report_type
        - sample_count
        - tier
      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_incoming_url:
      summary: invalid_incoming_url
      value:
        code: invalid_incoming_url
        http_status_code: 400
        message: Incoming URL is an invalid URI
        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_limit:
      summary: invalid_limit
      value:
        code: invalid_limit
        http_status_code: 400
        message: Limit should be a non negative integer
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_offset:
      summary: invalid_offset
      value:
        code: invalid_offset
        http_status_code: 400
        message: Offset should be a non negative integer
        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
    invalid_uri_in_json:
      summary: invalid_uri_in_json
      value:
        code: invalid_uri_in_json
        http_status_code: 400
        message: Invalid URI in JSON
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    invalid_uri_in_query_parameter:
      summary: invalid_uri_in_query_parameter
      value:
        code: invalid_uri_in_query_parameter
        http_status_code: 400
        message: Invalid URI in query parameter
        parameters: {}
        unique_id: 00000000-0000-0000-0000-000000000000
    max_fetch_size_1000:
      summary: max_fetch_size_1000
      value:
        code: max_fetch_size_1000
        http_status_code: 400
        message: Maximum allowed difference between limit and offset should be 1000
        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
    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

````

## Related topics

- [Get report type performance profile](https://docs.extole.com/api-reference/reports/get-report-type-performance-profile.md)
- [List report types](https://docs.extole.com/api-reference/report-types/list-report-types.md)
- [List recommended report types](https://docs.extole.com/api-reference/report-types/list-recommended-report-types.md)
- [List report types with their associated clients](https://docs.extole.com/api-reference/report-types/list-report-types-with-their-associated-clients.md)
- [List report type schemas](https://docs.extole.com/api-reference/report-types/list-report-type-schemas.md)


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.