# Generated by `pnpm generate-openapi` from the Zod contract (app/api/v2/openapi/contract/). Do not edit by hand.
openapi: 3.1.0
info:
  title: Artificial Analysis API
  version: "2.0"
  description: |
    Use the Artificial Analysis dataset inside your own products, research, analysis, and monitoring systems. The API provides structured model metadata, benchmark results, pricing, and performance data across language, image, video, music, and speech.

    ## License and usage

    Use of the API requires attribution across all tiers. When you display or share API data, credit [Artificial Analysis](https://artificialanalysis.ai/) as the source. A visible byline or footer link is sufficient.

    Use of the API is also subject to our [Terms of Use](https://artificialanalysis.ai/docs/legal/Terms-of-Use.pdf). For redistribution rights or bespoke contract terms, [contact the team](https://artificialanalysis.ai/data-api#contact).

    ## Authentication

    All endpoints require an API key in the `x-api-key` header.

    ```
    curl -H "x-api-key: YOUR_API_KEY" https://artificialanalysis.ai/api/v2/language/models
    ```

    Create or copy a key from [API key management](https://artificialanalysis.ai/api-key-management-redirect). For Commercial access, [contact the team](https://artificialanalysis.ai/data-api#contact).

    ## Tiers

    | Tier | Access | Notes |
    | --- | --- | --- |
    | **Free** | The `/free` model-list endpoints — `/api/v2/language/models/free` and the 11 `/api/v2/media/.../models/free` siblings — return a Free-shape response with the public subset of fields | Standard non-`/free` routes are Pro+ and return `403` for Free API keys. Use the `/free` sibling instead |
    | **Pro** | Model-level access to the standard V2 endpoint set documented here, including LLM detail, pricing, richer performance data, and the Pro-shape model-list responses | This is the main paid tier for the new V2 API. Provider-level endpoints and performance over time are Commercial-only and return `403` for Pro API keys |
    | **Commercial** | Everything in Pro, plus provider-level language model data, performance over time (7, 30, and 90 day windows), and expanded data access negotiated on a per-organization basis. Examples include raw provider measurements, hardware data, or other ad-hoc additions | Commercial access is provisioned separately. [Contact the team](https://artificialanalysis.ai/data-api#contact) to discuss scope |

    ## Rate limits

    | Tier | Requests per day |
    | --- | --- |
    | Free | 100 |
    | Pro | 500 |
    | Commercial | Custom. [Contact the team](https://artificialanalysis.ai/data-api#contact) |

    ## Response headers

    Every authenticated response carries:

    - `X-AA-Tier` — the subscription tier that served the request (`free`, `pro`, or `commercial`). Mirrors the `tier` field in the response body.
    - `X-RateLimit-Limit`, `X-RateLimit-Remaining`, `X-RateLimit-Reset` — current rate-limit state.
    - `Retry-After` — included on `429` responses; seconds until the quota resets.

    ## Data conventions

    - Dates use **ISO 8601** format (for example, `2025-06-15` or `2025-06-15T14:30:00.000Z`)
    - Country codes use lowercased **ISO 3166-1 alpha-2** values (for example, `us`, `cn`, `gb`)
    - End-to-end response times assume **500 answer tokens** unless a field name states otherwise
    - Nulls mean "not measured" or "not applicable"; they never mean zero

    ## Intelligence Index versioning

    `artificial_analysis_intelligence_index` is a composite score, and what goes into it evolves. We version the index so you can interpret a score in context.

    Responses report which version produced their scores in the `intelligence_index_version` field — treat that field, not this document, as the source of truth for the current version. Full composition and version history on the [Intelligence Index methodology page](https://artificialanalysis.ai/methodology/intelligence-benchmarking).

    **How versions change:**

    - **Major version bumps** indicate a substantial change to the index definition or interpretation. Scores are best interpreted within the same major version.
    - **Minor version bumps** indicate methodology changes within the same major version. These may include changes to contributing evaluations, task subsets, graders, scoring/normalization, weightings, anchors, or evaluation refreshes. Scores may or may not change.

    **Included in v4.1** (9 evaluations): GDPval-AA v2, τ³-Banking, Terminal-Bench v2.1, SciCode, AA-LCR, AA-Omniscience, HLE, GPQA Diamond, CritPt. Older versions are documented on the methodology page.

    `artificial_analysis_coding_index` and `artificial_analysis_agentic_index` are derived from subsets of these evaluations and are not separately versioned.
servers:
  - url: https://artificialanalysis.ai
    description: Production
security:
  - ApiKeyAuth: []
tags:
  - name: Language Models
    description: Evaluations, pricing, performance, and metadata for language models
  - name: Language Model Providers
    description: |-
      Capabilities, pricing, and performance for language model API providers.

      **Commercial only** — these endpoints require a Commercial API key.
      [Contact us](https://artificialanalysis.ai/data-api#contact) to discuss Commercial access.
  - name: Media - Image Arena
    description: Image generation arena rankings for text-to-image and image-editing models
  - name: Media - Video Arena
    description: Video generation arena rankings for text-to-video, image-to-video, and audio-enabled video models
  - name: Media - Speech
    description: Speech arena rankings, speech-to-speech data, and speech-to-text model data
  - name: Media - Music
    description: Music generation arena rankings for instrumental and vocal models
  - name: Language Model Measurements
    description: |
      Raw measurement-level data for LLM performance benchmarking.

      **Commercial only** — this endpoint requires a Commercial API key with explicit provider-level grants.
      [Contact us](https://artificialanalysis.ai/data-api#contact) to discuss Commercial access.
  - name: CritPt Evaluation
    description: |
      Submit code solutions for grading against the CritPt benchmark.

      Unlike the other endpoints in this API, this is **not** a data retrieval endpoint. It is a
      code evaluation service. You submit generated code for specific CritPt problems and receive
      grading results from the CritPt evaluation server.

      Rate limited to **10 requests per day** per user. Rate limit headers (`X-RateLimit-Limit`,
      `X-RateLimit-Remaining`, `X-RateLimit-Reset`, `Retry-After`) are included in every response.
paths:
  /api/v2/language/models/free:
    get:
      operationId: getLanguageModelsFree
      summary: Get language models (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/language/models`. Returns the Free-shape language model
        response: the public subset of fields. Includes headline indices, median performance,
        and input/output pricing. Excludes Pro-only fields such as the full evaluation set,
        token counts, blended pricing, performance percentiles, context window, parameters,
        modalities, licensing, and provider detail.

        Accepts any valid API key (Free, Pro, or Commercial). Pro and Commercial keys also
        receive the Free-shape body when calling this URL; the `tier` field reflects the
        caller's actual tier.
      tags:
        - Language Models
      parameters:
        - $ref: "#/components/parameters/page"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LLMModelsFreeResponse"
              examples:
                free_tier:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    intelligence_index_version: 4.1
                    pagination:
                      page: 1
                      page_size: 200
                      total_pages: 2
                      has_more: true
                    data:
                      - id: 36f73aaf-d38a-4b56-a2b3-d04d17186910
                        name: gpt-oss-20B (high)
                        slug: gpt-oss-20b
                        release_date: 2025-08-05
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                        evaluations:
                          artificial_analysis_intelligence_index: 24.5
                          artificial_analysis_coding_index: 18.5
                          artificial_analysis_agentic_index: 27.6
                        artificial_analysis_intelligence_index_cost:
                          total_cost: 20.69
                          cost_per_task:
                            total_cost: 0.1678
                        pricing:
                          price_1m_input_tokens: 0.06
                          price_1m_output_tokens: 0.2
                          price_1m_cache_hit_tokens: 0.015
                          price_1m_cache_write_tokens: 0.075
                        performance:
                          median_output_tokens_per_second: 296.47
                          median_time_to_first_token_seconds: 0.65
                          median_time_to_first_answer_token_seconds: 7.4
                          median_end_to_end_response_time_seconds: 9.09
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/language/models:
    get:
      operationId: getLanguageModels
      summary: Get all language models
      description: |-
        Returns language model data including evaluations, pricing, and performance metrics.
        Detail-only fields (evaluation token counts, omniscience/openness breakdowns, providers)
        are available on `/api/v2/language/models/{slug}`.

        **Pro+ only.** Free integrations should use [`/api/v2/language/models/free`](#getLanguageModelsFree) instead.
      tags:
        - Language Models
      parameters:
        - $ref: "#/components/parameters/prompt_type"
        - $ref: "#/components/parameters/page"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/models" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/models",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/models",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LLMModelsResponse"
              examples:
                pro_tier:
                  summary: Pro tier example response
                  value:
                    tier: pro
                    intelligence_index_version: 4.1
                    pagination:
                      page: 1
                      page_size: 200
                      total_pages: 2
                      has_more: true
                    data:
                      - id: 36f73aaf-d38a-4b56-a2b3-d04d17186910
                        name: gpt-oss-20B (high)
                        slug: gpt-oss-20b
                        release_date: 2025-08-05
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                          country: us
                        reasoning_model: true
                        evaluations:
                          artificial_analysis_intelligence_index: 24.5
                          artificial_analysis_coding_index: 18.5
                          artificial_analysis_agentic_index: 27.6
                          tau2_telecom: 0.6
                          tau_banking: 0.61
                          terminalbench_hard: 0.11
                          terminalbench_v2_1: 0.22
                          scicode: 0.34
                          aa_lcr: 0.31
                          aa_omniscience_index: -63.92
                          aa_omniscience_accuracy: 0.16
                          aa_omniscience_non_hallucination_rate: 0.06
                          ifbench: 0.65
                          hle: 0.1
                          gpqa_diamond: 0.69
                          critpt: 0.01
                          gdpval_aa_elo: 681
                          gdpval_aa_normalized: 0.09
                          mmmu_pro: null
                          artificial_analysis_openness_index: 38.9
                          artificial_analysis_multilingual_index: 0.8
                        artificial_analysis_intelligence_index_cost:
                          total_cost: 20.69
                          cost_per_task:
                            total_cost: 0.1678
                            input_cost: 0.0683
                            reasoning_cost: 0.0946
                            answer_cost: 0.0049
                          input_cost: 8.42
                          reasoning_cost: 11.66
                          answer_cost: 0.6
                        artificial_analysis_intelligence_index_token_counts:
                          input_tokens: 140318252
                          answer_tokens: 3023621
                          output_tokens: 61344686
                          reasoning_tokens: 58321064
                        pricing:
                          price_1m_blended_3_to_1: 0.09
                          price_1m_blended_7_to_2_to_1: 0.04
                          price_1m_input_tokens: 0.06
                          price_1m_output_tokens: 0.2
                          price_1m_cache_hit_tokens: 0.015
                          price_1m_cache_write_tokens: 0.075
                        performance:
                          percentile_05_output_tokens_per_second: 74.74
                          quartile_25_output_tokens_per_second: 164.57
                          median_output_tokens_per_second: 296.47
                          quartile_75_output_tokens_per_second: 405.84
                          percentile_95_output_tokens_per_second: 858.3
                          percentile_05_time_to_first_token_seconds: 0.28
                          quartile_25_time_to_first_token_seconds: 0.4
                          median_time_to_first_token_seconds: 0.65
                          quartile_75_time_to_first_token_seconds: 0.97
                          percentile_95_time_to_first_token_seconds: 16.22
                          median_time_to_first_answer_token_seconds: 7.4
                          median_end_to_end_response_time_seconds: 9.09
                        context_window_tokens: 131072
                        parameters:
                          total: 21
                          active: 4
                        modalities:
                          input:
                            text: true
                            image: false
                            video: false
                            speech: false
                          output:
                            text: true
                            image: false
                            video: false
                            speech: false
                        licensing:
                          is_open_weights: true
                        huggingface_url: https://huggingface.co/openai/gpt-oss-20b
                        openrouter_api_id: openai/gpt-oss-20b
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/language/models/{slug}:
    get:
      operationId: getLanguageModelBySlug
      summary: Get a single language model by slug
      description: |-
        Returns data for a single language model identified by its slug.
        Includes all pro tier list fields plus detail-only fields:
        evaluation token counts and omniscience/openness breakdowns.

        Pro and Commercial only. Free tier requests return a `403` subscription error.

        The per-provider breakdown (`providers` array) is **Commercial only** and omitted from
        Pro responses. [Contact us](https://artificialanalysis.ai/data-api#contact) to discuss Commercial access.
      tags:
        - Language Models
      parameters:
        - name: slug
          in: path
          required: true
          description: The model slug (e.g. "gemini-3-pro", "claude-opus-4-6", "deepseek-v3").
          schema:
            type: string
        - $ref: "#/components/parameters/prompt_type"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/models/claude-sonnet-4?prompt_type=medium" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/models/claude-sonnet-4",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"prompt_type": "medium"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/models/claude-sonnet-4?prompt_type=medium",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LLMModelItemResponse"
              examples:
                commercial_tier:
                  summary: Commercial tier detail example response (Pro responses omit the `providers` array)
                  value:
                    tier: commercial
                    intelligence_index_version: 4.1
                    data:
                      id: 36f73aaf-d38a-4b56-a2b3-d04d17186910
                      name: gpt-oss-20B (high)
                      slug: gpt-oss-20b
                      release_date: 2025-08-05
                      model_creator:
                        id: e67e56e3-15cd-43db-b679-da4660a69f41
                        name: OpenAI
                        country: us
                      reasoning_model: true
                      evaluations:
                        artificial_analysis_intelligence_index: 24.5
                        artificial_analysis_coding_index: 18.5
                        artificial_analysis_agentic_index: 27.6
                        tau2_telecom: 0.6
                        tau_banking: 0.61
                        terminalbench_hard: 0.11
                        terminalbench_v2_1: 0.22
                        scicode: 0.34
                        aa_lcr: 0.31
                        aa_omniscience_index: -63.92
                        aa_omniscience_accuracy: 0.16
                        aa_omniscience_non_hallucination_rate: 0.06
                        ifbench: 0.65
                        hle: 0.1
                        gpqa_diamond: 0.69
                        critpt: 0.01
                        gdpval_aa_elo: 681
                        gdpval_aa_normalized: 0.09
                        mmmu_pro: null
                        artificial_analysis_openness_index: 38.9
                        artificial_analysis_multilingual_index: 0.8
                      artificial_analysis_intelligence_index_cost:
                        total_cost: 20.69
                        cost_per_task:
                          total_cost: 0.1678
                          input_cost: 0.0683
                          reasoning_cost: 0.0946
                          answer_cost: 0.0049
                        input_cost: 8.42
                        reasoning_cost: 11.66
                        answer_cost: 0.6
                      artificial_analysis_intelligence_index_token_counts:
                        input_tokens: 140318252
                        answer_tokens: 3023621
                        output_tokens: 61344686
                        reasoning_tokens: 58321064
                      pricing:
                        price_1m_blended_3_to_1: 0.09
                        price_1m_blended_7_to_2_to_1: 0.04
                        price_1m_input_tokens: 0.06
                        price_1m_output_tokens: 0.2
                        price_1m_cache_hit_tokens: 0.015
                        price_1m_cache_write_tokens: 0.075
                      performance:
                        percentile_05_output_tokens_per_second: 74.74
                        quartile_25_output_tokens_per_second: 164.57
                        median_output_tokens_per_second: 296.47
                        quartile_75_output_tokens_per_second: 405.84
                        percentile_95_output_tokens_per_second: 858.3
                        percentile_05_time_to_first_token_seconds: 0.28
                        quartile_25_time_to_first_token_seconds: 0.4
                        median_time_to_first_token_seconds: 0.65
                        quartile_75_time_to_first_token_seconds: 0.97
                        percentile_95_time_to_first_token_seconds: 16.22
                        median_time_to_first_answer_token_seconds: 7.4
                        median_end_to_end_response_time_seconds: 9.09
                      context_window_tokens: 131072
                      parameters:
                        total: 21
                        active: 4
                      modalities:
                        input:
                          text: true
                          image: false
                          video: false
                          speech: false
                        output:
                          text: true
                          image: false
                          video: false
                          speech: false
                      licensing:
                        is_open_weights: true
                      huggingface_url: https://huggingface.co/openai/gpt-oss-20b
                      openrouter_api_id: openai/gpt-oss-20b
                      evaluation_token_counts:
                        hle:
                          input_tokens: 12345678
                          answer_tokens: 234567
                          output_tokens: 5432109
                          reasoning_tokens: 5197542
                        aa_lcr:
                          input_tokens: 8765432
                          answer_tokens: 152340
                          output_tokens: 4567890
                          reasoning_tokens: 4415550
                        gpqa_diamond:
                          input_tokens: 6543210
                          answer_tokens: 198765
                          output_tokens: 3210987
                          reasoning_tokens: 3012222
                        tau2_telecom:
                          input_tokens: 18765432
                          answer_tokens: 432109
                          output_tokens: 9876543
                          reasoning_tokens: 9444434
                        tau_banking:
                          input_tokens: 16765432
                          answer_tokens: 412109
                          output_tokens: 8876543
                          reasoning_tokens: 8464434
                        critpt:
                          input_tokens: 5432109
                          answer_tokens: 123456
                          output_tokens: 2345678
                          reasoning_tokens: 2222222
                        gdpval_aa:
                          input_tokens: 22345678
                          answer_tokens: 567890
                          output_tokens: 11234567
                          reasoning_tokens: 10666677
                        ifbench:
                          input_tokens: 7654321
                          answer_tokens: 187654
                          output_tokens: 3987654
                          reasoning_tokens: 3800000
                        scicode:
                          input_tokens: 14567890
                          answer_tokens: 345678
                          output_tokens: 6789012
                          reasoning_tokens: 6443334
                        mmmu_pro:
                          input_tokens: 9876543
                          answer_tokens: 234567
                          output_tokens: 4321098
                          reasoning_tokens: 4086531
                        aa_omniscience:
                          input_tokens: 15432109
                          answer_tokens: 198765
                          output_tokens: 5678901
                          reasoning_tokens: 5480136
                        terminalbench_hard:
                          input_tokens: 18589850
                          answer_tokens: 347830
                          output_tokens: 3900246
                          reasoning_tokens: 3552416
                        terminalbench_v2_1:
                          input_tokens: 19589850
                          answer_tokens: 367830
                          output_tokens: 4100246
                          reasoning_tokens: 3732416
                      aa_omniscience_breakdown:
                        total:
                          accuracy: 0.155
                          omniscience: -63.917
                          hallucination_rate: 0.941
                        law:
                          accuracy: 0.082
                          omniscience: -74.9
                          hallucination_rate: 0.905
                        health:
                          accuracy: 0.15
                          omniscience: -65.4
                          hallucination_rate: 0.946
                        business:
                          accuracy: 0.125
                          omniscience: -67.9
                          hallucination_rate: 0.919
                        humanities_and_social_sciences:
                          accuracy: 0.136
                          omniscience: -68.2
                          hallucination_rate: 0.947
                        science_engineering_and_mathematics:
                          accuracy: 0.256
                          omniscience: -44.9
                          hallucination_rate: 0.948
                        software_engineering:
                          accuracy: 0.183
                          omniscience: -62.2
                          hallucination_rate: 0.985
                      artificial_analysis_openness_index_breakdown:
                        weights_access: 3
                        weights_license: 3
                        data_pretrain_access: 0
                        data_pretrain_license: 0
                        data_posttrain_access: 0
                        data_posttrain_license: 0
                        methodology_license: 0
                        methodology_disclosure: 1
                        artificial_analysis_openness_index: 38.889
                      providers:
                        - id: b08f179e-4a69-4f35-b350-8f7144a8b7c8
                          name: Novita
                          slug: novita
                          pricing:
                            price_1m_blended_3_to_1: 0.07
                            price_1m_blended_7_to_2_to_1: 0.03
                            price_1m_input_tokens: 0.04
                            price_1m_output_tokens: 0.15
                            price_1m_cache_hit_tokens: 0.01
                            price_1m_cache_write_tokens: 0.05
                          performance:
                            percentile_05_output_tokens_per_second: 61.93
                            quartile_25_output_tokens_per_second: 80.21
                            median_output_tokens_per_second: 105.43
                            quartile_75_output_tokens_per_second: 136.95
                            percentile_95_output_tokens_per_second: 188.2
                            percentile_05_time_to_first_token_seconds: 0.6
                            quartile_25_time_to_first_token_seconds: 0.61
                            median_time_to_first_token_seconds: 0.64
                            quartile_75_time_to_first_token_seconds: 0.74
                            percentile_95_time_to_first_token_seconds: 1.51
                            median_time_to_first_answer_token_seconds: 6.18
                            median_end_to_end_response_time_seconds: 10.92
                          context_window_tokens: 131072
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "404":
          $ref: "#/components/responses/NotFound"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/language/models/{slug}/performance:
    get:
      operationId: getLanguageModelPerformanceOverTime
      summary: Get performance over time for a single model
      description: |-
        Returns a time series of performance metrics for the specified model, broken down by API provider.
        Each provider that offers this model will have its own series of data points within the requested window.

        The four metrics tracked per data point are:
        - **Output speed** — median tokens generated per second (`median_output_tokens_per_second`)
        - **Time to first token** — median latency before the first token is returned (`median_time_to_first_token_seconds`)
        - **Time to first answer token** — median time until the first answer token is available (`median_time_to_first_answer_token_seconds`)
        - **End-to-end response time** — median end-to-end response time in seconds (`median_end_to_end_response_time_seconds`)

        Use `window` to control how far back the data goes and `interval` to control the granularity
        (e.g. `window=90d&interval=weekly` returns ~13 weekly data points per provider).

        **Commercial only.** Free and Pro tier requests return a `403` subscription error.
        [Contact us](https://artificialanalysis.ai/data-api#contact) to discuss Commercial access.
      tags:
        - Language Models
      parameters:
        - name: slug
          in: path
          required: true
          description: The unique identifier for the model (e.g. `claude-sonnet-4`). Use the `/models` endpoint to discover available slugs.
          schema:
            type: string
        - name: window
          in: query
          description: Lookback period from today. Maximum 90 days for single-model endpoint.
          schema:
            type: string
            enum:
              - 7d
              - 30d
              - 90d
            default: 90d
        - $ref: "#/components/parameters/interval"
        - $ref: "#/components/parameters/prompt_type"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/models/claude-sonnet-4/performance?window=90d&interval=weekly" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/models/claude-sonnet-4/performance",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"window": "90d", "interval": "weekly"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/models/claude-sonnet-4/performance?window=90d&interval=weekly",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ModelPerformanceOverTimeResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/CommercialAccessRequired"
        "404":
          $ref: "#/components/responses/NotFound"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/language/providers:
    get:
      operationId: getLanguageProviders
      summary: Get all language model API providers
      description: |-
        Returns data for all API providers including the models they offer,
        pricing, and median performance metrics.

        **Commercial only.** Free and Pro tier requests return a `403` subscription error.
        [Contact us](https://artificialanalysis.ai/data-api#contact) to discuss Commercial access.
      tags:
        - Language Model Providers
      parameters:
        - $ref: "#/components/parameters/page"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/providers" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/providers",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/providers",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LLMProvidersResponse"
              examples:
                commercial_tier:
                  summary: Commercial tier example response
                  value:
                    tier: commercial
                    pagination:
                      page: 1
                      page_size: 200
                      total_pages: 1
                      has_more: false
                    data:
                      - id: e0bfeec9-405f-4e75-b120-a52bdd70c812
                        name: Together.ai
                        slug: togetherai
                        country: us
                        models:
                          - id: 43fc5506-c5ed-4dee-9b85-962bf7ae3986
                            name: DeepSeek V3 (Dec '24)
                            slug: deepseek-v3
                            pricing:
                              price_1m_blended_3_to_1: 1.25
                              price_1m_blended_7_to_2_to_1: 0.47
                              price_1m_input_tokens: 1.25
                              price_1m_output_tokens: 1.25
                              price_1m_cache_hit_tokens: 0.13
                              price_1m_cache_write_tokens: 1.56
                            performance:
                              median_output_tokens_per_second: 66.14
                              median_time_to_first_token_seconds: 0.55
                              median_time_to_first_answer_token_seconds: 0.55
                              median_end_to_end_response_time_seconds: 8.11
                            context_window_tokens: 128000
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/CommercialAccessRequired"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/language/providers/{slug}:
    get:
      operationId: getLanguageProviderBySlug
      summary: Get a single language model provider by slug
      description: |-
        Returns data for a single API provider identified by its slug.
        Includes all fields from the providers list plus full performance
        percentile and quartile data for each model.

        **Commercial only.** Free and Pro tier requests return a `403` subscription error.
        [Contact us](https://artificialanalysis.ai/data-api#contact) to discuss Commercial access.
      tags:
        - Language Model Providers
      parameters:
        - name: slug
          in: path
          required: true
          description: The provider slug (e.g. "openai", "fireworks").
          schema:
            type: string
        - $ref: "#/components/parameters/prompt_type"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/providers/fireworks?prompt_type=medium" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/providers/fireworks",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"prompt_type": "medium"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/providers/fireworks?prompt_type=medium",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/LLMProviderItemResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/CommercialAccessRequired"
        "404":
          $ref: "#/components/responses/NotFound"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/language/providers/{slug}/performance:
    get:
      operationId: getLanguageProviderPerformanceOverTime
      summary: Get performance over time for a single provider
      description: |-
        Returns performance time series for each model offered by the specified provider,
        looking back from today by the specified window.

        This is the inverse of the model performance endpoint — here you pick a provider and see
        how each of their models has performed over time.

        **Commercial only.** Free and Pro tier requests return a `403` subscription error.
        [Contact us](https://artificialanalysis.ai/data-api#contact) to discuss Commercial access.
      tags:
        - Language Model Providers
      parameters:
        - name: slug
          in: path
          required: true
          description: The unique identifier for the provider (e.g. `anthropic`). Use the `/providers` endpoint to discover available slugs.
          schema:
            type: string
        - $ref: "#/components/parameters/window"
        - $ref: "#/components/parameters/interval"
        - $ref: "#/components/parameters/prompt_type"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/providers/anthropic/performance?window=90d&interval=weekly" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/providers/anthropic/performance",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"window": "90d", "interval": "weekly"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/providers/anthropic/performance?window=90d&interval=weekly",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ProviderPerformanceOverTimeResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/CommercialAccessRequired"
        "404":
          $ref: "#/components/responses/NotFound"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/language/providers/{slug}/measurements:
    get:
      operationId: getLanguageProviderMeasurements
      summary: Get raw measurements for a provider
      description: |-
        Returns individual measurement records for the specified provider, including per-request
        output speed, time to first token, time to first answer token, estimated end-to-end response time,
        and success status. Results are grouped by model within the provider.

        **Commercial tier only.** Your API key must have explicit grants for the requested provider.
        If you are interested in accessing this endpoint, please [contact us](https://artificialanalysis.ai/data-api#contact)
        to discuss Commercial access.
      tags:
        - Language Model Measurements
      parameters:
        - name: slug
          in: path
          required: true
          description: The unique identifier for the provider (e.g. `anthropic`). Your Commercial API key must have grants for this provider.
          schema:
            type: string
        - $ref: "#/components/parameters/prompt_type"
        - name: start_date
          in: query
          description: |-
            Only return measurements recorded on or after this date (YYYY-MM-DD).
            Defaults to one month ago if omitted; dates earlier than one month ago are clamped to one month ago.
          schema:
            type: string
            format: date
            example: 2025-01-01
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/language/providers/anthropic/measurements?prompt_type=medium" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/language/providers/anthropic/measurements",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"prompt_type": "medium"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/language/providers/anthropic/measurements?prompt_type=medium",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MeasurementsResponse"
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/CommercialAccessRequired"
        "404":
          $ref: "#/components/responses/NotFound"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-image/models/free:
    get:
      operationId: getTextToImageArenaFree
      summary: Get text-to-image arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/text-to-image/models`. Returns the Free-shape
        arena response — model identity plus Elo and CI only. Accepts any valid API key
        (Free, Pro, or Commercial); Pro and Commercial keys also receive the Free-shape
        body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Image Arena
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-image/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-image/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-image/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ImageArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: a1ee4d6f-d136-434b-bb1d-066fe5f9bf6f
                        name: GPT Image 1.5 (high)
                        slug: openai-gpt_image-1-5
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                        elo: 1266
                        ci_95: 11
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-image/models:
    get:
      operationId: getTextToImageArena
      summary: Get text-to-image arena rankings
      description: |-
        Returns arena Elo rankings for text-to-image models. Free tier returns model identity plus Elo and CI only; Pro adds rank, samples, pricing, release date, open_weights_url, and optional category breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/text-to-image/models/free`](#getTextToImageArenaFree) instead.
      tags:
        - Media - Image Arena
      parameters:
        - $ref: "#/components/parameters/include_categories"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-image/models?include_categories=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-image/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_categories": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-image/models?include_categories=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ImageArenaResponse"
              examples:
                pro:
                  summary: Pro response with categories
                  value:
                    tier: pro
                    data:
                      - id: a1ee4d6f-d136-434b-bb1d-066fe5f9bf6f
                        name: GPT Image 1.5 (high)
                        slug: openai-gpt_image-1-5
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                        elo: 1266
                        ci_95: 11
                        rank: 1
                        samples: 4650
                        release_date: 2025-12-16
                        price_per_1k_images: 133
                        open_weights_url: null
                        categories:
                          - label: General & Photorealistic
                            elo: 1273
                            ci_95: 18
                            samples: 1719
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/image-editing/models/free:
    get:
      operationId: getImageEditingArenaFree
      summary: Get image-editing arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/image-editing/models`. Returns the Free-shape
        arena response — model identity plus Elo and CI only. Accepts any valid API key
        (Free, Pro, or Commercial); Pro and Commercial keys also receive the Free-shape
        body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Image Arena
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/image-editing/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/image-editing/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/image-editing/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ImageArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: ae424391-721f-4df7-bf24-a8bef3c4c46c
                        name: Riverflow 2.0
                        slug: sourceful_riverflow-2
                        model_creator:
                          id: 71724fa8-622e-455f-aaa2-ef3c5a067f8b
                          name: Sourceful
                        elo: 1283
                        ci_95: 9
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/image-editing/models:
    get:
      operationId: getImageEditingArena
      summary: Get image-editing arena rankings
      description: |-
        Returns arena Elo rankings for image-editing models. Free tier returns model identity plus Elo and CI only; Pro adds rank, samples, pricing, release date, open_weights_url, and optional category breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/image-editing/models/free`](#getImageEditingArenaFree) instead.
      tags:
        - Media - Image Arena
      parameters:
        - $ref: "#/components/parameters/include_categories"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/image-editing/models?include_categories=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/image-editing/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_categories": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/image-editing/models?include_categories=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ImageArenaResponse"
              examples:
                pro:
                  summary: Pro response with categories
                  value:
                    tier: pro
                    data:
                      - id: ae424391-721f-4df7-bf24-a8bef3c4c46c
                        name: Riverflow 2.0
                        slug: sourceful_riverflow-2
                        model_creator:
                          id: 71724fa8-622e-455f-aaa2-ef3c5a067f8b
                          name: Sourceful
                        elo: 1283
                        ci_95: 9
                        rank: 1
                        samples: 4650
                        release_date: 2025-12-16
                        price_per_1k_images: 133
                        open_weights_url: null
                        categories:
                          - label: General & Photorealistic
                            elo: 1273
                            ci_95: 18
                            samples: 1719
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-video/models/free:
    get:
      operationId: getTextToVideoArenaFree
      summary: Get text-to-video arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/text-to-video/models`. Returns the Free-shape
        arena response — model identity plus Elo and CI only. Accepts any valid API key
        (Free, Pro, or Commercial); Pro and Commercial keys also receive the Free-shape
        body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Video Arena
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-video/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-video/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-video/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 36db1f4d-a9f6-49d1-a74d-06bddbf2fe4f
                        name: Dreamina Seedance 2.0 720p
                        slug: seedance-2-0
                        model_creator:
                          id: 2354746c-4775-4a06-b64d-0ba4137785b8
                          name: ByteDance Seed
                        elo: 1269
                        ci_95: 8
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-video/models:
    get:
      operationId: getTextToVideoArena
      summary: Get text-to-video arena rankings
      description: |-
        Returns arena Elo rankings for text-to-video models. Free tier returns model identity plus Elo and CI only; Pro and Commercial add rank, samples, pricing, release date, open_weights_url, and optional category breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/text-to-video/models/free`](#getTextToVideoArenaFree) instead.
      tags:
        - Media - Video Arena
      parameters:
        - $ref: "#/components/parameters/include_categories"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-video/models?include_categories=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-video/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_categories": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-video/models?include_categories=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaResponse"
              examples:
                pro_tier:
                  summary: Pro tier response with categories
                  value:
                    tier: pro
                    data:
                      - id: 36db1f4d-a9f6-49d1-a74d-06bddbf2fe4f
                        name: Dreamina Seedance 2.0 720p
                        slug: seedance-2-0
                        model_creator:
                          id: 2354746c-4775-4a06-b64d-0ba4137785b8
                          name: ByteDance Seed
                        elo: 1269
                        ci_95: 8
                        rank: 1
                        samples: 4271
                        release_date: 2025-06-01
                        price_per_minute: 0.45
                        open_weights_url: null
                        categories:
                          - label: Cinematic
                            elo: 1284
                            ci_95: 19
                            samples: 812
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/image-to-video/models/free:
    get:
      operationId: getImageToVideoArenaFree
      summary: Get image-to-video arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/image-to-video/models`. Returns the Free-shape
        arena response — model identity plus Elo and CI only. Accepts any valid API key
        (Free, Pro, or Commercial); Pro and Commercial keys also receive the Free-shape
        body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Video Arena
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/image-to-video/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/image-to-video/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/image-to-video/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 61270a9b-9d2e-4875-810f-e81508bc5504
                        name: Kling 2.1 Master
                        slug: kling-2-1-master
                        model_creator:
                          id: 62cc833b-f55a-4489-bcae-54806d4b04ff
                          name: Kuaishou KlingAI
                        elo: 1184
                        ci_95: 10
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/image-to-video/models:
    get:
      operationId: getImageToVideoArena
      summary: Get image-to-video arena rankings
      description: |-
        Returns arena Elo rankings for image-to-video models. Free tier returns model identity plus Elo and CI only; Pro and Commercial add rank, samples, pricing, release date, open_weights_url, and optional category breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/image-to-video/models/free`](#getImageToVideoArenaFree) instead.
      tags:
        - Media - Video Arena
      parameters:
        - $ref: "#/components/parameters/include_categories"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/image-to-video/models?include_categories=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/image-to-video/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_categories": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/image-to-video/models?include_categories=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaResponse"
              examples:
                pro_tier:
                  summary: Pro tier response with categories
                  value:
                    tier: pro
                    data:
                      - id: 61270a9b-9d2e-4875-810f-e81508bc5504
                        name: Kling 2.1 Master
                        slug: kling-2-1-master
                        model_creator:
                          id: 62cc833b-f55a-4489-bcae-54806d4b04ff
                          name: Kuaishou KlingAI
                        elo: 1184
                        ci_95: 10
                        rank: 1
                        samples: 1890
                        release_date: 2025-03-27
                        price_per_minute: 0.5
                        open_weights_url: null
                        categories:
                          - label: People
                            elo: 1196
                            ci_95: 21
                            samples: 354
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-video-audio/models/free:
    get:
      operationId: getTextToVideoAudioArenaFree
      summary: Get text-to-video with audio arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/text-to-video-audio/models`. Returns the
        Free-shape arena response — model identity plus Elo and CI only. Accepts any
        valid API key (Free, Pro, or Commercial); Pro and Commercial keys also receive
        the Free-shape body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Video Arena
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-video-audio/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-video-audio/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-video-audio/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 5ad8e0d8-d9bf-4a55-904a-f98e7a7a4b2d
                        name: Veo 3 Fast
                        slug: veo-3-fast
                        model_creator:
                          id: ad0d7c6b-6b44-458a-a95f-9d0cb3d8f8e2
                          name: Google
                        elo: 1221
                        ci_95: 14
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-video-audio/models:
    get:
      operationId: getTextToVideoAudioArena
      summary: Get text-to-video with audio arena rankings
      description: |-
        Returns arena Elo rankings for text-to-video models that generate video with audio output. Free tier returns model identity plus Elo and CI only; Pro and Commercial add rank, samples, pricing, release date, open_weights_url, and optional category breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/text-to-video-audio/models/free`](#getTextToVideoAudioArenaFree) instead.
      tags:
        - Media - Video Arena
      parameters:
        - $ref: "#/components/parameters/include_categories"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-video-audio/models?include_categories=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-video-audio/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_categories": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-video-audio/models?include_categories=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaResponse"
              examples:
                pro_tier:
                  summary: Pro tier response with categories
                  value:
                    tier: pro
                    data:
                      - id: 5ad8e0d8-d9bf-4a55-904a-f98e7a7a4b2d
                        name: Veo 3 Fast
                        slug: veo-3-fast
                        model_creator:
                          id: ad0d7c6b-6b44-458a-a95f-9d0cb3d8f8e2
                          name: Google
                        elo: 1221
                        ci_95: 14
                        rank: 1
                        samples: 2334
                        release_date: 2025-05-20
                        price_per_minute: 0.75
                        open_weights_url: null
                        categories:
                          - label: Dialogue
                            elo: 1237
                            ci_95: 27
                            samples: 401
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/image-to-video-audio/models/free:
    get:
      operationId: getImageToVideoAudioArenaFree
      summary: Get image-to-video with audio arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/image-to-video-audio/models`. Returns the
        Free-shape arena response — model identity plus Elo and CI only. Accepts any
        valid API key (Free, Pro, or Commercial); Pro and Commercial keys also receive
        the Free-shape body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Video Arena
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/image-to-video-audio/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/image-to-video-audio/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/image-to-video-audio/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 8b7cdcab-6f22-4d95-8d0f-f09db1d2233d
                        name: PixVerse V4.5 Audio
                        slug: pixverse-v4-5-audio
                        model_creator:
                          id: 1cb39f34-a0b6-4ca8-82fd-fec0e068eb7a
                          name: PixVerse
                        elo: 1163
                        ci_95: 17
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/image-to-video-audio/models:
    get:
      operationId: getImageToVideoAudioArena
      summary: Get image-to-video with audio arena rankings
      description: |-
        Returns arena Elo rankings for image-to-video models that generate video with audio output. Free tier returns model identity plus Elo and CI only; Pro and Commercial add rank, samples, pricing, release date, open_weights_url, and optional category breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/image-to-video-audio/models/free`](#getImageToVideoAudioArenaFree) instead.
      tags:
        - Media - Video Arena
      parameters:
        - $ref: "#/components/parameters/include_categories"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/image-to-video-audio/models?include_categories=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/image-to-video-audio/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_categories": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/image-to-video-audio/models?include_categories=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/VideoArenaResponse"
              examples:
                pro_tier:
                  summary: Pro tier response with categories
                  value:
                    tier: pro
                    data:
                      - id: 8b7cdcab-6f22-4d95-8d0f-f09db1d2233d
                        name: PixVerse V4.5 Audio
                        slug: pixverse-v4-5-audio
                        model_creator:
                          id: 1cb39f34-a0b6-4ca8-82fd-fec0e068eb7a
                          name: PixVerse
                        elo: 1163
                        ci_95: 17
                        rank: 1
                        samples: 987
                        release_date: 2025-02-14
                        price_per_minute: 0.6
                        open_weights_url: null
                        categories:
                          - label: Animation
                            elo: 1178
                            ci_95: 34
                            samples: 188
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-speech/models/free:
    get:
      operationId: getTextToSpeechArenaFree
      summary: Get text-to-speech arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/text-to-speech/models`. Returns the Free-shape
        arena response — model identity plus Elo and CI only. Accepts any valid API key
        (Free, Pro, or Commercial); Pro and Commercial keys also receive the Free-shape
        body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Speech
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-speech/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-speech/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-speech/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TextToSpeechFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 6e0eadf0-3bf9-4424-a563-90292f2a0afd
                        name: Inworld TTS 1.5 Max
                        slug: tts-1-5-max
                        model_creator:
                          id: 3aab6d2e-04b0-43ee-996f-d8ef76ac3232
                          name: Inworld
                        elo: 1240
                        ci_95: 22
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/text-to-speech/models:
    get:
      operationId: getTextToSpeechArena
      summary: Get text-to-speech arena rankings
      description: |-
        Returns arena Elo rankings for text-to-speech models. Free tier returns model identity plus Elo and CI only; Pro adds samples, release date, and pricing.

        **Pro+ only.** Free integrations should use [`/api/v2/media/text-to-speech/models/free`](#getTextToSpeechArenaFree) instead.
      tags:
        - Media - Speech
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/text-to-speech/models" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/text-to-speech/models",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/text-to-speech/models",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/TextToSpeechResponse"
              examples:
                pro:
                  summary: Pro response
                  value:
                    tier: pro
                    data:
                      - id: 6e0eadf0-3bf9-4424-a563-90292f2a0afd
                        name: Inworld TTS 1.5 Max
                        slug: tts-1-5-max
                        model_creator:
                          id: 3aab6d2e-04b0-43ee-996f-d8ef76ac3232
                          name: Inworld
                        elo: 1240
                        ci_95: 22
                        samples: 1330
                        release_date: 2026-01-21
                        price_per_1m_characters: 10
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/speech-to-speech/models/free:
    get:
      operationId: getSpeechToSpeechFree
      summary: Get speech-to-speech model data (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/speech-to-speech/models`. Returns the Free-shape
        response — model identity plus BBA and FDB scores, with Pro-only per-provider
        pricing and performance data omitted. Accepts any valid API key (Free, Pro, or
        Commercial); Pro and Commercial keys also receive the
        Free-shape body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Speech
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/speech-to-speech/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/speech-to-speech/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/speech-to-speech/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpeechToSpeechFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: eead24bb-ad0b-45be-b0ab-7b16381c2daf
                        name: GPT 4o audio chatcompletions
                        slug: 4o-audio-chatcompletions
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                        bba_score: 0.54
                        fdb_score: null
                        tau_voice_score: 0.37
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/speech-to-speech/models:
    get:
      operationId: getSpeechToSpeech
      summary: Get speech-to-speech model data
      description: |-
        Returns data for speech-to-speech models including quality metrics (BBA and FDB scores).
        Pro tier also includes per-provider pricing and performance data.

        **Pro+ only.** Free integrations should use [`/api/v2/media/speech-to-speech/models/free`](#getSpeechToSpeechFree) instead.
      tags:
        - Media - Speech
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/speech-to-speech/models" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/speech-to-speech/models",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/speech-to-speech/models",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpeechToSpeechResponse"
              examples:
                pro_tier:
                  summary: Pro tier response
                  value:
                    tier: pro
                    data:
                      - id: eead24bb-ad0b-45be-b0ab-7b16381c2daf
                        name: GPT 4o audio chatcompletions
                        slug: 4o-audio-chatcompletions
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                        bba_score: 0.54
                        fdb_score: null
                        tau_voice_score: 0.37
                        providers:
                          - id: 6047c38a-af71-4b47-9d66-d361753f71b4
                            name: OpenAI
                            slug: openai
                            price_per_hour_input: 3.6
                            price_per_hour_output: 14.4
                            time_to_first_audio_seconds: 3.38
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/speech-to-text/models/free:
    get:
      operationId: getSpeechToTextModelsFree
      summary: Get speech-to-text models (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/speech-to-text/models`. Returns the Free-shape
        response — model identity plus the overall WER index, with Pro-only benchmark
        breakdowns, open-weights status, and per-provider data omitted. Accepts any valid
        API key (Free, Pro, or Commercial); Pro and Commercial keys also receive the
        Free-shape body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Speech
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/speech-to-text/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/speech-to-text/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/speech-to-text/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpeechToTextModelsFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 865b890e-c487-4e78-a404-d1af7d7ee910
                        name: GPT-4o Mini Transcribe, OpenAI
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                        aa_wer_index: 0
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/speech-to-text/models:
    get:
      operationId: getSpeechToTextModels
      summary: Get speech-to-text models
      description: |-
        Returns speech-to-text model data including quality metrics (word error rates).
        Free tier returns model identity and overall WER index only.
        Pro tier adds benchmark-specific WER breakdowns, open weights status, and per-provider data.

        **Pro+ only.** Free integrations should use [`/api/v2/media/speech-to-text/models/free`](#getSpeechToTextModelsFree) instead.
      tags:
        - Media - Speech
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/speech-to-text/models" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/speech-to-text/models",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/speech-to-text/models",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/SpeechToTextModelsResponse"
              examples:
                pro:
                  summary: Pro response
                  value:
                    tier: pro
                    data:
                      - id: 865b890e-c487-4e78-a404-d1af7d7ee910
                        name: GPT-4o Mini Transcribe, OpenAI
                        model_creator:
                          id: e67e56e3-15cd-43db-b679-da4660a69f41
                          name: OpenAI
                        aa_wer_index: 0
                        aa_agenttalk: 0.04
                        voxpopuli_cleaned_aa: 0.02
                        earnings_22_cleaned_aa: 0.08
                        open_weights: false
                        providers:
                          - id: 6047c38a-af71-4b47-9d66-d361753f71b4
                            name: OpenAI
                            slug: openai
                            price_per_1k_minutes: 3
                            median_speed_factor: 48.36
                            aa_wer_index: 0
                            aa_agenttalk: 0.04
                            voxpopuli_cleaned_aa: 0.02
                            earnings_22_cleaned_aa: 0.08
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/music/instrumental/models/free:
    get:
      operationId: getMusicInstrumentalArenaFree
      summary: Get instrumental music arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/music/instrumental/models`. Returns the
        Free-shape arena response — model identity plus Elo and CI only. Accepts any
        valid API key (Free, Pro, or Commercial); Pro and Commercial keys also receive
        the Free-shape body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Music
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/music/instrumental/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/music/instrumental/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/music/instrumental/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MusicArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 1d06bf78-0a16-4fdf-8029-663a694e3470
                        name: Suno V4.5
                        model_creator:
                          id: 30bf1911-2cd9-4bce-a179-009b174196fc
                          name: Suno
                        elo: 1120
                        ci_95: 15
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/music/instrumental/models:
    get:
      operationId: getMusicInstrumentalArena
      summary: Get instrumental music arena rankings
      description: |-
        Returns arena Elo rankings for instrumental music generation models. Free tier returns model identity plus Elo and CI only; Pro adds samples and optional genre breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/music/instrumental/models/free`](#getMusicInstrumentalArenaFree) instead.
      tags:
        - Media - Music
      parameters:
        - $ref: "#/components/parameters/include_genres"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/music/instrumental/models?include_genres=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/music/instrumental/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_genres": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/music/instrumental/models?include_genres=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MusicArenaResponse"
              examples:
                pro_tier:
                  summary: Pro response with genre breakdowns
                  value:
                    tier: pro
                    data:
                      - id: b5b7f9d3-85d4-47dc-9213-fe09c1ea5da1
                        name: Eleven Music
                        model_creator:
                          id: 8d057760-0a8b-460a-9625-6dd261bb325c
                          name: ElevenLabs
                        elo: 1064
                        ci_95: 14
                        samples: 2396
                        genres:
                          - label: Latin
                            elo: 1063
                            ci_95: 48
                            samples: 214
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/music/with-vocals/models/free:
    get:
      operationId: getMusicWithVocalsArenaFree
      summary: Get with-vocals music arena rankings (Free tier)
      description: |-
        Free-tier sibling of `/api/v2/media/music/with-vocals/models`. Returns the
        Free-shape arena response — model identity plus Elo and CI only. Accepts any
        valid API key (Free, Pro, or Commercial); Pro and Commercial keys also receive
        the Free-shape body (Pro-only fields omitted; the `tier` field reflects the caller's actual tier) when calling this URL.
      tags:
        - Media - Music
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/music/with-vocals/models/free" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/music/with-vocals/models/free",
                headers={"x-api-key": "YOUR_API_KEY"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/music/with-vocals/models/free",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MusicArenaFreeResponse"
              examples:
                free:
                  summary: Free-shape response with `tier` field
                  value:
                    tier: free
                    data:
                      - id: 1d06bf78-0a16-4fdf-8029-663a694e3470
                        name: Suno V4.5
                        model_creator:
                          id: 30bf1911-2cd9-4bce-a179-009b174196fc
                          name: Suno
                        elo: 1080
                        ci_95: 12
        "400":
          $ref: "#/components/responses/BadRequest"
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/media/music/with-vocals/models:
    get:
      operationId: getMusicWithVocalsArena
      summary: Get with-vocals music arena rankings
      description: |-
        Returns arena Elo rankings for music generation models with vocals. Free tier returns model identity plus Elo and CI only; Pro adds samples and optional genre breakdowns.

        **Pro+ only.** Free integrations should use [`/api/v2/media/music/with-vocals/models/free`](#getMusicWithVocalsArenaFree) instead.
      tags:
        - Media - Music
      parameters:
        - $ref: "#/components/parameters/include_genres"
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl "https://artificialanalysis.ai/api/v2/media/music/with-vocals/models?include_genres=true" \
              -H "x-api-key: YOUR_API_KEY"
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.get(
                "https://artificialanalysis.ai/api/v2/media/music/with-vocals/models",
                headers={"x-api-key": "YOUR_API_KEY"},
                params={"include_genres": "true"}
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/media/music/with-vocals/models?include_genres=true",
              { headers: { "x-api-key": "YOUR_API_KEY" } }
            );
            const data = await response.json();
      responses:
        "200":
          description: Successful response
          headers:
            X-RateLimit-Limit:
              $ref: "#/components/headers/RateLimitLimit"
            X-RateLimit-Remaining:
              $ref: "#/components/headers/RateLimitRemaining"
            X-RateLimit-Reset:
              $ref: "#/components/headers/RateLimitReset"
            X-AA-Tier:
              $ref: "#/components/headers/Tier"
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/MusicArenaResponse"
              examples:
                pro_tier:
                  summary: Pro response with genre breakdowns
                  value:
                    tier: pro
                    data:
                      - id: 1d06bf78-0a16-4fdf-8029-663a694e3470
                        name: Suno V4.5
                        model_creator:
                          id: 30bf1911-2cd9-4bce-a179-009b174196fc
                          name: Suno
                        elo: 1080
                        ci_95: 12
                        samples: 3428
                        genres:
                          - label: Alternative / Indie
                            elo: 1064
                            ci_95: 46
                            samples: 244
        "401":
          $ref: "#/components/responses/Unauthorized"
        "403":
          $ref: "#/components/responses/Forbidden"
        "429":
          $ref: "#/components/responses/RateLimited"
        "500":
          $ref: "#/components/responses/InternalError"
  /api/v2/critpt/evaluate:
    post:
      operationId: evaluateCritPt
      summary: Submit code for CritPt evaluation
      description: |
        Submit generated code solutions for grading against CritPt benchmark problems.

        This endpoint differs from the rest of the API. It is a **code evaluation service**,
        not a data retrieval endpoint. It accepts one or more code submissions and returns
        grading results from the CritPt evaluation server.

        Rate limited to **10 requests per day** per user. Rate limit information is returned
        via `X-RateLimit-*` response headers.
      tags:
        - CritPt Evaluation
      requestBody:
        required: true
        content:
          application/json:
            schema:
              type: object
              required:
                - submissions
                - batch_metadata
              properties:
                submissions:
                  type: array
                  description: One or more code submissions to evaluate.
                  items:
                    type: object
                    required:
                      - problem_id
                      - generated_code
                      - model
                      - generation_config
                    properties:
                      problem_id:
                        type: string
                        description: The CritPt problem identifier.
                      generated_code:
                        type: string
                        description: The generated code solution to evaluate.
                      model:
                        type: string
                        description: The model that generated the code.
                      generation_config:
                        type: object
                        description: Configuration used for code generation (passed through to the grader).
                        additionalProperties: true
                      messages:
                        type: array
                        description: Optional conversation messages that produced the code.
                        items:
                          type: object
                          additionalProperties: true
                batch_metadata:
                  type: object
                  description: Metadata about the submission batch (passed through to the grader).
                  additionalProperties: true
            example:
              submissions:
                - problem_id: prob_001
                  generated_code: |-
                    import numpy as np

                    def solve():
                        return np.array([1, 2, 3])
                  model: claude-sonnet-4-20250514
                  generation_config:
                    temperature: 0
                    max_tokens: 4096
              batch_metadata:
                run_id: my-eval-run-001
      x-codeSamples:
        - lang: Shell
          label: cURL
          source: |
            curl -X POST "https://artificialanalysis.ai/api/v2/critpt/evaluate" \
              -H "x-api-key: YOUR_API_KEY" \
              -H "Content-Type: application/json" \
              -d '{
                "submissions": [{
                  "problem_id": "prob_001",
                  "generated_code": "import numpy as np\n\ndef solve():\n    return np.array([1, 2, 3])",
                  "model": "claude-sonnet-4-20250514",
                  "generation_config": { "temperature": 0, "max_tokens": 4096 }
                }],
                "batch_metadata": { "run_id": "my-eval-run-001" }
              }'
        - lang: Python
          label: Python
          source: |
            import requests

            response = requests.post(
                "https://artificialanalysis.ai/api/v2/critpt/evaluate",
                headers={"x-api-key": "YOUR_API_KEY", "Content-Type": "application/json"},
                json={
                    "submissions": [{
                        "problem_id": "prob_001",
                        "generated_code": "import numpy as np\n\ndef solve():\n    return np.array([1, 2, 3])",
                        "model": "claude-sonnet-4-20250514",
                        "generation_config": {"temperature": 0, "max_tokens": 4096},
                    }],
                    "batch_metadata": {"run_id": "my-eval-run-001"},
                }
            )
            data = response.json()
        - lang: JavaScript
          label: JavaScript
          source: |
            const response = await fetch(
              "https://artificialanalysis.ai/api/v2/critpt/evaluate",
              {
                method: "POST",
                headers: {
                  "x-api-key": "YOUR_API_KEY",
                  "Content-Type": "application/json",
                },
                body: JSON.stringify({
                  submissions: [{
                    problem_id: "prob_001",
                    generated_code: "import numpy as np\n\ndef solve():\n    return np.array([1, 2, 3])",
                    model: "claude-sonnet-4-20250514",
                    generation_config: { temperature: 0, max_tokens: 4096 },
                  }],
                  batch_metadata: { run_id: "my-eval-run-001" },
                }),
              }
            );
            const data = await response.json();
      responses:
        "200":
          description: Evaluation results from the CritPt grading server.
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
              description: Maximum requests allowed in the current window.
            X-RateLimit-Remaining:
              schema:
                type: integer
              description: Requests remaining in the current window.
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp at which the current rate limit window resets.
          content:
            application/json:
              schema:
                description: Grading results returned by the CritPt evaluation server. The response shape is determined by the upstream grader.
                type: object
                additionalProperties: true
        "400":
          description: Invalid request body.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
              example:
                error: Invalid body
        "401":
          $ref: "#/components/responses/Unauthorized"
        "429":
          description: Rate limit exceeded (10 requests per day).
          headers:
            X-RateLimit-Limit:
              schema:
                type: integer
            X-RateLimit-Remaining:
              schema:
                type: integer
            X-RateLimit-Reset:
              schema:
                type: integer
              description: Unix timestamp at which the current rate limit window resets.
            Retry-After:
              schema:
                type: integer
              description: Seconds until the rate limit resets.
          content:
            application/json:
              schema:
                $ref: "#/components/schemas/ErrorResponse"
              example:
                error: Rate limit exceeded
        "500":
          $ref: "#/components/responses/InternalError"
components:
  securitySchemes:
    ApiKeyAuth:
      type: apiKey
      in: header
      name: x-api-key
      description: API key for authentication. Obtain from your Artificial Analysis account.
  parameters:
    prompt_type:
      name: prompt_type
      in: query
      description: |
        The prompt type preset used for performance benchmarking.
        Controls how many input tokens and parallel queries are used in latency/throughput measurements.

        | prompt_type | input_tokens | parallel_queries |
        | --- | --- | --- |
        | `medium` | 1,000 | 1 |
        | `long` (default) | 10,000 | 1 |
        | `100k` | 100,000 | 1 |
        | `vision_single_image` | 1,000 | 1 |
        | `medium_coding` | 1,000 | 1 |
        | `medium_parallel` | 1,000 | 10 |
      schema:
        type: string
        enum:
          - medium
          - long
          - 100k
          - vision_single_image
          - medium_coding
          - medium_parallel
        default: long
    window:
      name: window
      in: query
      description: Lookback period from today.
      schema:
        type: string
        enum:
          - 7d
          - 30d
          - 90d
        default: 90d
    interval:
      name: interval
      in: query
      description: |
        Aggregation granularity. Auto-derived from window if omitted
        (7d/30d → daily, 90d → weekly).
      schema:
        type: string
        enum:
          - daily
          - weekly
          - monthly
    page:
      name: page
      in: query
      description: |
        Page number for paginated results (1-indexed). Defaults to 1.
      schema:
        type: integer
        minimum: 1
        maximum: 10000
        default: 1
    include_categories:
      name: include_categories
      in: query
      description: Include per-category Elo breakdowns (Pro tier only).
      schema:
        type: boolean
        default: false
    include_genres:
      name: include_genres
      in: query
      description: Include per-genre Elo breakdowns (Pro tier only).
      schema:
        type: boolean
        default: false
  headers:
    RateLimitLimit:
      schema:
        type: integer
      description: Maximum requests allowed in the current window.
    RateLimitRemaining:
      schema:
        type: integer
      description: Requests remaining in the current window.
    RateLimitReset:
      schema:
        type: integer
      description: Unix timestamp at which the current rate limit window resets.
    Tier:
      schema:
        type: string
        enum:
          - free
          - pro
          - commercial
      description: |
        Subscription tier that served the request. Present on every authenticated response
        (success and error), and mirrors the `tier` field in successful response bodies.
    RetryAfter:
      schema:
        type: integer
      description: Seconds to wait before retrying. Present on `429` responses.
  responses:
    BadRequest:
      description: Invalid query parameters
      headers:
        X-AA-Tier:
          $ref: "#/components/headers/Tier"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorResponse"
          example:
            error: "Invalid prompt_type. Valid options: medium, long, 100k, vision_single_image, medium_coding, medium_parallel"
    Unauthorized:
      description: Missing or invalid API key
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorResponse"
          example:
            error: API key is required
    NotFound:
      description: Resource not found
      headers:
        X-AA-Tier:
          $ref: "#/components/headers/Tier"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorResponse"
          example:
            error: "Model not found: nonexistent-slug"
    Forbidden:
      description: Free tier requesting a pro-only feature
      headers:
        X-AA-Tier:
          $ref: "#/components/headers/Tier"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorResponse"
          example:
            error: Language models list requires a Pro subscription
    CommercialAccessRequired:
      description: Commercial access required — your API key does not have grants for this provider.
      headers:
        X-AA-Tier:
          $ref: "#/components/headers/Tier"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorResponse"
          example:
            error: Commercial access required
    RateLimited:
      description: Rate limited
      headers:
        X-RateLimit-Limit:
          $ref: "#/components/headers/RateLimitLimit"
        X-RateLimit-Remaining:
          $ref: "#/components/headers/RateLimitRemaining"
        X-RateLimit-Reset:
          $ref: "#/components/headers/RateLimitReset"
        Retry-After:
          $ref: "#/components/headers/RetryAfter"
        X-AA-Tier:
          $ref: "#/components/headers/Tier"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorResponse"
          example:
            error: Rate limit exceeded
    InternalError:
      description: Server error
      headers:
        X-AA-Tier:
          $ref: "#/components/headers/Tier"
      content:
        application/json:
          schema:
            $ref: "#/components/schemas/ErrorResponse"
          example:
            error: Internal Server Error
  schemas:
    ErrorResponse:
      type: object
      properties:
        error:
          type: string
        details:
          type: object
          description: Additional error details (e.g. validation errors). Only present on some error responses.
      required:
        - error
    PaginationMeta:
      type: object
      properties:
        page:
          type: integer
          description: Current page number (1-indexed).
        page_size:
          type: integer
          description: Number of items per page.
        total_pages:
          type: integer
          description: Total number of pages.
        has_more:
          type: boolean
          description: Whether there are more pages after the current one.
      required:
        - page
        - page_size
        - total_pages
        - has_more
    LLMModelsResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        intelligence_index_version:
          $ref: "#/components/schemas/IntelligenceIndexVersion"
        pagination:
          $ref: "#/components/schemas/PaginationMeta"
        data:
          type: array
          items:
            $ref: "#/components/schemas/ModelDataExternal"
      required:
        - tier
        - intelligence_index_version
        - pagination
        - data
    LLMModelsFreeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        intelligence_index_version:
          $ref: "#/components/schemas/IntelligenceIndexVersion"
        pagination:
          $ref: "#/components/schemas/PaginationMeta"
        data:
          type: array
          items:
            $ref: "#/components/schemas/FreeModelData"
      required:
        - tier
        - intelligence_index_version
        - pagination
        - data
    LLMModelItemResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        intelligence_index_version:
          $ref: "#/components/schemas/IntelligenceIndexVersion"
        data:
          $ref: "#/components/schemas/ModelDataExternal"
      required:
        - tier
        - intelligence_index_version
        - data
    IntelligenceIndexVersion:
      type: number
      description: Version of the Artificial Analysis Intelligence Index the `artificial_analysis_intelligence_index` scores in this response belong to, as a number with the `v` dropped (e.g. `4.1` for v4.1). See the Intelligence Index versioning section for what major vs. minor changes mean.
    FreeModelData:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        release_date:
          description: ISO date string (e.g. "2024-05-13").
          type:
            - string
            - "null"
        model_creator:
          oneOf:
            - $ref: "#/components/schemas/FreeModelCreator"
            - type: "null"
        evaluations:
          $ref: "#/components/schemas/FreeEvaluations"
        artificial_analysis_intelligence_index_cost:
          oneOf:
            - $ref: "#/components/schemas/FreeIntelligenceIndexCost"
            - type: "null"
          description: Pre-calculated cost to run the Intelligence Index evaluation. Free tier exposes total cost plus `cost_per_task.total_cost`.
        pricing:
          $ref: "#/components/schemas/FreePricing"
          description: Input and output token pricing. Pro tier adds blended pricing fields.
        performance:
          $ref: "#/components/schemas/FreeModelPerformance"
          description: Median performance metrics across all providers serving this model. Pro tier adds percentiles and quartiles.
      required:
        - id
        - name
        - slug
        - release_date
        - model_creator
        - evaluations
        - artificial_analysis_intelligence_index_cost
        - pricing
        - performance
      description: Free-tier shape returned by `/api/v2/language/models/free`. Includes headline indices, median performance, and input/output pricing. Pro and Commercial keys also receive this shape when calling the `/free` endpoint.
    FreeModelCreator:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
    FreeEvaluations:
      type: object
      properties:
        artificial_analysis_intelligence_index:
          description: AA Intelligence Index composite score.
          type:
            - number
            - "null"
        artificial_analysis_coding_index:
          description: AA Coding Index composite score.
          type:
            - number
            - "null"
        artificial_analysis_agentic_index:
          description: AA Agentic Index composite score.
          type:
            - number
            - "null"
      required:
        - artificial_analysis_intelligence_index
        - artificial_analysis_coding_index
        - artificial_analysis_agentic_index
      description: Composite Artificial Analysis indices. Pro tier adds per-benchmark scores.
    FreeIntelligenceIndexCost:
      type: object
      properties:
        total_cost:
          type: number
          description: Total cost in USD to run the Intelligence Index evaluation.
        cost_per_task:
          oneOf:
            - $ref: "#/components/schemas/FreeIntelligenceIndexCostPerTask"
            - type: "null"
          description: Weighted average cost per Intelligence Index task, rounded to 4 decimal places. Null when token or pricing data is incomplete.
      required:
        - total_cost
        - cost_per_task
    FreeIntelligenceIndexCostPerTask:
      type: object
      properties:
        total_cost:
          type: number
          description: Weighted average cost in USD per Intelligence Index task, across all Intelligence Index evaluations. Rounded to 4 decimal places.
      required:
        - total_cost
    FreePricing:
      type: object
      properties:
        price_1m_input_tokens:
          description: Price per 1M input tokens. Null when pricing data is not available.
          type:
            - number
            - "null"
        price_1m_output_tokens:
          description: Price per 1M output tokens. Null when pricing data is not available.
          type:
            - number
            - "null"
        price_1m_cache_hit_tokens:
          description: Price per 1M cached input (cache hit / read) tokens. Null when the provider does not report cache pricing.
          type:
            - number
            - "null"
        price_1m_cache_write_tokens:
          description: Price per 1M cache write tokens. Null when the provider does not report cache pricing.
          type:
            - number
            - "null"
      required:
        - price_1m_input_tokens
        - price_1m_output_tokens
        - price_1m_cache_hit_tokens
        - price_1m_cache_write_tokens
    FreeModelPerformance:
      type: object
      properties:
        median_output_tokens_per_second:
          type:
            - number
            - "null"
        median_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_answer_token_seconds:
          type:
            - number
            - "null"
        median_end_to_end_response_time_seconds:
          type:
            - number
            - "null"
      required:
        - median_output_tokens_per_second
        - median_time_to_first_token_seconds
        - median_time_to_first_answer_token_seconds
        - median_end_to_end_response_time_seconds
      description: Median performance metrics across all providers serving this model. Individual fields are null when no measurements are available for that metric.
    ModelDataExternal:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        release_date:
          description: ISO date string (e.g. "2024-05-13").
          type:
            - string
            - "null"
        model_creator:
          oneOf:
            - $ref: "#/components/schemas/ModelCreator"
            - type: "null"
        reasoning_model:
          type: boolean
          description: Pro tier only. Omitted on Free tier.
        evaluations:
          $ref: "#/components/schemas/Evaluations"
        artificial_analysis_intelligence_index_cost:
          oneOf:
            - $ref: "#/components/schemas/IntelligenceIndexCost"
            - type: "null"
          description: Pre-calculated cost to run the Intelligence Index evaluation. Free tier includes total_cost and cost_per_task.total_cost; Pro tier adds input_cost, reasoning_cost, answer_cost at both levels.
        artificial_analysis_intelligence_index_token_counts:
          oneOf:
            - $ref: "#/components/schemas/IntelligenceIndexTokenCounts"
            - type: "null"
          description: Pro tier only. Omitted on Free tier.
        pricing:
          $ref: "#/components/schemas/Pricing"
          description: Full pricing object including blended fields. Free tier returns input and output token prices only. See `FreePricing`.
        performance:
          $ref: "#/components/schemas/ModelPerformance"
          description: Full performance object including quartiles and percentiles. Free tier returns medians only. See `FreeModelPerformance`.
        context_window_tokens:
          description: Pro tier only. Omitted on Free tier. Null when not set for the model.
          type:
            - integer
            - "null"
        parameters:
          oneOf:
            - $ref: "#/components/schemas/Parameters"
            - type: "null"
          description: Pro tier only. Omitted on Free tier.
        modalities:
          $ref: "#/components/schemas/Modalities"
          description: Pro tier only. Omitted on Free tier.
        licensing:
          $ref: "#/components/schemas/Licensing"
          description: Pro tier only. Omitted on Free tier.
        huggingface_url:
          description: Pro tier only. Omitted on Free tier. Canonical Hugging Face or model weights URL when available.
          type:
            - string
            - "null"
        openrouter_api_id:
          description: Pro tier only. Omitted on Free tier. OpenRouter API model identifier when available.
          type:
            - string
            - "null"
        evaluation_token_counts:
          oneOf:
            - $ref: "#/components/schemas/EvaluationTokenCounts"
            - type: "null"
          description: Pro tier only. Detail endpoint only (`/api/v2/language/models/{slug}`). Omitted on Free tier and list endpoint.
        aa_omniscience_breakdown:
          oneOf:
            - $ref: "#/components/schemas/OmniscienceBreakdown"
            - type: "null"
          description: Pro tier only. Detail endpoint only (`/api/v2/language/models/{slug}`). Omitted on Free tier and list endpoint.
        artificial_analysis_openness_index_breakdown:
          $ref: "#/components/schemas/OpennessBreakdown"
          description: Pro tier only. Detail endpoint only (`/api/v2/language/models/{slug}`). Omitted on Free tier and list endpoint.
        providers:
          type: array
          items:
            $ref: "#/components/schemas/ModelProviderDataExternal"
          description: Commercial tier only. Detail endpoint only (`/api/v2/language/models/{slug}`). Omitted on Free and Pro tiers and on the list endpoint.
      required:
        - id
        - name
        - slug
        - release_date
        - model_creator
        - evaluations
        - artificial_analysis_intelligence_index_cost
    ModelCreator:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        country:
          description: Pro tier only. Omitted on Free tier. ISO 3166-1 alpha-2 country code of the model creator.
          type:
            - string
            - "null"
      required:
        - id
        - name
    Evaluations:
      type: object
      properties:
        artificial_analysis_intelligence_index:
          description: AA Intelligence Index composite score.
          type:
            - number
            - "null"
        artificial_analysis_coding_index:
          description: AA Coding Index composite score.
          type:
            - number
            - "null"
        artificial_analysis_agentic_index:
          description: AA Agentic Index composite score.
          type:
            - number
            - "null"
        tau2_telecom:
          description: τ²-Bench Telecom score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        tau_banking:
          description: τ³-Banking score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        terminalbench_hard:
          description: Terminal-Bench Hard score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        terminalbench_v2_1:
          description: Terminal-Bench v2.1 score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        scicode:
          description: SciCode score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        aa_lcr:
          description: AA-LCR score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        aa_omniscience_index:
          description: AA-Omniscience Index score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        aa_omniscience_accuracy:
          description: Aggregate Omniscience accuracy. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        aa_omniscience_non_hallucination_rate:
          description: Aggregate Omniscience non-hallucination score (1 - hallucination_rate). Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        ifbench:
          description: IFBench score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        hle:
          description: Humanity's Last Exam score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        gpqa_diamond:
          description: GPQA Diamond score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        critpt:
          description: CritPt score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        gdpval_aa_elo:
          description: GDPval raw Elo score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        gdpval_aa_normalized:
          description: GDPval score normalized to a 0-1 scale, used in the Intelligence Index. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        mmmu_pro:
          description: MMMU-Pro visual reasoning score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        artificial_analysis_openness_index:
          description: Openness Index score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
        artificial_analysis_multilingual_index:
          description: Multilingual Index score. Pro tier only. Omitted on Free tier.
          type:
            - number
            - "null"
      required:
        - artificial_analysis_intelligence_index
        - artificial_analysis_coding_index
        - artificial_analysis_agentic_index
    Pricing:
      type: object
      properties:
        price_1m_blended_3_to_1:
          description: Blended price per 1M tokens (3:1 Input-Output ratio). Null when pricing data is not available.
          type:
            - number
            - "null"
        price_1m_blended_7_to_2_to_1:
          description: Blended price per 1M tokens (7:2:1 Cache-Input-Output ratio). Null when pricing data is not available.
          type:
            - number
            - "null"
        price_1m_input_tokens:
          description: Price per 1M input tokens. Null when pricing data is not available.
          type:
            - number
            - "null"
        price_1m_output_tokens:
          description: Price per 1M output tokens. Null when pricing data is not available.
          type:
            - number
            - "null"
        price_1m_cache_hit_tokens:
          description: Price per 1M cached input (cache hit / read) tokens. Null when the provider does not report cache pricing.
          type:
            - number
            - "null"
        price_1m_cache_write_tokens:
          description: Price per 1M cache write tokens. Null when the provider does not report cache pricing.
          type:
            - number
            - "null"
      required:
        - price_1m_blended_3_to_1
        - price_1m_blended_7_to_2_to_1
        - price_1m_input_tokens
        - price_1m_output_tokens
        - price_1m_cache_hit_tokens
        - price_1m_cache_write_tokens
    ModelPerformance:
      type: object
      properties:
        percentile_05_output_tokens_per_second:
          type:
            - number
            - "null"
        quartile_25_output_tokens_per_second:
          type:
            - number
            - "null"
        median_output_tokens_per_second:
          type:
            - number
            - "null"
        quartile_75_output_tokens_per_second:
          type:
            - number
            - "null"
        percentile_95_output_tokens_per_second:
          type:
            - number
            - "null"
        percentile_05_time_to_first_token_seconds:
          type:
            - number
            - "null"
        quartile_25_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_token_seconds:
          type:
            - number
            - "null"
        quartile_75_time_to_first_token_seconds:
          type:
            - number
            - "null"
        percentile_95_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_answer_token_seconds:
          type:
            - number
            - "null"
        median_end_to_end_response_time_seconds:
          type:
            - number
            - "null"
      required:
        - percentile_05_output_tokens_per_second
        - quartile_25_output_tokens_per_second
        - median_output_tokens_per_second
        - quartile_75_output_tokens_per_second
        - percentile_95_output_tokens_per_second
        - percentile_05_time_to_first_token_seconds
        - quartile_25_time_to_first_token_seconds
        - median_time_to_first_token_seconds
        - quartile_75_time_to_first_token_seconds
        - percentile_95_time_to_first_token_seconds
        - median_time_to_first_answer_token_seconds
        - median_end_to_end_response_time_seconds
      description: Aggregated performance metrics across all providers serving this model. Individual fields are null when no measurements are available for that metric.
    Parameters:
      type: object
      properties:
        total:
          type: number
          description: Total model parameters (in billions).
        active:
          description: Active parameters per forward pass (relevant for MoE models).
          type:
            - number
            - "null"
      required:
        - total
        - active
    Modalities:
      type: object
      properties:
        input:
          $ref: "#/components/schemas/ModalitySet"
        output:
          $ref: "#/components/schemas/ModalitySet"
      required:
        - input
        - output
    ModalitySet:
      type: object
      properties:
        text:
          type:
            - boolean
            - "null"
        image:
          type:
            - boolean
            - "null"
        video:
          type:
            - boolean
            - "null"
        speech:
          type:
            - boolean
            - "null"
      required:
        - text
        - image
        - video
        - speech
    Licensing:
      type: object
      properties:
        is_open_weights:
          type: boolean
      required:
        - is_open_weights
    EvalTokenCounts:
      type: object
      properties:
        input_tokens:
          type: number
        answer_tokens:
          type: number
        output_tokens:
          type: number
        reasoning_tokens:
          type: number
      required:
        - input_tokens
        - answer_tokens
        - output_tokens
        - reasoning_tokens
    EvaluationTokenCounts:
      type: object
      properties:
        hle:
          $ref: "#/components/schemas/EvalTokenCounts"
        aa_lcr:
          $ref: "#/components/schemas/EvalTokenCounts"
        gpqa_diamond:
          $ref: "#/components/schemas/EvalTokenCounts"
        tau2_telecom:
          $ref: "#/components/schemas/EvalTokenCounts"
        tau_banking:
          $ref: "#/components/schemas/EvalTokenCounts"
        critpt:
          $ref: "#/components/schemas/EvalTokenCounts"
        gdpval_aa:
          $ref: "#/components/schemas/EvalTokenCounts"
        ifbench:
          $ref: "#/components/schemas/EvalTokenCounts"
        scicode:
          $ref: "#/components/schemas/EvalTokenCounts"
        mmmu_pro:
          $ref: "#/components/schemas/EvalTokenCounts"
        aa_omniscience:
          $ref: "#/components/schemas/EvalTokenCounts"
        terminalbench_hard:
          $ref: "#/components/schemas/EvalTokenCounts"
        terminalbench_v2_1:
          $ref: "#/components/schemas/EvalTokenCounts"
      description: Per-evaluation token counts for each benchmark in the Intelligence Index.
    IntelligenceIndexCost:
      type: object
      properties:
        total_cost:
          type: number
          description: Total cost in USD to run the Intelligence Index evaluation. Available on all tiers.
        cost_per_task:
          oneOf:
            - $ref: "#/components/schemas/IntelligenceIndexCostPerTask"
            - type: "null"
          description: Weighted average cost per Intelligence Index task, rounded to 4 decimal places. Null when token or pricing data is incomplete.
        input_cost:
          description: Pro tier only. Omitted on Free tier. Null when not measured.
          type:
            - number
            - "null"
        reasoning_cost:
          description: Pro tier only. Omitted on Free tier. Null when not measured.
          type:
            - number
            - "null"
        answer_cost:
          description: Pro tier only. Omitted on Free tier. Null when not measured.
          type:
            - number
            - "null"
      required:
        - total_cost
        - cost_per_task
    IntelligenceIndexCostPerTask:
      type: object
      properties:
        total_cost:
          type: number
          description: Weighted average cost in USD per Intelligence Index task, across all Intelligence Index evaluations. Rounded to 4 decimal places.
        input_cost:
          description: Weighted average input cost in USD per Intelligence Index task. Null when not measured.
          type:
            - number
            - "null"
        reasoning_cost:
          description: Weighted average reasoning-token cost in USD per Intelligence Index task. Null when not measured.
          type:
            - number
            - "null"
        answer_cost:
          description: Weighted average answer-token cost in USD per Intelligence Index task. Null when not measured.
          type:
            - number
            - "null"
      required:
        - total_cost
        - input_cost
        - reasoning_cost
        - answer_cost
    IntelligenceIndexTokenCounts:
      type: object
      properties:
        input_tokens:
          type: integer
        answer_tokens:
          type: integer
        output_tokens:
          type: integer
        reasoning_tokens:
          type: integer
      required:
        - input_tokens
        - answer_tokens
        - output_tokens
        - reasoning_tokens
    OmniscienceDomainBreakdown:
      type: object
      properties:
        accuracy:
          type: number
        omniscience:
          type: number
        hallucination_rate:
          type: number
      required:
        - accuracy
        - omniscience
        - hallucination_rate
    OmniscienceBreakdown:
      type: object
      properties:
        total:
          $ref: "#/components/schemas/OmniscienceDomainBreakdown"
        law:
          oneOf:
            - $ref: "#/components/schemas/OmniscienceDomainBreakdown"
            - type: "null"
        health:
          oneOf:
            - $ref: "#/components/schemas/OmniscienceDomainBreakdown"
            - type: "null"
        business:
          oneOf:
            - $ref: "#/components/schemas/OmniscienceDomainBreakdown"
            - type: "null"
        humanities_and_social_sciences:
          oneOf:
            - $ref: "#/components/schemas/OmniscienceDomainBreakdown"
            - type: "null"
        science_engineering_and_mathematics:
          oneOf:
            - $ref: "#/components/schemas/OmniscienceDomainBreakdown"
            - type: "null"
        software_engineering:
          oneOf:
            - $ref: "#/components/schemas/OmniscienceDomainBreakdown"
            - type: "null"
      required:
        - total
    OpennessBreakdown:
      type: object
      properties:
        weights_access:
          type:
            - number
            - "null"
        weights_license:
          type:
            - number
            - "null"
        data_pretrain_access:
          type:
            - number
            - "null"
        data_pretrain_license:
          type:
            - number
            - "null"
        data_posttrain_access:
          type:
            - number
            - "null"
        data_posttrain_license:
          type:
            - number
            - "null"
        methodology_license:
          type:
            - number
            - "null"
        methodology_disclosure:
          type:
            - number
            - "null"
        artificial_analysis_openness_index:
          type:
            - number
            - "null"
    ModelProviderDataExternal:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        pricing:
          $ref: "#/components/schemas/Pricing"
        performance:
          $ref: "#/components/schemas/ProviderModelPerformance"
        context_window_tokens:
          description: Null when not set for the (provider, model) pair.
          type:
            - integer
            - "null"
      required:
        - id
        - name
        - slug
        - pricing
        - performance
        - context_window_tokens
    ProviderModelPerformance:
      type: object
      properties:
        percentile_05_output_tokens_per_second:
          type:
            - number
            - "null"
        quartile_25_output_tokens_per_second:
          type:
            - number
            - "null"
        median_output_tokens_per_second:
          type:
            - number
            - "null"
        quartile_75_output_tokens_per_second:
          type:
            - number
            - "null"
        percentile_95_output_tokens_per_second:
          type:
            - number
            - "null"
        percentile_05_time_to_first_token_seconds:
          type:
            - number
            - "null"
        quartile_25_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_token_seconds:
          type:
            - number
            - "null"
        quartile_75_time_to_first_token_seconds:
          type:
            - number
            - "null"
        percentile_95_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_answer_token_seconds:
          type:
            - number
            - "null"
        median_end_to_end_response_time_seconds:
          type:
            - number
            - "null"
      required:
        - percentile_05_output_tokens_per_second
        - quartile_25_output_tokens_per_second
        - median_output_tokens_per_second
        - quartile_75_output_tokens_per_second
        - percentile_95_output_tokens_per_second
        - percentile_05_time_to_first_token_seconds
        - quartile_25_time_to_first_token_seconds
        - median_time_to_first_token_seconds
        - quartile_75_time_to_first_token_seconds
        - percentile_95_time_to_first_token_seconds
        - median_time_to_first_answer_token_seconds
        - median_end_to_end_response_time_seconds
      description: Performance metrics for a single (provider, model) pair. Individual fields are null when no measurements are available for that metric.
    LLMProvidersResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - commercial
        pagination:
          $ref: "#/components/schemas/PaginationMeta"
        data:
          type: array
          items:
            $ref: "#/components/schemas/ProviderDataExternalList"
      required:
        - tier
        - pagination
        - data
    LLMProviderItemResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - commercial
        data:
          $ref: "#/components/schemas/ProviderDataExternalDetail"
      required:
        - tier
        - data
    ProviderDataExternalList:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        country:
          description: ISO 3166-1 alpha-2 country code of the provider. Null when unknown.
          type:
            - string
            - "null"
        models:
          type: array
          items:
            $ref: "#/components/schemas/ProviderModelExternalList"
      required:
        - id
        - name
        - slug
        - models
    ProviderDataExternalDetail:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        country:
          description: ISO 3166-1 alpha-2 country code of the provider. Null when unknown.
          type:
            - string
            - "null"
        models:
          type: array
          items:
            $ref: "#/components/schemas/ProviderModelExternalDetail"
      required:
        - id
        - name
        - slug
        - models
    ProviderModelExternalList:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        pricing:
          $ref: "#/components/schemas/Pricing"
        context_window_tokens:
          description: Null when not set for the (provider, model) pair.
          type:
            - integer
            - "null"
        performance:
          oneOf:
            - $ref: "#/components/schemas/ProviderModelPerformanceList"
            - type: "null"
      required:
        - id
        - name
        - slug
        - pricing
        - context_window_tokens
        - performance
    ProviderModelExternalDetail:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        pricing:
          $ref: "#/components/schemas/Pricing"
        context_window_tokens:
          description: Null when not set for the (provider, model) pair.
          type:
            - integer
            - "null"
        performance:
          oneOf:
            - $ref: "#/components/schemas/ProviderModelPerformanceDetail"
            - type: "null"
      required:
        - id
        - name
        - slug
        - pricing
        - context_window_tokens
        - performance
    ProviderModelPerformanceList:
      type: object
      properties:
        median_output_tokens_per_second:
          type:
            - number
            - "null"
        median_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_answer_token_seconds:
          type:
            - number
            - "null"
        median_end_to_end_response_time_seconds:
          type:
            - number
            - "null"
      required:
        - median_output_tokens_per_second
        - median_time_to_first_token_seconds
        - median_time_to_first_answer_token_seconds
        - median_end_to_end_response_time_seconds
      description: Median performance metrics returned on the providers list endpoint. Individual fields are null when no measurements are available for that metric.
    ProviderModelPerformanceDetail:
      type: object
      properties:
        median_output_tokens_per_second:
          type:
            - number
            - "null"
        median_time_to_first_token_seconds:
          type:
            - number
            - "null"
        percentile_05_output_tokens_per_second:
          type:
            - number
            - "null"
        percentile_95_output_tokens_per_second:
          type:
            - number
            - "null"
        quartile_25_output_tokens_per_second:
          type:
            - number
            - "null"
        quartile_75_output_tokens_per_second:
          type:
            - number
            - "null"
        percentile_05_time_to_first_token_seconds:
          type:
            - number
            - "null"
        percentile_95_time_to_first_token_seconds:
          type:
            - number
            - "null"
        quartile_25_time_to_first_token_seconds:
          type:
            - number
            - "null"
        quartile_75_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_answer_token_seconds:
          type:
            - number
            - "null"
        median_end_to_end_response_time_seconds:
          type:
            - number
            - "null"
      required:
        - median_output_tokens_per_second
        - median_time_to_first_token_seconds
        - percentile_05_output_tokens_per_second
        - percentile_95_output_tokens_per_second
        - quartile_25_output_tokens_per_second
        - quartile_75_output_tokens_per_second
        - percentile_05_time_to_first_token_seconds
        - percentile_95_time_to_first_token_seconds
        - quartile_25_time_to_first_token_seconds
        - quartile_75_time_to_first_token_seconds
        - median_time_to_first_answer_token_seconds
        - median_end_to_end_response_time_seconds
      description: Full performance metrics returned on the provider detail endpoint. Includes everything from the list endpoint plus percentile/quartile breakdowns. Individual fields are null when no measurements are available for that metric.
    PerformanceSnapshot:
      type: object
      properties:
        date:
          type: string
          description: Start date of this data point's period (YYYY-MM-DD).
        median_output_tokens_per_second:
          type:
            - number
            - "null"
        median_time_to_first_token_seconds:
          type:
            - number
            - "null"
        median_time_to_first_answer_token_seconds:
          type:
            - number
            - "null"
        median_end_to_end_response_time_seconds:
          type:
            - number
            - "null"
      required:
        - date
        - median_output_tokens_per_second
        - median_time_to_first_token_seconds
        - median_time_to_first_answer_token_seconds
        - median_end_to_end_response_time_seconds
      description: A single performance data point for a given date or interval period.
    ModelPerformanceOverTimeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - commercial
        data:
          type: object
          properties:
            id:
              type: string
            slug:
              type: string
            name:
              type: string
            providers:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                  slug:
                    type: string
                  name:
                    type: string
                  series:
                    type: array
                    items:
                      $ref: "#/components/schemas/PerformanceSnapshot"
                required:
                  - id
                  - slug
                  - name
                  - series
          required:
            - id
            - slug
            - name
            - providers
      required:
        - tier
        - data
    ProviderPerformanceOverTimeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - commercial
        data:
          type: object
          properties:
            id:
              type: string
            name:
              type: string
            slug:
              type: string
            models:
              type: array
              items:
                type: object
                properties:
                  id:
                    type: string
                  slug:
                    type: string
                  name:
                    type: string
                  series:
                    type: array
                    items:
                      $ref: "#/components/schemas/PerformanceSnapshot"
                required:
                  - id
                  - slug
                  - name
                  - series
          required:
            - id
            - name
            - slug
            - models
      required:
        - tier
        - data
    MeasurementsResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        data:
          type: object
          properties:
            id:
              type: string
            name:
              type: string
            slug:
              type: string
            models:
              type: array
              items:
                $ref: "#/components/schemas/MeasurementModel"
          required:
            - id
            - name
            - slug
            - models
      required:
        - tier
        - data
    MeasurementModel:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        measurements:
          type: array
          items:
            $ref: "#/components/schemas/Measurement"
      required:
        - id
        - name
        - slug
        - measurements
    Measurement:
      type: object
      properties:
        id:
          type: string
        date:
          type: string
          description: Timestamp when the measurement was recorded.
        success:
          type: boolean
        output_tokens_per_second:
          type:
            - number
            - "null"
        time_to_first_token_seconds:
          type:
            - number
            - "null"
        time_to_first_answer_token:
          type:
            - number
            - "null"
        end_to_end_response_time_seconds:
          type:
            - number
            - "null"
      required:
        - id
        - date
        - success
        - output_tokens_per_second
        - time_to_first_token_seconds
        - time_to_first_answer_token
        - end_to_end_response_time_seconds
    ArenaModelCreator:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
      required:
        - id
        - name
    ImageArenaResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/ImageArenaResult"
      required:
        - tier
        - data
    ImageArenaFreeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/ImageArenaResultFree"
      required:
        - tier
        - data
    ImageArenaResult:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
        rank:
          description: Rank among current models by Elo.
          type:
            - integer
            - "null"
        samples:
          type: integer
          description: Total number of arena samples.
        release_date:
          description: Release date.
          type:
            - string
            - "null"
        price_per_1k_images:
          description: Price per 1,000 images.
          type:
            - number
            - "null"
        open_weights_url:
          description: URL to open weights; can be used to infer if open weights.
          type:
            - string
            - "null"
        categories:
          type: array
          items:
            $ref: "#/components/schemas/ArenaCategory"
          description: Per-category Elo breakdowns. Only present when include_categories=true.
      required:
        - id
        - name
        - slug
        - model_creator
        - elo
        - ci_95
        - rank
        - samples
        - release_date
        - price_per_1k_images
        - open_weights_url
    ImageArenaResultFree:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - slug
        - model_creator
        - elo
        - ci_95
    VideoArenaResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/VideoArenaResultPaid"
      required:
        - tier
        - data
    VideoArenaFreeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/VideoArenaResultFree"
      required:
        - tier
        - data
    VideoArenaResultFree:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - slug
        - model_creator
        - elo
        - ci_95
    VideoArenaResultPaid:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
        rank:
          description: Rank among current models by Elo.
          type:
            - integer
            - "null"
        samples:
          type: integer
          description: Total number of arena samples.
        release_date:
          description: Release date.
          type:
            - string
            - "null"
        price_per_minute:
          description: Price per minute of video.
          type:
            - number
            - "null"
        open_weights_url:
          description: URL to open weights; can be used to infer if open weights.
          type:
            - string
            - "null"
        categories:
          type: array
          items:
            $ref: "#/components/schemas/ArenaCategory"
          description: Per-category Elo breakdowns. Only present when include_categories=true.
      required:
        - id
        - name
        - slug
        - model_creator
        - elo
        - ci_95
        - rank
        - samples
        - release_date
        - price_per_minute
        - open_weights_url
    ArenaCategory:
      type: object
      properties:
        label:
          type: string
          description: Category label.
        elo:
          type: number
        ci_95:
          type:
            - number
            - "null"
        samples:
          type: integer
      required:
        - label
        - elo
        - ci_95
        - samples
    TextToSpeechResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/TextToSpeechResult"
      required:
        - tier
        - data
    TextToSpeechFreeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/TextToSpeechResultFree"
      required:
        - tier
        - data
    TextToSpeechResult:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
        samples:
          type: integer
          description: Total number of arena samples.
        release_date:
          description: Release date.
          type:
            - string
            - "null"
        price_per_1m_characters:
          description: Price per 1 million characters.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - slug
        - model_creator
        - elo
        - ci_95
        - samples
        - release_date
        - price_per_1m_characters
    TextToSpeechResultFree:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - slug
        - model_creator
        - elo
        - ci_95
    SpeechToSpeechResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/SpeechToSpeechResult"
      required:
        - tier
        - data
    SpeechToSpeechFreeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/SpeechToSpeechResultFree"
      required:
        - tier
        - data
    SpeechToSpeechResult:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        bba_score:
          description: Big Bench Audio score.
          type:
            - number
            - "null"
        fdb_score:
          description: Full Duplex Bench score.
          type:
            - number
            - "null"
        tau_voice_score:
          description: 𝜏-Voice score (the model's best result across providers). Null when the model has no 𝜏-Voice measurements.
          type:
            - number
            - "null"
        providers:
          type: array
          items:
            $ref: "#/components/schemas/SpeechToSpeechProvider"
      required:
        - id
        - name
        - slug
        - model_creator
        - bba_score
        - fdb_score
        - tau_voice_score
        - providers
    SpeechToSpeechResultFree:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        bba_score:
          description: Big Bench Audio score.
          type:
            - number
            - "null"
        fdb_score:
          description: Full Duplex Bench score.
          type:
            - number
            - "null"
        tau_voice_score:
          description: 𝜏-Voice score (the model's best result across providers). Null when the model has no 𝜏-Voice measurements.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - slug
        - model_creator
        - bba_score
        - fdb_score
        - tau_voice_score
    SpeechToSpeechProvider:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        price_per_hour_input:
          description: Price per hour of input audio.
          type:
            - number
            - "null"
        price_per_hour_output:
          description: Price per hour of output audio.
          type:
            - number
            - "null"
        time_to_first_audio_seconds:
          description: Time to first audio output in seconds.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - slug
        - price_per_hour_input
        - price_per_hour_output
        - time_to_first_audio_seconds
    SpeechToTextModelsResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/SpeechToTextModelResult"
      required:
        - tier
        - data
    SpeechToTextModelsFreeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/SpeechToTextModelResultFree"
      required:
        - tier
        - data
    SpeechToTextModelResult:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        aa_wer_index:
          description: AA Word Error Rate index.
          type:
            - number
            - "null"
        aa_agenttalk:
          description: AA AgentTalk WER.
          type:
            - number
            - "null"
        voxpopuli_cleaned_aa:
          description: VoxPopuli cleaned WER.
          type:
            - number
            - "null"
        earnings_22_cleaned_aa:
          description: Earnings22 cleaned WER.
          type:
            - number
            - "null"
        open_weights:
          description: Whether the model has open weights. Null when unknown.
          type:
            - boolean
            - "null"
        providers:
          type: array
          items:
            $ref: "#/components/schemas/SpeechToTextProvider"
          description: Per-provider data.
      required:
        - id
        - name
        - model_creator
        - aa_wer_index
        - aa_agenttalk
        - voxpopuli_cleaned_aa
        - earnings_22_cleaned_aa
        - open_weights
        - providers
    SpeechToTextModelResultFree:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        aa_wer_index:
          description: AA Word Error Rate index.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - model_creator
        - aa_wer_index
    SpeechToTextProvider:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        slug:
          type: string
        price_per_1k_minutes:
          type:
            - number
            - "null"
        median_speed_factor:
          type:
            - number
            - "null"
        aa_wer_index:
          type:
            - number
            - "null"
        aa_agenttalk:
          type:
            - number
            - "null"
        voxpopuli_cleaned_aa:
          type:
            - number
            - "null"
        earnings_22_cleaned_aa:
          type:
            - number
            - "null"
      required:
        - id
        - name
        - slug
        - price_per_1k_minutes
        - median_speed_factor
        - aa_wer_index
        - aa_agenttalk
        - voxpopuli_cleaned_aa
        - earnings_22_cleaned_aa
    MusicArenaResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/MusicArenaResult"
      required:
        - tier
        - data
    MusicArenaFreeResponse:
      type: object
      properties:
        tier:
          type: string
          enum:
            - free
            - pro
            - commercial
        data:
          type: array
          items:
            $ref: "#/components/schemas/MusicArenaResultFree"
      required:
        - tier
        - data
    MusicArenaResult:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
        samples:
          type: integer
          description: Total number of arena samples.
        genres:
          type: array
          items:
            $ref: "#/components/schemas/MusicGenre"
          description: Per-genre Elo breakdowns. Only present when include_genres=true.
      required:
        - id
        - name
        - model_creator
        - elo
        - ci_95
        - samples
    MusicArenaResultFree:
      type: object
      properties:
        id:
          type: string
        name:
          type: string
        model_creator:
          $ref: "#/components/schemas/ArenaModelCreator"
        elo:
          type: number
          description: Arena Elo rating.
        ci_95:
          description: 95% confidence interval. Null if unavailable.
          type:
            - number
            - "null"
      required:
        - id
        - name
        - model_creator
        - elo
        - ci_95
    MusicGenre:
      type: object
      properties:
        label:
          type: string
          description: Genre name (e.g. "Classical", "Electronic", "Pop").
        elo:
          type: number
        ci_95:
          type:
            - number
            - "null"
        samples:
          type: integer
      required:
        - label
        - elo
        - ci_95
        - samples
