Skip to content
Prepaid, no subscription trap. Top up a balance and we draw the monthly fee from it.
tcggraph

Get price history

One quote over time: a marketplace series, or a graded slot.

GEThttps://api.tcggraph.com/v1/prices/{cardId}/history3 credits · metering

Points are dense. Prices are stored when they move, and every day carries the last reading forward, including one from before from, so a flat run is a price that did not change, not missing data. A card first priced inside the range starts on that day, so count can be lower than the days asked for; a card never priced on the series returns no points.

Amounts are in major units of the source's currency: market and low on a marketplace series, price on a graded one.

Path parameters

ParameterTypeDescription
cardIdrequiredstringA card id. An id retired by a set re-key keeps working and is reported in meta.movedFrom.

Query parameters

Any other query parameter is a 400 naming it and listing these, so a misspelt one is never silently ignored. api_key is accepted on every endpoint as an alternative to the header.

ParameterTypeDescription
sourcestringThe marketplace. Case-insensitive.

One of: cardmarket, tcgplayer, cardkingdom, manapool

Default: cardmarket

finishstringWhich printing's series. Without it: the finish of the card's current retail quote on source, else the finish with the most history, else normal. meta.finishes lists every series the source holds for the card.

One of: normal, foil, etched, reverse-holo, cosmos-holo, pokeball, masterball, energy-symbol, duskball, loveball, staff, prerelease, league, 1st-edition, 1st-edition-foil, shadowless, limited

Default: the finish the card is quoted in now

intervalstringPoint spacing. Weeks run Monday to Sunday and months are calendar months, UTC. A WEEK or MONTH point is the bucket's last day inside the range, with the price held on that day: a price that was really quoted, not an average. Case-insensitive.

One of: DAY, WEEK, MONTH

Default: DAY

fromstringFirst day, YYYY-MM-DD, inclusive.

Default: to minus 90 days

tostringLast day, YYYY-MM-DD, inclusive. At most 1,826 days after from.

Default: today, UTC

graderstringWith grade, the graded slot's series instead of a marketplace's; source and finish are then ignored.

One of: raw, any, psa, bgs, cgc, sgc

gradestringThe other half of the slot.

One of: ungraded, 7, 8, 9, 9.5, 10

Response

200 The series. Marketplace and graded series differ in shape.

FieldTypeDescription
dataobjectThe series.
data.cardIdstringThe card's current id.
data.sourcestringMarketplace series: the source.

One of: cardmarket, tcgplayer, cardkingdom, manapool

Absent unless it applies.

data.finishstringMarketplace series: the finish used.

One of: normal, foil, etched, reverse-holo, cosmos-holo, pokeball, masterball, energy-symbol, duskball, loveball, staff, prerelease, league, 1st-edition, 1st-edition-foil, shadowless, limited

Absent unless it applies.

data.graderstringGraded series: the grader.

One of: raw, any, psa, bgs, cgc, sgc

Absent unless it applies.

data.gradestringGraded series: the grade.

One of: ungraded, 7, 8, 9, 9.5, 10

Absent unless it applies.

data.intervalstringThe spacing used.

One of: DAY, WEEK, MONTH

data.pointsobject[]Oldest first.
data.points[].daystringYYYY-MM-DD: the day, or the last day of the week or month inside the range.
data.points[].marketnumber | nullMarketplace series: the headline price that day.

Absent unless it applies.

data.points[].lownumber | nullMarketplace series: the low that day.

Absent unless it applies.

data.points[].pricenumberGraded series: the slot's price that day.

Absent unless it applies.

data.points[].currencystringThe currency.

One of: EUR, USD

metaobjectThe range and what else exists.
meta.fromstringThe first day used.
meta.tostringThe last day used.
meta.countintegerPoints returned.
meta.finishesstring[]Marketplace series: every finish the source has history for, most history first.

Absent unless it applies.

meta.notestringHow to read the points.
meta.pricesFromstringPresent when the card is a localized printing served its English printing's prices.

One of: englishTwin

Absent unless it applies.

meta.englishIdstringThe English printing the prices are from. Present with pricesFrom.

Absent unless it applies.

meta.movedFromstringThe id you asked for, when it was retired by a set re-key.

Absent unless it applies.

Examples

Real responses from the production API, recorded on 2026-09-24 by the script that also checks every field above against them. Arrays are shown in full.

Weekly, first half of 2026

curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6/history?from=2026-01-01&to=2026-03-31&interval=week" \
  -H "Authorization: Bearer $TCGGRAPH_API_KEY"
200 · X-Credits-Cost: 3
{
  "data": {
    "cardId": "pkm_sv3pt5_6",
    "source": "cardmarket",
    "finish": "foil",
    "interval": "WEEK",
    "points": []
  },
  "meta": {
    "from": "2026-01-01",
    "to": "2026-03-31",
    "count": 0,
    "finishes": [
      "foil",
      "normal"
    ],
    "note": "Points are dense: a price is held forward until it next moves."
  }
}

A holo-only card: the default finish follows the quote

No finish was sent; the series is foil because that is what the card is quoted in.

curl "https://api.tcggraph.com/v1/prices/pkm_swshp_SWSH262/history?source=tcgplayer&interval=month&from=2026-01-01&to=2026-06-30" \
  -H "Authorization: Bearer $TCGGRAPH_API_KEY"
200 · X-Credits-Cost: 3
{
  "data": {
    "cardId": "pkm_swshp_SWSH262",
    "source": "tcgplayer",
    "finish": "foil",
    "interval": "MONTH",
    "points": [
      {
        "day": "2026-01-31",
        "market": 59.82,
        "low": 46.98,
        "currency": "USD"
      },
      {
        "day": "2026-02-28",
        "market": 53.51,
        "low": 49.09,
        "currency": "USD"
      },
      {
        "day": "2026-03-31",
        "market": 72.6,
        "low": 62.47,
        "currency": "USD"
      },
      {
        "day": "2026-04-30",
        "market": 84.27,
        "low": 66.55,
        "currency": "USD"
      },
      {
        "day": "2026-05-31",
        "market": 90.29,
        "low": 75,
        "currency": "USD"
      },
      {
        "day": "2026-06-30",
        "market": 84.33,
        "low": 70,
        "currency": "USD"
      }
    ]
  },
  "meta": {
    "from": "2026-01-01",
    "to": "2026-06-30",
    "count": 6,
    "finishes": [
      "foil"
    ],
    "note": "Points are dense: a price is held forward until it next moves."
  }
}

PSA 10, monthly

curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6/history?grader=psa&grade=10&interval=month&from=2026-01-01&to=2026-06-30" \
  -H "Authorization: Bearer $TCGGRAPH_API_KEY"
200 · X-Credits-Cost: 3
{
  "data": {
    "cardId": "pkm_sv3pt5_6",
    "grader": "psa",
    "grade": "10",
    "interval": "MONTH",
    "points": []
  },
  "meta": {
    "from": "2026-01-01",
    "to": "2026-06-30",
    "count": 0,
    "note": "Points are dense: a price is held forward until it next moves."
  }
}

Errors

Every error has the same body; switch on error.code. Any endpoint can also answer 401, 402, 403 or 429 for reasons of key, plan or rate; those are on Errors.

StatusCodeWhen
400invalid_requestA date that is not YYYY-MM-DD, from after to, or a range over 1,826 days.
400invalid_requestA finish, interval, source, grader or grade outside its list, or a parameter this endpoint does not take.
404not_foundNo card has that id.

Range too long

curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6/history?from=2015-01-01&to=2026-01-01" \
  -H "Authorization: Bearer $TCGGRAPH_API_KEY"
400
{
  "error": {
    "code": "invalid_request",
    "message": "That range covers 4018 days; the maximum is 1826.",
    "details": {
      "field": "from",
      "maxDays": 1826
    }
  }
}

Unknown finish

curl "https://api.tcggraph.com/v1/prices/pkm_sv3pt5_6/history?finish=holo" \
  -H "Authorization: Bearer $TCGGRAPH_API_KEY"
400
{
  "error": {
    "code": "invalid_request",
    "message": "Unknown finish \"holo\".",
    "details": {
      "field": "finish",
      "allowed": [
        "normal",
        "foil",
        "etched",
        "reverse-holo",
        "cosmos-holo",
        "pokeball",
        "masterball",
        "energy-symbol",
        "duskball",
        "loveball",
        "staff",
        "prerelease",
        "league",
        "1st-edition",
        "1st-edition-foil",
        "shadowless",
        "limited"
      ]
    }
  }
}