Athenian histograms API

The histograms API from Athenian — 3 operation(s) for histograms.

Operations 3

POST /histograms/code_checks Calculate histograms on continuous integration runs, such as GitHub Actions, Jenkins, Circle, etc. #
POST /histograms/jira Calculate histograms over JIRA issue activities. #
POST /histograms/pull_requests Calculate histograms over PR distributions. #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/athenian-histograms-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no form to fill in. Signing in shares your email address with us — we store it to create your key and to recognise you if you sign in with another provider. See our Privacy Policy and Terms.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

athenian-histograms-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  contact:
    email: admin@athenian.co
    name: the administrator by email
  description: 'Server version: {{ server_version }} built on {{ build_date }} @ [{{ commit }}](https://github.com/athenianco/athenian-api/commit/{{ commit }})


    Origin GitHub repository: [athenianco/api-spec](https://github.com/athenianco/api-spec).


    Authorization persists between sessions. Marks:

    * 🛡️ endpoint requires account admin privileges.

    * 👤 endpoint only works with JWT authentication.

    <details>

    <summary>List of common server errors.</summary>

    * __500__ endpoint crashed. We reported the incident to Sentry and will fix it soon! Please include the value of `instance` in the response if you contact the support. Repeating the request will not help, most probably.

    * __501__ some functions are missing, either because they are not implemented yet or a non-critical runtime dependency is not satisfied. Repeating the request will not help, guaranteed.

    * __502__ server crashed badly, either due to a memory access violation in native code or running out of memory. We reported this incident to Sentry and will fix it soon! Try repeating the request.

    * __503__ server has not fully launched yet, e.g. hasn''t connected to the database; server is shutting down; we are experiencing a partial outage. Try repeating the request.

    * __504__ endpoint took too much time and was interrupted. We reported the incident to Sentry and will see how to improve the performance. Repeating the request will not help, most probably.

    </details>'
  license:
    name: CC-BY-4.0
  title: '{{ title }} Histograms API'
  version: 2.1.86
servers:
- description: '{{ server_description }} - {{ server_url }}'
  url: '{{ server_url }}/v1'
tags:
- name: histograms
paths:
  /histograms/code_checks:
    post:
      operationId: calc_histogram_code_checks
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/CodeCheckHistogramsRequest'
        description: Select the check runs of interest and the metrics to calculate.
        required: true
        x-body-name: body
      responses:
        200:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalculatedCodeCheckHistograms'
          description: Calculated histograms.
        400:
          $ref: '#/components/responses/InvalidRequestErrorResponse'
        403:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
          description: The user is forbidden to access the specified repositories on behalf of the specified account.
        404:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
          description: The specified account does not exist or the user is not a member.
        422:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoSourceDataError'
          description: The account's installation has not finished yet.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      summary: Calculate histograms on continuous integration runs, such as GitHub Actions, Jenkins, Circle, etc.
      tags:
      - histograms
      x-codegen-request-body-name: body
      x-openapi-router-controller: athenian.api.controllers.histograms_controller
  /histograms/jira:
    post:
      operationId: calc_histogram_jira
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/JIRAHistogramsRequest'
        description: Query for selecting JIRA issues and binned activities.
        required: true
        x-body-name: body
      responses:
        200:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalculatedJIRAHistograms'
          description: Calculated histograms.
        400:
          $ref: '#/components/responses/InvalidRequestErrorResponse'
        403:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
          description: The user is forbidden to access the specified repositories on behalf of the specified account.
        404:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
          description: The specified account does not exist or the user is not a member.
        422:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoSourceDataError'
          description: The account's installation has not finished yet.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      summary: Calculate histograms over JIRA issue activities.
      tags:
      - histograms
      x-codegen-request-body-name: body
      x-openapi-router-controller: athenian.api.controllers.jira_controller
  /histograms/pull_requests:
    post:
      operationId: calc_histogram_prs
      requestBody:
        content:
          application/json:
            schema:
              $ref: '#/components/schemas/PullRequestHistogramsRequest'
        description: Desired histogram definitions.
        required: true
        x-body-name: body
      responses:
        200:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/CalculatedPullRequestHistograms'
          description: Calculated histograms.
        400:
          $ref: '#/components/responses/InvalidRequestErrorResponse'
        403:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
          description: The user is forbidden to calculate metrics on behalf of the specified account.
        404:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/GenericError'
          description: The specified account does not exist or the user is not a member.
        422:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/NoSourceDataError'
          description: No data is available to calculate histograms for the given repositories.
        424:
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/MissingSettingsError'
          description: One or more logical repositories miss the release settings.
      security:
      - bearerAuth: []
      - apiKeyAuth: []
      summary: Calculate histograms over PR distributions.
      tags:
      - histograms
      x-codegen-request-body-name: body
      x-openapi-router-controller: athenian.api.controllers.histograms_controller
components:
  schemas:
    WithBothJiraAndJiragroups:
      description: An object having both jira and jiragroups fields.
      properties:
        jira: {}
        jiragroups: {}
      required:
      - jira
      - jiragroups
      type: object
    RepositoryID:
      description: 'Repository name which uniquely identifies any repository in any service provider.

        The format matches the repository URL without the protocol part. No ".git" should be appended.

        We support a special syntax for repository sets: "{reposet id}" adds all the repositories

        from the given set.

        '
      example: github.com/athenianco/athenian-webapp
      type: string
    JIRAEpicChild:
      allOf:
      - $ref: '#/components/schemas/JIRAEpicIssueCommon'
      - properties:
          subtasks:
            description: Number of sub-tasks.
            type: integer
          prs:
            description: Number of mapped pull requests.
            type: integer
        required:
        - prs
        - subtasks
      description: Details about a JIRA issue contained in an epic.
      example:
        id: DEV-157
        title: New repository for the precomputing service
        created: 2020-05-21 18:29:00+00:00
        updated: 2020-11-25 13:49:00+00:00
        reporter: Vadim Markovtsev
        assignee: Oleksandr Chabaiev
        comments: 10
        priority: Low
        status: Released
        prs: 0
        type: Task
        acknowledge_time: 132200s
        life_time: 10000s
        url: https://example.com/?my-jira#DEV-157
        subtasks: 2
      type: object
    JIRAMetricID:
      description: 'Currently supported JIRA activity metrics.

        * `jira-open` - number of issues active by the end of the time interval.

        * `jira-resolved` - number of issues closed in the given time range.

        * `jira-raised` - number of issues reported in the given time range.

        * `jira-acknowledged` - number of issues that are "In Progress" or "Resolved". This number matches the issues considered to calculate `jira-acknowledge-time` before applying the quantiles.

        * `jira-acknowledged-q` - number of issues that are "In Progress" or "Resolved". This number matches the issues considered to calculate `jira-acknowledge-time` after applying the quantiles.

        * `jira-life-time` - Mean Life Time - the time between min(issue creation, work began) and max(issue resolution, fixes released).

        * `jira-life-time-below-threshold-ratio` - ratio of issues with a `jira-life-time` below the threshold, disregarding the quantiles. The default threshold is 5 days.

        * `jira-lead-time` - Mean Lead Time - the time between when the work began and max(issue resolution, fixes released).

        * `jira-lead-time-below-threshold-ratio` - ratio of issues with a `jira-lead-time` below the threshold, disregarding the quantiles. The default threshold is 5 days.

        * `jira-acknowledge-time` - Mean Acknowledge Time - the time between when the issue was created and the work began = `min(transitioned to "In Progress", PR created)`. It equals to 0 for retrofitted issues with PRs before their creation times.

        * `jira-acknowledge-time-below-threshold-ratio` - ratio of issues with a `jira-acknowledge-time` below the threshold, disregarding the quantiles. The default threshold is 3 days.

        * `jira-pr-lag-time` - the time between when the issue transitioned to "In Progress" and the first PR was created. It equals to 0 if the difference is negative or no PRs are mapped to the issue.

        * `jira-backlog-time` - the time between when the issue was created and transitioned to "In Progress".

        * `jira-resolution-rate` - ratio between the number of resolved issues to the number of raised issues.'
      enum:
      - jira-open
      - jira-resolved
      - jira-raised
      - jira-acknowledged
      - jira-acknowledged-q
      - jira-life-time
      - jira-life-time-below-threshold-ratio
      - jira-lead-time
      - jira-lead-time-below-threshold-ratio
      - jira-acknowledge-time
      - jira-acknowledge-time-below-threshold-ratio
      - jira-pr-lag-time
      - jira-backlog-time
      - jira-resolution-rate
      example: jira-resolved
      type: string
    ForSetCodeChecks:
      additionalProperties: false
      description: 'Filters for `/metrics/code_checks` and `/histograms/code_checks`.

        Achieve the best performance by packing all your filters in a single `ForSetCodeChecks`

        instead of sending multiple `ForSetCodeChecks`-s. For example, use `repogroups` and `pushers`

        to request separate metrics for several repository sets and teams.

        '
      example:
        repositories:
        - github.com/athenianco/athenian-webapp
        - github.com/athenianco/athenian-api
        pushers:
        - github.com/vmarkovtsev
        - github.com/dpordomingo
        jira:
          labels_include:
          - bug
      properties:
        repositories:
          $ref: '#/components/schemas/RepositorySet'
        repogroups:
          $ref: '#/components/schemas/IndexedGroups'
        pushers:
          $ref: '#/components/schemas/CommitPushers'
        pusher_groups:
          description: 'Check runs must be triggered by commits authored by these people.

            We aggregate by each group so that you can request metrics of several teams at once.

            We treat `pushers` as another group, if specified.'
          items:
            $ref: '#/components/schemas/CommitPushers'
          type: array
        labels_include:
          description: At least one of these labels must be present in the checked PRs.
          items:
            type: string
          type: array
        labels_exclude:
          description: None of these labels must be present in each checked PR.
          items:
            type: string
          type: array
        jira:
          allOf:
          - description: Analyze only those check runs that belong to PRs mapped to JIRA issues that satisfy this filter.
          - $ref: '#/components/schemas/JIRAFilter'
        lines:
          description: Split by changed number of lines (inserted + removed) in pull requests.
          items:
            minimum: 0
            type: integer
          minItems: 2
          type: array
      required:
      - repositories
      type: object
    JIRAHistogramDefinition:
      additionalProperties: false
      description: 'Histogram parameters: topic, bins.'
      example:
        metric: jira-raised
        ticks:
        - 1
        - 10
        - 50
        - 100
        - 500
      properties:
        metric:
          $ref: '#/components/schemas/JIRAMetricID'
        scale:
          allOf:
          - $ref: '#/components/schemas/HistogramScale'
          - description: Histogram's X axis scale.
        bins:
          description: Number of bars in the histogram. 0 or null means automatic.
          minimum: 0
          type: integer
        ticks:
          description: 'Alternatively to `bins` and `scale`, set the X axis bar borders manually.

            Only one of two may be specified. The ticks are automatically prepended

            the distribution minimum and appended the distribution maximum.'
          items:
            oneOf:
            - type: number
            - $ref: '#/components/schemas/TimeDuration'
          minItems: 1
          type: array
      required:
      - metric
      type: object
    Quantiles:
      description: 'Cut the distributions at certain quantiles.

        The default values are [0, 1] which means no cutting.'
      example:
      - 0
      - 0.95
      items:
        maximum: 1
        minimum: 0
        type: number
      maxItems: 2
      minItems: 2
      type: array
    JIRAFilter:
      additionalProperties: false
      description: 'Filters related to JIRA traits. The aggregation between each filter type is *AND*.

        '
      example:
        epics:
        - DEV-167
        - DEV-230
        labels_include:
        - api,performance
        - metadata
        labels_exclude:
        - feature
        issue_types:
        - Bug
        - Task
        priorities:
        - high
        - low
        projects:
        - DEV
        - ENG
        status_categories:
        - In Progress
      properties:
        epics:
          description: JIRA issues must be included in the epics from the list.
          items:
            type: string
          type: array
        labels_include:
          description: 'Only issues having at least one label from the list will be included

            Several labels may be concatenated by a comma `,` so that all of them

            are required.

            '
          items:
            type: string
          type: array
        labels_exclude:
          description: Issues having one label from the list will be excluded.
          items:
            type: string
          type: array
        issue_types:
          description: 'Issues must have one of the given types, e.g. Bug, Task, Design Document, etc.

            '
          items:
            type: string
          type: array
        priorities:
          description: Issues must have a priority from the given list.
          items:
            type: string
          type: array
        projects:
          description: Issues must be contained in a project in the given project keys list.
          items:
            type: string
          type: array
        status_categories:
          description: The JIRA issues must have a status belonging to one of these categories.
          items:
            $ref: '#/components/schemas/JIRAStatusCategory'
          type: array
        unmapped:
          description: Select PRs that are not mapped to any JIRA issue. May not be specified with anything else.
          type: boolean
      type: object
    MissingSettingsError:
      $ref: '#/components/schemas/GenericError'
    JIRAEpic:
      allOf:
      - $ref: '#/components/schemas/JIRAEpicIssueCommon'
      - properties:
          project:
            description: Identifier of the project where this epic exists.
            type: string
          children:
            description: Details about the child issues.
            items:
              $ref: '#/components/schemas/JIRAEpicChild'
            type: array
          prs:
            description: Overall number of mapped pull requests (including the children).
            type: integer
        required:
        - project
        - prs
      description: Details about a JIRA epic together with its child issues.
      example:
        id: DEV-158
        title: Precomputed DB - stage 2
        created: 2020-05-21 18:27:00+00:00
        updated: 2020-08-03 23:47:00+00:00
        reporter: Vadim Markovtsev
        assignee: Vadim Markovtsev
        comments: 1
        prs: 0
        priority: Low
        status: Backlog
        type: Epic
        acknowledge_time: 132200s
        life_time: 10000s
        url: https://example.com/?my-jira#DEV-158
        project: '1002'
        children:
        - id: DEV-157
          title: New repository for the precomputing service
          created: 2020-05-21 18:29:00+00:00
          updated: 2020-11-25 13:49:00+00:00
          reporter: Vadim Markovtsev
          assignee: Oleksandr Chabaiev
          comments: 10
          priority: Low
          status: Released
          prs: 0
          type: Task
          url: https://example.com/?my-jira#DEV-157
          acknowledge_time: 132200s
          life_time: 10000s
          subtasks: 0
        - id: DEV-156
          title: Design the architecture of the precomputing service
          created: 2020-05-21 18:27:00+00:00
          updated: 2020-09-09 00:05:00+00:00
          reporter: Vadim Markovtsev
          assignee: Vadim Markovtsev
          comments: 0
          priority: Low
          status: Released
          prs: 0
          type: Task
          url: https://example.com/?my-jira#DEV-156
          acknowledge_time: 132200s
          life_time: 20000s
          subtasks: 2
      type: object
    TimeZone:
      description: Local time zone offset in minutes, used to adjust `date_from` and `date_to`.
      maximum: 780
      minimum: -720
      type: integer
    CalculatedCodeCheckHistograms:
      description: Response from `/histograms/code_checks`.
      items:
        $ref: '#/components/schemas/CalculatedCodeCheckHistogram'
      type: array
    GenericError:
      example:
        detail: 'Unsupported metric: pr-xxx-time'
        status: 400
        title: Bad request syntax or unsupported method.
        type: /errors/InvalidRequestError
      properties:
        detail:
          description: Human-readable explanation specific to this occurrence of the problem.
          example: 'Unsupported metric: pr-xxx-time'
          type: string
        instance:
          description: URI reference that identifies the specific occurrence of the problem. It is `null` for 4xx, Sentry event ID for 5xx.
          example: 2763c4eabd7240f59829ee1a02546293
          type: string
        status:
          description: Duplicated HTTP status code.
          example: 400
          type: integer
        title:
          description: Short, human-readable summary of the problem type.
          example: Bad request syntax or unsupported method.
          type: string
        type:
          description: URI reference that identifies the problem type (RFC 7807).
          example: /errors/InvalidRequestError
          type: string
      required:
      - status
      - title
      - type
      type: object
    HistogramScale:
      description: 'X axis scale: linear or logarithmic.'
      enum:
      - linear
      - log
      example: log
      type: string
    DeveloperID:
      description: 'User name which uniquely identifies any developer on any service provider.

        The format matches the profile URL without the protocol part.

        '
      example: github.com/vmarkovtsev
      type: string
    CalculatedPullRequestHistograms:
      description: Response from `/histograms/pull_requests`.
      items:
        $ref: '#/components/schemas/CalculatedPullRequestHistogram'
      type: array
    JIRAFilterWith:
      additionalProperties: false
      description: Group of JIRA issue participant names split by role.
      example:
        assignees:
        - Vadim Markovtsev
      properties:
        assignees:
          description: Selected issue assignee users. `null` means unassigned.
          items:
            type:
            - string
            - 'null'
          type: array
        reporters:
          description: Selected issue reporter users.
          items:
            type: string
          type: array
        commenters:
          description: Selected issue commenter users.
          items:
            type: string
          type: array
      type: object
    JIRAStatusCategory:
      description: The category of a JIRA issue status.
      enum:
      - To Do
      - In Progress
      - Done
      - No Category
      type: string
    CalculatedJIRAHistogram:
      additionalProperties: false
      description: Calculated histogram over JIRA issue activities.
      example:
        metric: jira-raised
        scale: linear
        ticks:
        - 0
        - 1
        - 10
        - 50
        - 100
        - 500
        - 10000
        frequencies:
        - 0
        - 38
        - 28
        - 13
        - 12
        - 8
        interquartile:
          left: 3
          right: 76
      properties:
        with:
          $ref: '#/components/schemas/JIRAFilterWith'
        metric:
          $ref: '#/components/schemas/JIRAMetricID'
        scale:
          $ref: '#/components/schemas/HistogramScale'
        ticks:
          description: Series of horizontal bar borders aka X axis. Their count is `len(y) + 1` because there are `N` intervals between `(N + 1)` ticks.
          items:
            oneOf:
            - type: number
            - $ref: '#/components/schemas/TimeDuration'
          type: array
        frequencies:
          description: Series of histogram bar heights aka Y axis.
          items:
            minimum: 0
            type: integer
          type: array
        interquartile:
          $ref: '#/components/schemas/Interquartile'
      required:
      - frequencies
      - interquartile
      - metric
      - scale
      - ticks
      type: object
    IndexedGroups:
      description: 'Lists of indexes in `repositories` or `developers` that define independent groups

        that must be processed individually. The groups may have intersections.'
      example:
      - - 0
        - 1
      - - 1
      items:
        items:
          minimum: 0
          type: integer
        minItems: 1
        type: array
      minItems: 1
      type: array
    CalculatedCodeCheckHistogram:
      additionalProperties: false
      description: Calculated histogram over code checks (CI).
      example:
        for:
          repositories:
          - github.com/athenianco/athenian-webapp
          - github.com/athenianco/athenian-api
        metric: chk-suites-per-pr
        scale: linear
        ticks:
        - 0
        - 1
        - 2
        - 3
        - 5
        - 8
        - 12
        frequencies:
        - 0
        - 38
        - 28
        - 13
        - 120
        - 100
        interquartile:
          left: 2
          right: 8
      properties:
        for:
          $ref: '#/components/schemas/ForSetCodeChecks'
        metric:
          $ref: '#/components/schemas/CodeCheckMetricID'
        scale:
          $ref: '#/components/schemas/HistogramScale'
        ticks:
          description: Series of horizontal bar borders aka X axis. Their count is `len(y) + 1` because there are `N` intervals between `(N + 1)` ticks.
          items:
            oneOf:
            - type: number
            - $ref: '#/components/schemas/TimeDuration'
          type: array
        frequencies:
          description: Series of histogram bar heights aka Y axis.
          items:
            minimum: 0
            type: integer
          type: array
        interquartile:
          $ref: '#/components/schemas/Interquartile'
      required:
      - for
      - frequencies
      - interquartile
      - metric
      - scale
      - ticks
      type: object
    CodeCheckMetricID:
      description: 'The mentioned terms such as "check suite" and "check run" belong to [the official documentation on GitHub](https://docs.github.com/en/rest/guides/getting-started-with-the-checks-api#about-check-runs).

        * `chk-suites-count` - number of executed check suites.

        * `chk-suites-in-prs-count` - number of executed check suites in pull requests.

        * `chk-successful-suites-count` - number of successfully executed check suites.

        * `chk-failed-suites-count` - number of failed check suites.

        * `chk-cancelled-suites-count` - number of cancelled check suites.

        * `chk-success-ratio` - `chk-successful-suites-count` divided by `chk-suites-count`.

        * `chk-suite-time` - average check suite execution time.

        * `chk-robust-suite-time` - average check suite execution time, alternative algorithm. We consider each suite size group separately, fill missing daily values by averaging the neighbors, and then take the average of group averages.

        * `chk-suites-per-pr` - average number of times check suites executed in a pull request.

        * `chk-suite-time-per-pr` - average check suite execution time by pull request. The difference with `chk-suite-time` is that we don''t consider checks triggered by direct pushes, e.g. by merge commits.

        * `chk-prs-with-checks-count` - number of PRs that triggered at least one check suite.

        * `chk-flaky-commit-checks-count` - number of check suites triggered by the same commit but having different outcomes - both successful and failed.

        * `chk-prs-merged-with-failed-checks-count` - how many PRs were merged despite failing checks.

        * `chk-prs-merged-with-failed-checks-ratio` - ratio of PRs merged with failing checks to all merged PRs with checks.

        * `chk-concurrency-max` - maximum number of check runs of the same type executing in parallel. We consider check runs executing in parallel if their time intervals overlap ≥ 50%.

        * `chk-concurrency` - average number of check runs of the same type executing in parallel; we choose the check run type that corresponds to the maximum concurrency for each day. We consider check runs executing in parallel if their time intervals overlap ≥ 50%.

        * `chk-elapsed-time-per-concurrency` - cumulative time spent on each concurrency level across check runs. Only allowed for histograms.

        * `chk-suite-occupancy` - average ratio between summed time of check runs in a check suite and the product of the number of check runs with the maximum check run time in that check suite. 1 means ideal resource utilization, down to 0 for absolute inefficiency. For example, there are one slow check run that executes in 10x seconds, and N fast check runs that execute in x seconds, in the same check suite. The metric value will be (10x + Nx) / (10*(N+1)*x) → 0.1 if N → +∞.

        * `chk-suite-critical-occupancy` - `chk-suite-occupancy` calculated for critical check runs only. A critical check run is a check run of type that at least once dominated the check suite execution time on the time interval. This is the measure of check suite "trebble" when there are several slowest check runs that elapse time with some standard deviation.

        * `chk-suite-imbalance` - average difference between the time of the slowest and the second slowest check runs in a check suite. High values signal unbalanced jobs and CI/CD inefficiency.'
      enum:
      - chk-suites-count
      - chk-suites-in-prs-count
      - chk-successful-suites-count
      - chk-failed-suites-count
      - chk-cancelled-suites-count
      - chk-success-ratio
      - chk-suite-time
      - chk-robust-suite-time
      - chk-suites-per-pr
      - chk-suite-time-per-pr
      - chk-prs-with-checks-count
      - chk-flaky-commit-checks-count
      - chk-prs-merged-with-failed-checks-count
      - chk-prs-merged-with-failed-checks-ratio
      - chk-concurrency-max
      - chk-concurrency
      - chk-elapsed-time-per-concurrency
      - chk-suite-occupancy
      - chk-suite-critical-occupancy
      - chk-suite-imbalance
      example: chk-suites-count
      type: string
    DeveloperSet:
      description: A set of developers. An empty list disables the filter and includes everybody. Duplicates are automatically ignored.
      example:
      - github.com/vmarkovtsev
      - github.com/dpordomingo
      items:
        $ref: '#/components/schemas/DeveloperID'
      type: array
    CodeCheckHistogramDefinition:
      additionalProperties: false
      description: 'Histogram parameters: topic, bins.'
      example:
        metric: chk-suite-time
        ticks:
        - 60s
        - 120s
        - 180s
        - 360s
        - 720s
        - 1440s
      properties:
        metric:
          $ref: '#/components/schemas/CodeCheckMetricID'
        scale:
          allOf:
          - $ref: '#/components/schemas/HistogramScale'
          - description: Histogram's X axis scale.
        bins:
          description: Number of bars in the histogram. 0 or null means automatic.
          minimum: 0
          type: integer
        ticks:
          description: 'Alternatively to `bins` and `scale`, set the X axis bar borders manually.

            Only one of two may be specified. The ticks are automatically prepended

            the distribution minimum and appended the distribution maximum.'
          items:
            oneOf:
            - type: number
            - $ref: '#/components/schemas/TimeDuration'
          minItems: 1
          type: array
      required:
      - metric
      type: object
    RepositorySet:
      description: Set of repositories. An empty list raises a bad response 400. Duplicates are automatically ignored.
      example:
      - github.com/athenianco/athenian-webapp
      - github.com/athenianco/athenian-api
      items:
        $ref: '#/components/schemas/RepositoryID'
      type: array
    PullRequestMetricID:
      description: 'Currently supported PR metric types.

        * `pr-wip-time`: average time spent in Work In Progress stage.

        * `pr-wip-time-below-threshold-ratio`: ratio of PRs with a `pr-wip-time` below the threshold, disregarding the quantiles. The default threshold is 1 day.

        * `pr-wip-count`: number of PRs used to calculate `pr-wip-time` disregarding the quantiles.

        * `pr-wip-count-q`: number of PRs used to calculate `pr-wip-time` after applying the quantiles.

        * `pr-review-time`: average time spent in Review stage.

        * `pr-review-count`: number of PRs used to calculate `pr-review-time` disregarding the quantiles.

        * `pr-review-count-q`: number of PRs used to calculate `pr-review-time` after applying the quantiles.

        * `pr-review-time-below-threshold-ratio`: ratio of PRs with a `pr-review-time` below the threshold, disregarding the quantiles. The default threshold is 2 days.

        * `pr-merging-time`: average time spent in Merge stage.

        * `pr-merging-time-below-threshold-ratio`: ratio of PRs with a `pr-merging-time` below the threshold, disregarding the quantiles. The default threshold is 4 hours.

        * `pr-merging-count`: number of PRs used to calculate `pr-merging-time` disregarding the

# --- truncated at 32 KB (61 KB total) ---
# Full source: https://raw.githubusercontent.com/api-evangelist/athenian/refs/heads/main/openapi/athenian-histograms-api-openapi.yml