PASTE YOUR ID.
GET YOUR KEY.
Your key is stored encrypted, unlocked with your payment ID. Anyone holding the ID can pull the key, so guard it like the key itself. Lose the ID and there is no path back. No email, no account, no reset.
# save this. anyone with it can spend your credit.
api_key: —
bundle: —
credit: —
expires: —
▌ KEY READY · use as `Authorization: Bearer …` · docs
// WHAT HAPPENS
Bank the ID
At purchase you got a payment ID. That ID is the recovery secret that unlocks your key. Save it somewhere safe and treat it as sensitive as the key itself.
HKDF derive
Submit the ID. Phantom runs HKDF-SHA256(payment_id) → AES-256 key. Uses it to decrypt the ciphertext blob stored at issuance.
Key returns
Plaintext key drops in the terminal above. Idempotent: come back anytime with the ID and the same key returns.
// QUESTIONS
I lost my payment ID.
Then the key is gone. Phantom collects no email, no account, no identifier. The payment ID is the only handle. Buy a new bundle. Start small. pricing
Status says "not recoverable."
Key issued before 2026-05 had no ciphertext stored: claim-once-and-lose by design. Sorry. New keys are recoverable forever.
Can I share the payment ID with someone?
Anyone with the payment ID can decrypt the key. Treat it like the key itself. PGP-encrypt it if you have to send it anywhere.
Is this rate-limited?
60 lookups per minute per IP. Payment IDs are 128-bit random, brute-force is infeasible, rate-limit is defense in depth.
Status says pending / confirming.
Chain hasn't confirmed your payment yet. Wait 5-20 min depending on coin. Re-run the lookup.
Why not store the key plaintext?
Then operator subpoena = key leak. Encrypted under your secret, phantom can't comply even if compelled.