curl "https://api.ornnai.com/api/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21" \
-H "Authorization: Bearer YOUR_API_KEY"import requests
resp = requests.get(
"https://api.ornnai.com/api/llm-coding/history",
params={"product": "cc-vs-codex", "startDate": "2026-05-01", "endDate": "2026-06-21"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
series = resp.json()["data"] # oldest first
const url = "https://api.ornnai.com/api/llm-coding/history"
+ "?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21";
const res = await fetch(url, {
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();
<?php
$url = "https://api.ornnai.com/api/llm-coding/history"
. "?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
]);
$data = json_decode(curl_exec($ch), true);
package main
import (
"io"
"net/http"
)
func main() {
endpoint := "https://api.ornnai.com/api/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21"
req, _ := http.NewRequest("GET", endpoint, nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
_ = body
}
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/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21"))
.header("Authorization", "Bearer YOUR_API_KEY")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
require "net/http"
require "json"
uri = URI("https://api.ornnai.com/api/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21")
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)
{
"success": true,
"product": "copilot-merge",
"compare": false,
"access": "public-3mo",
"data": [
{
"date": "2026-01-01",
"value": 70
},
{
"date": "2026-01-02",
"value": 70
}
]
}Get the daily history for an LLM coding product
Daily history for an LLM coding-activity index, oldest first. Requires an API key — LLM coding analytics have no free tier. Note this is a coding-activity index, not one of the public token price indices (those are OTPI, under /api/otpi). Single-tool products return rows with a single value; compare products return rows with both value and value2, ordered to match seriesLabels. Pass startDate and endDate (YYYY-MM-DD, inclusive) to bound the window. limit caps the row count (default 2000). An unknown product returns 400; a valid product with no rows in the window returns 200 with an empty data array (this endpoint never returns 404).
curl "https://api.ornnai.com/api/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21" \
-H "Authorization: Bearer YOUR_API_KEY"import requests
resp = requests.get(
"https://api.ornnai.com/api/llm-coding/history",
params={"product": "cc-vs-codex", "startDate": "2026-05-01", "endDate": "2026-06-21"},
headers={"Authorization": "Bearer YOUR_API_KEY"},
)
series = resp.json()["data"] # oldest first
const url = "https://api.ornnai.com/api/llm-coding/history"
+ "?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21";
const res = await fetch(url, {
headers: { Authorization: "Bearer YOUR_API_KEY" },
});
const { data } = await res.json();
<?php
$url = "https://api.ornnai.com/api/llm-coding/history"
. "?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21";
$ch = curl_init($url);
curl_setopt_array($ch, [
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ["Authorization: Bearer YOUR_API_KEY"],
]);
$data = json_decode(curl_exec($ch), true);
package main
import (
"io"
"net/http"
)
func main() {
endpoint := "https://api.ornnai.com/api/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21"
req, _ := http.NewRequest("GET", endpoint, nil)
req.Header.Set("Authorization", "Bearer YOUR_API_KEY")
resp, _ := http.DefaultClient.Do(req)
defer resp.Body.Close()
body, _ := io.ReadAll(resp.Body)
_ = body
}
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/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21"))
.header("Authorization", "Bearer YOUR_API_KEY")
.build();
HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
require "net/http"
require "json"
uri = URI("https://api.ornnai.com/api/llm-coding/history?product=cc-vs-codex&startDate=2026-05-01&endDate=2026-06-21")
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)
{
"success": true,
"product": "copilot-merge",
"compare": false,
"access": "public-3mo",
"data": [
{
"date": "2026-01-01",
"value": 70
},
{
"date": "2026-01-02",
"value": 70
}
]
}Overview
Daily history for an LLM coding-activity index, oldest first. Requires an API key - LLM coding analytics have no free tier. Note this is a coding-activity index, not one of the public token price indices (those are OTPI, under/api/otpi). Single-tool products return rows with a single value; compare products return rows with both value and value2, ordered to match seriesLabels. Pass startDate and endDate (YYYY-MM-DD, inclusive) to bound the window. limit caps the row count (default 2000). An unknown product returns 400; a valid product with no rows in the window returns 200 with an empty data array (this endpoint never returns 404).Authorizations
API key passed as a Bearer token. Create one in the dashboard.
Query Parameters
A product ID, including the cc-vs-* compare products. See /api/llm-coding/products.
"cc-vs-codex"
Inclusive start of the date window (YYYY-MM-DD). Reaches as far back as data exists.
"2026-05-01"
Inclusive end of the date window (YYYY-MM-DD). Use with startDate.
"2026-06-21"
Maximum number of daily rows to return. Positive integer, no upper cap. For compare products this is the underlying row cap before pivoting to one row per date.
x >= 1Response
Daily series for the product, oldest first. A valid product with no rows in the requested window returns an empty data array.

