Get card prices
curl --request GET \
--url https://api.cromos.so/v1/cards/{id}/prices \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cromos.so/v1/cards/{id}/prices"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cromos.so/v1/cards/{id}/prices', 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://api.cromos.so/v1/cards/{id}/prices",
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://api.cromos.so/v1/cards/{id}/prices"
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://api.cromos.so/v1/cards/{id}/prices")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cromos.so/v1/cards/{id}/prices")
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": {
"from": "2026-05-24",
"to": "2026-08-22",
"variants": [
{
"variant": {
"type": "holo",
"subtype": null,
"size": "standard",
"stamps": [],
"foil": null
},
"prices": [
{
"grade": "bgs10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 600000
},
{
"observed_on": "2026-08-21",
"price": 600000
},
{
"observed_on": "2026-08-22",
"price": 600000
}
]
},
{
"grade": "cgc10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 72261
},
{
"observed_on": "2026-08-21",
"price": 72261
},
{
"observed_on": "2026-08-22",
"price": 72261
}
]
},
{
"grade": "grade7",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 31500
},
{
"observed_on": "2026-08-21",
"price": 31500
},
{
"observed_on": "2026-08-22",
"price": 31500
}
]
},
{
"grade": "grade8",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 34356
},
{
"observed_on": "2026-08-21",
"price": 34356
},
{
"observed_on": "2026-08-22",
"price": 34356
}
]
},
{
"grade": "grade9",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 39950
},
{
"observed_on": "2026-08-21",
"price": 39950
},
{
"observed_on": "2026-08-22",
"price": 39950
}
]
},
{
"grade": "grade95",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 68000
},
{
"observed_on": "2026-08-21",
"price": 68000
},
{
"observed_on": "2026-08-22",
"price": 68000
}
]
},
{
"grade": "psa10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 149300
},
{
"observed_on": "2026-08-21",
"price": 149300
},
{
"observed_on": "2026-08-22",
"price": 149300
}
]
},
{
"grade": "sgc10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 63339
},
{
"observed_on": "2026-08-21",
"price": 63339
},
{
"observed_on": "2026-08-22",
"price": 63339
}
]
},
{
"grade": "ungraded",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 36118
},
{
"observed_on": "2026-08-21",
"price": 36118
},
{
"observed_on": "2026-08-22",
"price": 36118
}
]
}
]
}
]
},
"error": null
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}Cards
Get card prices
Daily price history for every printing of a card.
GET
/
v1
/
cards
/
{id}
/
prices
Get card prices
curl --request GET \
--url https://api.cromos.so/v1/cards/{id}/prices \
--header 'Authorization: Bearer <token>'import requests
url = "https://api.cromos.so/v1/cards/{id}/prices"
headers = {"Authorization": "Bearer <token>"}
response = requests.get(url, headers=headers)
print(response.text)const options = {method: 'GET', headers: {Authorization: 'Bearer <token>'}};
fetch('https://api.cromos.so/v1/cards/{id}/prices', 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://api.cromos.so/v1/cards/{id}/prices",
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://api.cromos.so/v1/cards/{id}/prices"
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://api.cromos.so/v1/cards/{id}/prices")
.header("Authorization", "Bearer <token>")
.asString();require 'uri'
require 'net/http'
url = URI("https://api.cromos.so/v1/cards/{id}/prices")
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": {
"from": "2026-05-24",
"to": "2026-08-22",
"variants": [
{
"variant": {
"type": "holo",
"subtype": null,
"size": "standard",
"stamps": [],
"foil": null
},
"prices": [
{
"grade": "bgs10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 600000
},
{
"observed_on": "2026-08-21",
"price": 600000
},
{
"observed_on": "2026-08-22",
"price": 600000
}
]
},
{
"grade": "cgc10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 72261
},
{
"observed_on": "2026-08-21",
"price": 72261
},
{
"observed_on": "2026-08-22",
"price": 72261
}
]
},
{
"grade": "grade7",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 31500
},
{
"observed_on": "2026-08-21",
"price": 31500
},
{
"observed_on": "2026-08-22",
"price": 31500
}
]
},
{
"grade": "grade8",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 34356
},
{
"observed_on": "2026-08-21",
"price": 34356
},
{
"observed_on": "2026-08-22",
"price": 34356
}
]
},
{
"grade": "grade9",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 39950
},
{
"observed_on": "2026-08-21",
"price": 39950
},
{
"observed_on": "2026-08-22",
"price": 39950
}
]
},
{
"grade": "grade95",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 68000
},
{
"observed_on": "2026-08-21",
"price": 68000
},
{
"observed_on": "2026-08-22",
"price": 68000
}
]
},
{
"grade": "psa10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 149300
},
{
"observed_on": "2026-08-21",
"price": 149300
},
{
"observed_on": "2026-08-22",
"price": 149300
}
]
},
{
"grade": "sgc10",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 63339
},
{
"observed_on": "2026-08-21",
"price": 63339
},
{
"observed_on": "2026-08-22",
"price": 63339
}
]
},
{
"grade": "ungraded",
"currency": "USD",
"history": [
{
"observed_on": "2026-08-20",
"price": 36118
},
{
"observed_on": "2026-08-21",
"price": 36118
},
{
"observed_on": "2026-08-22",
"price": 36118
}
]
}
]
}
]
},
"error": null
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}{
"data": {},
"error": {
"code": "<string>",
"message": "<string>"
}
}Every printing gets its own price history, and inside a printing you get one USD history per
grade tier. A holo Charizard returns an
A series starts at its first observation, so a printing first priced part way through the window
returns fewer points than the table shows. Read the count off the response rather than assuming
it.
ungraded series alongside a psa10 one for that same
printing rather than a single history. See the card object for what separates a
printing from a grade.
ungraded is the tier to chart for a raw card. There is no condition axis: an ungraded
price folds every condition into one figure, so nothing here asks what state a copy is in.
The window defaults to the last 90 days. Pass from and to as YYYY-MM-DD for a different
one, up to 366 days wide. A window that is malformed, inverted, or wider than that is a 400,
not an empty result. The full history stays reachable one bounded window at a time.
Charting a range
Passrange instead of from and to to get a series ready to plot. Each preset ends today.
range | Window | Points at most |
|---|---|---|
1W | 7 days | 7 |
1M | 30 days | 30 |
3M | 90 days | 90 |
6M | 180 days | 180 |
1Y | 365 days | 365 |
range and from/to are alternatives. Sending both is a 400.
Filling the gaps
A price is recorded only on the days it moved, so a printing that held steady all month has one underlying reading rather than thirty. Plotted directly that reads as missing data even though the price is known for every day. The response carries one point per day regardless: a day the price did not move carries the last price observed before it. A printing that has not moved inside the window is still a full series rather than dropping out of the response.Where a series starts
A series begins on its own first observation and never earlier, even whenfrom reaches further
back. A price is not carried backwards to fill a window that starts before this printing was
first seen: a flat line across days nothing was ever observed on reads as a market that did not
move, which is a different claim from having no reading at all.
That start date is the field to check when a chart looks shorter than the window asked for. Two
tiers of the same printing can start on different days: a raw copy sells often enough to be
priced continuously, while a graded one may first appear months later.Authorizations
Bearer authentication header of the form Bearer <token>, where <token> is your auth token.
Path Parameters
Query Parameters
A window ending today: 1W, 1M, 3M, 6M or 1Y. An alternative to from and to, and sending both is a 400.