Skip to content
pokemontcgapi.com

billing

Subscribe, or manage what you already have.

One form for both. Paste the key of the account, pick a plan, and Stripe takes it from there — or open the portal to change a card, pull an invoice or cancel.

subscribe

Your key is the login.

There is no account password to choose and no dashboard to sign into. Paste the key of the account you want to put on a plan; it goes to our server and straight on to the API, and it is gone from this page the moment you leave it.

plan
billed

29 € per month, net of tax

a server-side key with the account:write scope — never a ptcg_pub_ one

Payment is handled by Stripe; the card never reaches pokemontcgapi.com. “Manage an existing plan” opens the Stripe portal, where invoices, the payment method and cancellation all live.

Developer

29 €/mo

credits / mo
50,000
req / s
30
keys
5

Growth

79 €/mo

credits / mo
200,000
req / s
80
keys
15

Professional

149 €/mo

credits / mo
500,000
req / s
160
keys
40

The full table, including what each plan unlocks on prices, is on the pricing page. Enterprise volumes are priced per contract: [email protected].

without a browser

The same two things, from a terminal.

This page is a convenience over two public endpoints. Nothing here is available only through the browser, which is also how you would automate it.

checkout.sh
curl -s -X POST "https://api.pokemontcgapi.com/v1/billing/checkout" \
  -H "X-Api-Key: $PTCG_API_KEY" \
  -H "Content-Type: application/json" \
  -H "Idempotency-Key: $(uuidgen)" \
  -d '{"plan":"GROWTH","interval":"MONTHLY","success_to":"welcome","cancel_to":"pricing"}'

# {"url":"https://checkout.stripe.com/c/pay/..."} — open it in a browser.

questions

Before the card details.

Why do I paste an API key instead of logging in?
Because the key already identifies the account, more strongly than a password would. Building a login — sessions, password resets, a second credential for you to lose — would add weeks of work and a new way to be broken into, to establish something the key establishes already. The key reaches our server in a POST body and goes straight on to the API; it is never in a URL and never stored in your browser.
Which key should I use?
A server-side key — one that starts with ptcg_live_ — belonging to the account you want to put on a plan. It needs the account:write scope, which the first key of an account has by default. A browser key (ptcg_pub_) is refused: it is readable by anyone who views your page, and a credential that buys things must not be.
Does subscribing change my key?
No. The plan lives on the account, not on the key, so nothing rotates and no code changes. Within about a minute of the payment landing, the same key answers with the new ceilings — you can watch it happen on GET /v1/me.
What happens to my trial credits?
They stop being the ceiling. The trial's 800 credits were granted once and are not topped up, but from the moment a plan is active the account bills against the plan's monthly allowance instead, and the daily cap disappears.
Where are my invoices?
In the Stripe portal, which the second button opens, and also on GET /v1/billing/invoices — amount, status, period and a link to the PDF. Both exist on purpose: nobody should have to enter a supplier portal they have never heard of to answer "when did I pay?".