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

# Get the Effective Utilization Index history

> The daily Effective Utilization Index series. Each row carries occupancy, the effective utilization rate, the index level, the market price, the price per useful GPU-hour, revenue per available GPU-hour, and the demand/supply decomposition **against the previous published day**.
`demandEffect` and `supplyEffect` sum exactly to `occupancyChange`, which is the point: occupancy rising because buyers took more GPUs is a different market from occupancy rising because a provider withdrew capacity, and a headline rate cannot tell them apart.
Days with fewer than 24 readings are omitted from the series and are not used as a decomposition baseline, so a scrape gap cannot manufacture a demand spike on the following day. The window defaults to the trailing 30 days and is capped at 400 days.


## Overview

The daily Effective Utilization Index series, with each day's move decomposed into
a demand effect and a supply effect that sum exactly to the observed change.

That decomposition is the reason to read this series rather than a plain
utilization rate: occupancy rising because buyers took more GPUs is a different
market from occupancy rising because a provider withdrew capacity.

See the [Effective Utilization Index](/docs/utilization-index) concept page for the
methodology.


## OpenAPI

````yaml openapi.yaml GET /api/utilization-index/history
openapi: 3.1.0
info:
  title: Ornn Data API
  version: 1.0.0
  description: >
    Read-only REST API for GPU and memory market data. The price index is the
    going rate of compute in USD per GPU-hour, a weighted average of all
    verified compute transactions across the market.
servers:
  - url: https://api.ornnai.com
security:
  - bearerAuth: []
tags:
  - name: Current Prices
  - name: Historical Prices
  - name: Analytics
  - name: Memory
  - name: Token Prices
  - name: Workload Cost
  - name: LLM Coding
  - name: Neo-Cloud Sites
  - name: Reference
paths:
  /api/utilization-index/history:
    get:
      tags:
        - Analytics
      summary: Get the Effective Utilization Index history
      description: >
        The daily Effective Utilization Index series. Each row carries
        occupancy, the effective utilization rate, the index level, the market
        price, the price per useful GPU-hour, revenue per available GPU-hour,
        and the demand/supply decomposition **against the previous published
        day**.

        `demandEffect` and `supplyEffect` sum exactly to `occupancyChange`,
        which is the point: occupancy rising because buyers took more GPUs is a
        different market from occupancy rising because a provider withdrew
        capacity, and a headline rate cannot tell them apart.

        Days with fewer than 24 readings are omitted from the series and are not
        used as a decomposition baseline, so a scrape gap cannot manufacture a
        demand spike on the following day. The window defaults to the trailing
        30 days and is capped at 400 days.
      parameters:
        - name: gpuType
          in: query
          description: >-
            Restrict to a single GPU model. Defaults to every public model,
            aggregated.
          schema:
            type: string
            enum:
              - H100 SXM
              - H200
              - A100 SXM4
              - B200
              - RTX 5090
              - RTX PRO 6000 WS
        - name: region
          in: query
          description: Occupancy region. Defaults to `global`.
          schema:
            type: string
            example: global
        - name: startDate
          in: query
          description: >-
            Inclusive start of the window in YYYY-MM-DD. Defaults to 29 days
            before `endDate`.
          schema:
            type: string
            example: '2026-07-01'
        - name: endDate
          in: query
          description: Inclusive end of the window in YYYY-MM-DD. Defaults to today.
          schema:
            type: string
            example: '2026-08-12'
        - name: baseDate
          in: query
          description: Rebase anchor for the index level. Defaults to 2026-01-01.
          schema:
            type: string
            example: '2026-01-01'
      responses:
        '200':
          description: Daily Effective Utilization Index rows for the requested window.
          content:
            application/json:
              example:
                success: true
                startDate: '2026-08-10'
                endDate: '2026-08-12'
                region: global
                gpuTypes:
                  - H100 SXM
                baseDate: '2026-01-01'
                baseAvailable: true
                intensitySource: unavailable
                count: 3
                data:
                  - date: '2026-08-10'
                    occupancy: 0.3702
                    intensity: null
                    eur: 0.3702
                    basis: occupancy_only
                    index: 100.3
                    price: 2.47
                    effectivePrice: 6.6721
                    revPag: 0.9144
                    priceCoverage: 1
                    capacity: 12416
                    rented: 4596.4
                    demandEffect: null
                    supplyEffect: null
                    occupancyChange: null
                    decompositionBasis: no_prior_day
                    comparable: false
                    reportingTypes: 1
                    coverage: 1
                    readings: 24
                  - date: '2026-08-11'
                    occupancy: 0.3894
                    intensity: null
                    eur: 0.3894
                    basis: occupancy_only
                    index: 105.5
                    price: 2.48
                    effectivePrice: 6.3688
                    revPag: 0.9657
                    priceCoverage: 1
                    capacity: 12480
                    rented: 4859.7
                    demandEffect: 0.0212
                    supplyEffect: -0.002
                    occupancyChange: 0.0192
                    decompositionBasis: like_for_like
                    comparable: true
                    reportingTypes: 1
                    coverage: 1
                    readings: 24
                  - date: '2026-08-12'
                    occupancy: 0.4012
                    intensity: null
                    eur: 0.4012
                    basis: occupancy_only
                    index: 108.7
                    price: 2.49
                    effectivePrice: 6.2064
                    revPag: 0.999
                    priceCoverage: 1
                    capacity: 12544
                    rented: 5032.6
                    demandEffect: 0.0139
                    supplyEffect: -0.0021
                    occupancyChange: 0.0118
                    decompositionBasis: like_for_like
                    comparable: true
                    reportingTypes: 1
                    coverage: 1
                    readings: 24
        '400':
          $ref: '#/components/responses/BadRequest'
        '401':
          $ref: '#/components/responses/Unauthorized'
        '404':
          $ref: '#/components/responses/NotFound'
      x-codeSamples:
        - lang: bash
          label: cURL
          source: >
            curl
            "https://api.ornnai.com/api/utilization-index/history?gpuType=H100%20SXM&startDate=2026-07-01&endDate=2026-08-12"
            \
              -H "Authorization: Bearer YOUR_API_KEY"
        - lang: python
          label: Python
          source: |
            import requests

            rows = requests.get(
                "https://api.ornnai.com/api/utilization-index/history",
                params={"gpuType": "H100 SXM", "startDate": "2026-07-01", "endDate": "2026-08-12"},
                headers={"Authorization": "Bearer YOUR_API_KEY"},
            ).json()["data"]
            for r in rows:
                print(r["date"], r["occupancy"], r["effectivePrice"], r["demandEffect"])
        - lang: javascript
          label: JavaScript
          source: |
            const res = await fetch(
              "https://api.ornnai.com/api/utilization-index/history?gpuType=H100%20SXM&startDate=2026-07-01&endDate=2026-08-12",
              { headers: { Authorization: "Bearer YOUR_API_KEY" } },
            );
            const { data } = await res.json();
        - lang: php
          label: PHP
          source: >
            <?php

            $ch =
            curl_init("https://api.ornnai.com/api/utilization-index/history?gpuType=H100%20SXM&startDate=2026-07-01&endDate=2026-08-12");

            curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => true,
                CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
            ]);

            $data = json_decode(curl_exec($ch), true);
        - lang: go
          label: Go
          source: "package main\n\nimport (\n\t\"io\"\n\t\"net/http\"\n)\n\nfunc main() {\n\tendpoint := \"https://api.ornnai.com/api/utilization-index/history?gpuType=H100%20SXM&startDate=2026-07-01&endDate=2026-08-12\"\n\treq, _ := http.NewRequest(\"GET\", endpoint, nil)\n\treq.Header.Set(\"Authorization\", \"Bearer YOUR_API_KEY\")\n\tresp, _ := http.DefaultClient.Do(req)\n\tdefer resp.Body.Close()\n\tbody, _ := io.ReadAll(resp.Body)\n\t_ = body\n}\n"
        - lang: java
          label: Java
          source: >
            import java.net.URI;

            import java.net.http.HttpClient;

            import java.net.http.HttpRequest;

            import java.net.http.HttpResponse;


            HttpClient client = HttpClient.newHttpClient();

            HttpRequest request = HttpRequest.newBuilder(
                    URI.create("https://api.ornnai.com/api/utilization-index/history?gpuType=H100%20SXM&startDate=2026-07-01&endDate=2026-08-12"))
                .header("Authorization", "Bearer YOUR_API_KEY")
                .build();
            HttpResponse<String> response = client.send(request,
            HttpResponse.BodyHandlers.ofString());
        - lang: ruby
          label: Ruby
          source: >
            require "net/http"

            require "json"


            uri =
            URI("https://api.ornnai.com/api/utilization-index/history?gpuType=H100%20SXM&startDate=2026-07-01&endDate=2026-08-12")

            req = Net::HTTP::Get.new(uri)

            req["Authorization"] = "Bearer YOUR_API_KEY"

            res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) {
            |http| http.request(req) }

            data = JSON.parse(res.body)
components:
  responses:
    BadRequest:
      description: A required parameter is missing or invalid.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
    Unauthorized:
      description: Missing, invalid, or revoked API key.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: Unauthorized
            message: 'API key required. Use Authorization: Bearer YOUR_API_KEY'
    NotFound:
      description: No data found for the given parameters.
      content:
        application/json:
          schema:
            $ref: '#/components/schemas/Error'
          example:
            error: No data available
            message: No daily index data found for H100 SXM
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          example: Bad request
        message:
          type: string
          example: >-
            Invalid GPU type. Allowed: H100 SXM, H200, A100 SXM4, RTX 5090,
            B200, RTX PRO 6000 WS
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key passed as a Bearer token. Create one in the dashboard.

````