GPU Rental Indexes: As Of
Published GPU price indices, daily and intraday, one index per request.
Returns the same view as /latest, as it stood at the moment you pass in at. Give it a date or a full timestamp; a plain date means the end of that day.
If nothing was published at that exact moment — a weekend, a holiday, a gap in a vendor’s feed — you get the most recent value before it, rather than an empty response.
A date earlier than your licensed history is rejected rather than quietly moved forward, so you are never handed an answer to a different question.
curl --request GET \
--url https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of \
--header 'Authorization: Bearer <token>'import requests
url = "https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "example-index",
"type": "daily",
"timestamp": "2026-09-02",
"value": 2.18,
"p5": 1.9,
"p95": 2.55
}
],
"meta": {
"page_size": 100,
"returned": 100,
"has_more": true,
"next": {
"path": "/v2/gpu/rental/prices/history",
"query_params": {
"page_size": "100",
"page_token": "eyJkIjoicHJpY2VzIiwiZSI6Imhpc3RvcnkiLC4uLg.qgLm5w"
},
"url": "https://data-api.compute-index.com/v2/gpu/rental/prices/history?page_token=eyJkIjoicHJpY2VzIiwiZSI6Imhpc3RvcnksLi4u.qgLm5w&page_size=100"
},
"sort": {
"by": "valid_from",
"order": "desc"
},
"as_of": "2026-06-15T00:00:00+00:00",
"source": "compute-index"
}
}{
"status": 401,
"title": "Unauthorized",
"detail": "Missing or invalid bearer token.",
"code": "unauthenticated",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 403,
"title": "Forbidden",
"detail": "The token does not carry the scopes this endpoint requires.",
"code": "insufficient_entitlement",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 404,
"title": "Not Found",
"detail": "No such resource, or none you are entitled to see.",
"code": "not_found",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 422,
"title": "Unprocessable Content",
"detail": "A parameter failed validation.",
"code": "validation_failed",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 429,
"title": "Too Many Requests",
"detail": "Rate limit exceeded; see the X-RateLimit-* headers.",
"code": "rate_limited",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}id is required; /metadata
lists the ids your token holds, and an id you do not hold returns 404.source is changing. Indices administered by General Index currently default to
gx. Soon every index will default to compute-index. If you want General Index’s published
values, set source=gx explicitly on your requests, and the change will not affect you. See
Choosing a source./metadata as
history_starts_at.at to its UTC calendar date and answers with the most recent published
day on or before it; an intraday index answers with the last completed interval at or before the
instant. Either way a non-publication moment carries back rather than returning nothing.Example
curl -H "Authorization: Bearer $TOKEN" \
"https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of?id=rental-h100-1y-us-daily&at=2026-06-01"
Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Query Parameters
Point in time (ISO 8601 datetime, UTC assumed if no offset) or a bare date. A bare date means the end of that day (23:59:59.999999 UTC) — 'as of June 1st' includes June 1st. Returns the records that were valid at exactly the resolved instant.
"2026-06-01T12:00:00Z"
"2026-06-01"
The index to read. The ids available to you are listed by /metadata; an id you do not hold is a 404, identical to one that does not exist.
"example-index"
Who computes the series you read: gx or compute-index. Omit it for the index's default. /metadata lists the values each index accepts; any other is a 400. A GX-administered index's history may begin later than ours, so an early window can be empty from gx and not from compute-index.
"compute-index"
Extra fields to include on each row, comma-separated. /metadata lists the ones each index offers you; any other is a 400. Each is added to the row as a field of its own, null on points from gx.
"unsmoothed_value"
Sort field. One of: timestamp, value. Default: timestamp.
Sort direction: asc or desc. Default: asc.
Rows per page (max 1000).
1 <= x <= 1000Opaque token token from a previous response's meta.next. It carries the whole request — filters, ordering, window and position — so supply it alone; the only parameter that may accompany it is page_size. Do not construct or parse these; the format is not part of the contract.
Response
Successful Response
The rows in this page, ordered as meta.sort reports.
One published day of a daily index.
Any extra fields you request with extra_fields are further top-level fields of the row, named as
/metadata lists them, and present only when requested. Each is a number, or null on a point from gx.
- DailyIndexRow
- IntradayIndexRow
Show child attributes
Show child attributes
/as-of, which additionally echoes the instant it resolved.
source names who computed the rows in this page.
Show child attributes
Show child attributes
curl --request GET \
--url https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of \
--header 'Authorization: Bearer <token>'import requests
url = "https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of', options)
.then(res => res.json())
.then(res => console.log(res))
.catch(err => console.error(err));<?php
$curl = curl_init();
curl_setopt_array($curl, [
CURLOPT_URL => "https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of",
CURLOPT_RETURNTRANSFER => true,
CURLOPT_ENCODING => "",
CURLOPT_MAXREDIRS => 10,
CURLOPT_TIMEOUT => 30,
CURLOPT_HTTP_VERSION => CURL_HTTP_VERSION_1_1,
CURLOPT_CUSTOMREQUEST => "GET",
CURLOPT_HTTPHEADER => [
"Authorization: Bearer <token>"
],
]);
$response = curl_exec($curl);
$err = curl_error($curl);
curl_close($curl);
if ($err) {
echo "cURL Error #:" . $err;
} else {
echo $response;
}package main
import (
"fmt"
"net/http"
"io"
)
func main() {
url := "https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of"
req, _ := http.NewRequest("GET", url, nil)
req.Header.Add("Authorization", "Bearer <token>")
res, _ := http.DefaultClient.Do(req)
defer res.Body.Close()
body, _ := io.ReadAll(res.Body)
fmt.Println(string(body))
}HttpResponse<String> response = Unirest.get("https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://data-api.compute-index.com/v2/gpu/rental/indexes/as-of")
http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true
request = Net::HTTP::Get.new(url)
request["Authorization"] = 'Bearer <token>'
response = http.request(request)
puts response.read_body{
"data": [
{
"id": "example-index",
"type": "daily",
"timestamp": "2026-09-02",
"value": 2.18,
"p5": 1.9,
"p95": 2.55
}
],
"meta": {
"page_size": 100,
"returned": 100,
"has_more": true,
"next": {
"path": "/v2/gpu/rental/prices/history",
"query_params": {
"page_size": "100",
"page_token": "eyJkIjoicHJpY2VzIiwiZSI6Imhpc3RvcnkiLC4uLg.qgLm5w"
},
"url": "https://data-api.compute-index.com/v2/gpu/rental/prices/history?page_token=eyJkIjoicHJpY2VzIiwiZSI6Imhpc3RvcnksLi4u.qgLm5w&page_size=100"
},
"sort": {
"by": "valid_from",
"order": "desc"
},
"as_of": "2026-06-15T00:00:00+00:00",
"source": "compute-index"
}
}{
"status": 401,
"title": "Unauthorized",
"detail": "Missing or invalid bearer token.",
"code": "unauthenticated",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 403,
"title": "Forbidden",
"detail": "The token does not carry the scopes this endpoint requires.",
"code": "insufficient_entitlement",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 404,
"title": "Not Found",
"detail": "No such resource, or none you are entitled to see.",
"code": "not_found",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 422,
"title": "Unprocessable Content",
"detail": "A parameter failed validation.",
"code": "validation_failed",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}{
"status": 429,
"title": "Too Many Requests",
"detail": "Rate limit exceeded; see the X-RateLimit-* headers.",
"code": "rate_limited",
"request_id": "01JQ2X8N4T6V9WZ0ABCD"
}