> ## 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 published forward curve

> The published GPU forward curve: current marks only. A `sk_prem_` key receives five curves (H100 SXM, H200, A100 SXM4, B200, RTX PRO 6000 WS). B300, GB200, and GB300 require a Full / Enterprise `sk_live_` key. `data` carries the curves with at least one published mark; `suppressed` carries fully unmarked curves, whose points have a null `price` and a machine-readable `insufficient_data` reason. Each published point includes provenance and its mark edit or publish time, and `asOf` is the most recent mark timestamp in the response. Marks are hand-published rather than settled on a cadence, so responses change only when a mark does. Historical marks are not available on the customer API.


## Overview

The published GPU forward curve: current marks only. A `sk_prem_` key receives the five standard curves (H100 SXM, H200, A100 SXM4, B200, RTX PRO 6000 WS). B300, GB200, and GB300 require a Full / Enterprise key (`sk_live_`). `data` carries the curves with at least one published mark; `suppressed` carries the fully unmarked curves, whose points have a null `price` and a machine-readable `insufficient_data` reason - the service never interpolates, carries forward, or fills a missing mark with a default. Each published point includes provenance and its mark edit or publish time, and `asOf` is the most recent mark timestamp in the response.

Each `price` is a term mark: the flat reserved-contract rate of that tenor. The implied forward is not a separate API field; it is those term contracts layered (the leftover rate between neighbouring tenors). How that layering is written down, and that the curve does not adjust reserved quotes for financing or other commitment discounts, is on [Forward Curves](/docs/forward-curves).

Marks are hand-published rather than settled on a cadence, so responses change only when a mark does. Historical marks are not available on the customer API. Requires an API key - there is no free tier; the website catalog shows the curve products without a marks API.


## OpenAPI

````yaml openapi.yaml GET /api/forward
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: Forward Curves
  - name: Token Volume
  - name: Model Frontier
  - name: Compute Buyers
  - name: Power Markets
  - name: Neo-Cloud Sites
  - name: Reference
paths:
  /api/forward:
    get:
      tags:
        - Forward Curves
      summary: Get the published forward curve
      description: >
        The published GPU forward curve: current marks only. A `sk_prem_` key
        receives five curves (H100 SXM, H200, A100 SXM4, B200, RTX PRO 6000 WS).
        B300, GB200, and GB300 require a Full / Enterprise `sk_live_` key.
        `data` carries the curves with at least one published mark; `suppressed`
        carries fully unmarked curves, whose points have a null `price` and a
        machine-readable `insufficient_data` reason. Each published point
        includes provenance and its mark edit or publish time, and `asOf` is the
        most recent mark timestamp in the response. Marks are hand-published
        rather than settled on a cadence, so responses change only when a mark
        does. Historical marks are not available on the customer API.
      responses:
        '200':
          description: >-
            Published curves, suppressed coverage, and the freshest mark
            timestamp.
          content:
            application/json:
              example:
                success: true
                asOf: '2026-08-19T00:00:00.000Z'
                data:
                  - name: H100 SXM
                    data:
                      - label: 1M
                        months: 1
                        price: 2.44
                        has_mark: true
                        provenance:
                          source: hand_entered_mark
                          updated_at: '2026-08-19T00:00:00.000Z'
                          sample_count: null
                        as_of_date: '2026-08-19T00:00:00.000Z'
                        insufficient_data: null
                      - label: 6M
                        months: 6
                        price: null
                        has_mark: false
                        provenance: null
                        as_of_date: null
                        insufficient_data: no_observation
                suppressed:
                  - name: GB200
                    data:
                      - label: 1M
                        months: 1
                        price: null
                        has_mark: false
                        provenance: null
                        as_of_date: null
                        insufficient_data: no_observation
        '401':
          $ref: '#/components/responses/Unauthorized'
      x-codeSamples:
        - lang: bash
          label: cURL
          source: |
            curl "https://api.ornnai.com/api/forward" \
              -H "Authorization: Bearer YOUR_API_KEY"
        - lang: python
          label: Python
          source: |
            import requests

            payload = requests.get(
                "https://api.ornnai.com/api/forward",
                headers={"Authorization": "Bearer YOUR_API_KEY"},
            ).json()
            for curve in payload["data"]:
                for point in curve["data"]:
                    print(curve["name"], point["label"], point["price"])
        - lang: javascript
          label: JavaScript
          source: |
            const res = await fetch("https://api.ornnai.com/api/forward", {
              headers: { Authorization: "Bearer YOUR_API_KEY" },
            });
            const { data, suppressed, asOf } = await res.json();
        - lang: php
          label: PHP
          source: |
            <?php
            $ch = curl_init("https://api.ornnai.com/api/forward");
            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/forward\"\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/forward"))
                .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/forward")

            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:
    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'
  schemas:
    Error:
      type: object
      properties:
        error:
          type: string
          example: Bad request
        message:
          type: string
          example: >-
            Invalid GPU type. Allowed: H100 SXM, H200, A100 SXM4, B200, RTX PRO
            6000 WS
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: API key passed as a Bearer token. Create one in the dashboard.

````

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