Trial
A free Pokémon TCG API key
800 credits, no credit card, no endpoint held back for the paid plans — photo recognition included. One form, one key, about a second, and an account you can sign back into. The credits are granted once and do not renew, which is the whole difference between this and a free tier.
Three steps, no waiting
The form above is the whole process. It calls POST /v1/accounts/register, which mints the key and sets the password in one transaction. A script that wants a key and no dashboard can call POST /v1/accounts/free instead: same key, same limits, no password — and no way to sign in later, which is why the form on this page is not that one.
- 01
Email and password
The password is not for the API — your key authenticates that on its own, with no confirmation link to wait for. It is what signs you back in here, to see what you have spent and manage your keys.
- 02
Copy the key
It comes back on the page, once. We keep a hash of it and never the key itself, so it cannot be re-sent — copy it before you close the tab.
- 03
Send the header
X-Api-Key on every request. One header, no OAuth round trip, no token to refresh, no SDK required.
what 800 credits buy
- 800card or set lookups
- 800pages of 250 cards — the whole catalogue is 210 pages
- 160price histories
- 32cards recognised from a photo
Or any mix of them. Reference lists and reading your own quota cost nothing.
curl -s "https://api.pokemontcgapi.com/v1/cards?q=name:charizard&limit=5&include=prices" \
-H "X-Api-Key: $PTCG_API_KEY"What the key reaches
The trial is sized to answer a question — does this API have what I need, in the shape I need it — not to run a product on. What it reads is the whole catalogue all the same: the ceiling is almost the only thing that separates it from a paid plan.
- sets
- 615
- 176 WEST, 379 JP, 60 CN. Counted per region from meta.total_count on GET /v1/sets?region=…
- cards
- 52,337
- GET /v1/status, catalog.cards. Every one of them answers on a free key.
- card languages
- 6
- en · ja · fr · de · es · it. Card names per locale, on ?include=translations.
- illustrators
- 399
- GET /v1/artists, meta.total_count. Each one carries its own card count.
Measured 2026-09-02 against https://api.pokemontcgapi.com. Counts move when a set releases.
Three print regions
Western, Japanese and Chinese releases sit in the same catalogue with the same shape, tagged by print_region, so a Japanese-only set is a filter rather than a second integration.
Images and illustrators
One front image per card on ?include=images, and every card carries its illustrator, so an artist page is one query rather than a scrape.
Prices that say where they came from
Each row carries source, variant, basis, currency, capture date and a provenance string you can print next to the number, and every card also carries a single composite figure in index_eur.
Cards also carry set, series, release date, number, rarity and both marketplace ids, and 67 distinct rarities are enumerated on /v1/reference. How each price is sourced, delayed and attributed is on the price methodology page.
What the trial includes
The last four rows are what you do not get. Every capability row above them was re-checked against the running API on 2026-08-27; anything we could not make the service do was deleted from this table rather than reworded — that is why there is no webhook row any more.
| What | Trial |
|---|---|
| Credits | 800, granted once |
| Daily cap | 200 |
| Requests a second | 5 |
| API keys | 1 |
| Credit card | Not required, not asked for |
| Cards, sets, artists, rarities, types and supertypes | All of them |
| Search grammar | Fielded terms, AND/OR, negation, wildcards, ranges |
| Page size | Up to 250 per request |
| Cursor pagination | links.next on every page |
| Batch id lookup | Up to 100 ids per request |
| Field projection with select= | Card queries and batch lookups |
| Prices with source, basis and provenance | On ?include=prices |
| Card image | One front image per card |
| Card names in six languages | On ?include=translations |
| ETag and If-None-Match | An unchanged card answers 304 |
| Commercial use | Permitted |
| Card recognition from a photo | Yes — 25 credits a call, so 32 of them |
| Credits that renew | No — the trial is granted once |
| Graded quotes and the movers feed | Paid plans only |
| Price history beyond 7 days | Paid plans only |
| Support with a response time | Community only |
How the allowance is shaped
The unit is a credit, and most calls cost one of them. A card lookup, a set lookup, a search that returns 250 rows: one credit each. What costs more is what carries more away — five for a price history, 25 for recognising a card from a photograph, which is the whole image index answering rather than a row being read. Reference lists and reading your own quota cost nothing.
The trial is 800 credits in total, not per month. The daily cap of 200 is a brake on top of it rather than a second budget: it exists so that one runaway loop costs you an afternoon instead of the whole trial. Spend the cap every day and the trial lasts 4 days.
5 requests a second is the rate. It is enough to evaluate the API interactively and deliberately not enough to walk the catalogue quickly. A page of 250 cards costs the same single credit as one card, so paging properly is the difference between a trial that answers your question and one that runs out before it does.
Every response carries a strong ETag. Send it back as If-None-Match and an unchanged card answers 304 Not Modified with no body at all. Card data changes when a set releases, not when you poll, so a client that caches properly serves far more user-visible lookups than it spends requests.
Mistakes come back as data, not as a stack trace. Every 4xx carries the same envelope — error.code, error.message, error.details and the request_id that is also on the response header — so a client can branch on the code and quote the id at us without screen-scraping a sentence. A malformed query names the field and the position it failed at, rather than answering an empty page.
{
"error": {
"code": "INVALID_QUERY",
"message": "Empty value for field \"name\" at position 0.",
"details": { "position": 0, "field": "name" },
"request_id": "1cdf1923-ad2c-4ca4-8f76-ba0754cf136d"
}
}When the credits run out
Nothing breaks and nothing is deleted. Requests answer 429 with a message that says the trial is spent, your key stays valid, and subscribing to one of the paid plans lifts the ceiling on the same key — no rotation, no code change, no second integration.Questions
- Is the free Pokemon TCG API key really free?
- Yes, and it is a trial rather than a tier — the distinction is worth being blunt about. You get 800 credits, once, with no credit card and no clock: they do not expire and they do not come back. If your project fits inside them it fits forever, but most projects do not, and that is the point. Commercial use is allowed on them all the same.
- How do I get one?
- You fill in the form on this page with an email address and a password. The key comes back on the same page in about a second, on the Trial plan, with the limits below already applied. There is no approval step and no waiting. The password is only for signing back into this site — the key authenticates the API on its own — and if the form fails for any reason, [email protected] is a person.
- What can I actually do with 800 credits?
- Most calls cost one credit, so 800 calls. A page of 250 cards costs the same one credit as a single card, which means the whole catalogue is about 210 credits to walk end to end. Price history costs five, and recognising a card from a photo costs 25 — 32 photos. It is sized to answer "does this API have what I need", not to run a product on.
- What are the limits on a trial key?
- 800 credits in total, at most 200 in any one day, at most 5 a second, on 1 key. Graded quotes, the movers feed and price history beyond 7 days are on the paid plans. Nothing else is held back: the same endpoints, the same query grammar and the same price fields answer on a trial key as on a paid one.
- What happens when the credits run out?
- Requests answer 429 with the code QUOTA_EXCEEDED and a message that says the trial is spent rather than pointing at a reset date that will never arrive. Your key stays valid and your account stays open: subscribing to a plan lifts the ceiling on the same key, with no rotation and no code change.
- How do I send the key?
- In an X-Api-Key header on every request. There is no OAuth exchange, no bearer token to refresh and no SDK to install — curl and your language of choice are the whole integration. Keep it server-side: a key in a browser bundle is a key anyone can read and spend, and at 25 credits a photo it is spent quickly.
- What does a trial key actually reach?
- The whole catalogue. 615 sets across three print regions, 52,337 cards, card names in en · ja · fr · de · es · it, one front image per card, 399 illustrators and 67 rarities, plus photo recognition against every indexed card. Prices come back on request and every price row carries its own source, basis, capture date and provenance string, so you can print the attribution next to the number.
- Can I use the trial commercially?
- Yes. There is no non-commercial clause on any plan. The one restriction that applies everywhere is that you may not redistribute the price data as a dataset or run a competing price API on top of it, which is a limit we inherit from our own sources and publish in full on the price methodology page.
- Why not a free tier that renews?
- Because a free tier that renews forever is a product given away, and it makes the paid plans worse rather than better: every credit it hands out has to be paid for by someone, and the someone is the customers who did subscribe. A trial that is generous once and then stops is the honest version of the same offer.
Take the key
One address, one key, 800 credits on it. If the trial answers your question, the paid plans are a change of ceiling rather than a rewrite; if it does not, you have spent nothing.