{"swagger":"2.0","info":{"title":"TCGAPIs Documentation","description":"v2-first API reference for TCGAPIs trading card and board game catalog, pricing, sales-history, listing, recognition, and marketplace endpoints. Authenticate protected data endpoints with the x-api-key header.","version":"2.0.0"},"definitions":{},"paths":{"/auth/register":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["email","password","name"],"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string","minLength":8},"name":{"type":"string"},"company":{"type":"string"}}}}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"user":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"apiKey":{"type":"string"},"plan":{"type":"string"},"emailVerified":{"type":"boolean"},"apiKeyActive":{"type":"boolean"}}},"requiresVerification":{"type":"boolean"},"message":{"type":"string"}}}}}}},"/auth/login":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["email","password"],"properties":{"email":{"type":"string","format":"email"},"password":{"type":"string"}}}}],"responses":{"200":{"description":"Default Response"}}}},"/auth/me":{"get":{"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"user":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"webhookUrl":{"type":"string"},"apiKey":{"type":"string"},"apiKeyActive":{"type":"boolean"},"apiKeyRotatedAt":{"type":["null","string"],"format":"date-time"},"plan":{"type":"string"}}}}}}}}},"/auth/regenerate-api-key":{"post":{"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"apiKey":{"type":"string"},"user":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"webhookUrl":{"type":"string"},"apiKey":{"type":"string"},"apiKeyActive":{"type":"boolean"},"apiKeyRotatedAt":{"type":["null","string"],"format":"date-time"},"plan":{"type":"string"}}}}}}}}},"/auth/update-profile":{"put":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"name":{"type":"string"},"email":{"type":"string","format":"email"},"webhookUrl":{"type":"string"},"currentPassword":{"type":"string"},"newPassword":{"type":"string","minLength":8}}}}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"user":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"webhookUrl":{"type":"string"},"apiKey":{"type":"string"},"apiKeyActive":{"type":"boolean"},"apiKeyRotatedAt":{"type":["null","string"],"format":"date-time"},"plan":{"type":"string"}}}}}}}}},"/auth/profile":{"get":{"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"user":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"webhookUrl":{"type":"string"},"apiKey":{"type":"string"},"apiKeyActive":{"type":"boolean"},"apiKeyRotatedAt":{"type":["null","string"],"format":"date-time"},"plan":{"type":"string"}}}}}}}}},"/auth/docs-markdown":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/auth/verify-email":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["email","code"],"properties":{"email":{"type":"string","format":"email"},"code":{"type":"string","minLength":6,"maxLength":6}}}}],"responses":{"200":{"description":"Default Response"}}}},"/auth/verify-email-token":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["token"],"properties":{"token":{"type":"string"}}}}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}}}}}},"/auth/resend-verification":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["email"],"properties":{"email":{"type":"string","format":"email"}}}}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"message":{"type":"string"}}}}}}},"/auth/verification-status/{email}":{"get":{"parameters":[{"type":"string","format":"email","required":true,"in":"path","name":"email"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"verified":{"type":"boolean"},"apiKeyActive":{"type":"boolean"}}}}}}},"/api/v1/packages":{"get":{"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"packages":{"type":"array","items":{"type":"object"}}}}}}}},"/api/v1/games":{"get":{"parameters":[{"type":"integer","description":"Number of results to return (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"count":{"type":"integer"},"total":{"type":"integer"},"offset":{"type":"integer"},"limit":{"type":"integer"},"data":{"type":"array","items":{"type":"object"}}}}}}}},"/api/v1/games/top":{"get":{"parameters":[{"type":"integer","description":"Number of results to return (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/games/{categoryId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"categoryId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cards":{"get":{"parameters":[{"type":"string","required":true,"in":"query","name":"game"},{"type":"string","required":false,"in":"query","name":"set"},{"type":"string","required":false,"in":"query","name":"name"},{"type":"string","enum":["all","listings","price_trends"],"required":false,"in":"query","name":"include"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","additionalProperties":true}}}}}}},"/api/v1/cards/{id}":{"get":{"parameters":[{"type":"string","enum":["all","listings","price_trends"],"required":false,"in":"query","name":"include"},{"type":"string","required":true,"in":"path","name":"id"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","additionalProperties":true}}}}}}},"/api/v1/catalog/games":{"get":{"parameters":[{"type":"integer","description":"Number of results to return (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/catalog/expansions":{"get":{"parameters":[{"type":"string","required":true,"in":"query","name":"game"},{"type":"integer","description":"Number of results to return (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/catalog/cards":{"get":{"parameters":[{"type":"string","required":true,"in":"query","name":"game"},{"type":"string","required":true,"in":"query","name":"expansion"},{"type":"integer","description":"Number of results to return (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/catalog/card-details":{"get":{"parameters":[{"type":"string","required":false,"in":"query","name":"game"},{"type":"string","required":false,"in":"query","name":"expansion"},{"type":"string","required":false,"in":"query","name":"name"},{"type":"string","required":false,"in":"query","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/expansions/{categoryId}":{"get":{"parameters":[{"type":"integer","description":"Number of results to return (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"},{"type":"string","required":true,"in":"path","name":"categoryId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/prices/{productId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/skuprices/product/{productId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/skuprices/{skuId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"skuId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/livelistings/{productId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/health":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/user/profile":{"get":{"summary":"Get authenticated user profile","description":"Get user profile information","tags":["user"],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"email":{"type":"string"},"name":{"type":"string"},"company":{"type":"string"},"plan":{"type":"string"},"subscription":{"type":"object","properties":{"plan":{"type":"string"},"billingCycle":{"type":"string"},"status":{"type":"string"},"startDate":{"type":"string","format":"date-time"},"endDate":{"type":["null","string"],"format":"date-time"}}},"usage":{"type":"object","properties":{"apiCallsThisMonth":{"type":"number"},"lastResetDate":{"type":"string","format":"date-time"}}},"createdAt":{"type":"string","format":"date-time"},"updatedAt":{"type":"string","format":"date-time"}}}}}},"401":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}},"403":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"},"upgrade":{"type":"object"}}}},"429":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"},"limits":{"type":"object"}}}},"500":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"error":{"type":"string"}}}}}}},"/api/v1/user/subscription":{"get":{"summary":"Get authenticated user subscription details","description":"Get user subscription information","tags":["user"],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"plan":{"type":"string"},"status":{"type":"string"},"billingProvider":{"type":["null","string"]},"whopMembershipId":{"type":["null","string"]},"apiCalls":{"type":"object","properties":{"count":{"type":"number"},"lastReset":{"type":"string","format":"date-time"}}},"limits":{"type":"object","properties":{"apiCallsLimit":{"type":"number"},"apiCallsRemaining":{"type":"number"},"resetFrequency":{"type":"string"}}}}}}}}}}},"/api/v1/user/logs":{"get":{"summary":"Get authenticated user API call history","description":"Get user API call logs","tags":["user"],"parameters":[{"type":"integer","default":50,"maximum":100,"required":false,"in":"query","name":"limit"}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/user/usage":{"get":{"summary":"Get authenticated user API usage details","description":"Get user API usage statistics","tags":["user"],"parameters":[{"type":"string","enum":["day","month"],"default":"month","required":false,"in":"query","name":"period"}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"period":{"type":"string"},"apiCalls":{"type":"number"},"csvDownloads":{"type":"number"},"hourlyStats":{"type":["null","array"],"items":{"type":"object","properties":{"hour":{"type":"number"},"count":{"type":"number"}}}},"limits":{"type":"object","properties":{"apiCallsPerMonth":{"type":"number"},"apiCallsPerDay":{"type":"number"},"apiCallsPerHour":{"type":"number"},"remaining":{"type":"number"},"percentUsed":{"type":"number"}}},"lastUpdated":{"type":"string","format":"date-time"}}}}}}}}},"/csv/catalog/{game}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"game"}],"responses":{"200":{"description":"Default Response"}}}},"/csv/prices/{game}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"game"}],"responses":{"200":{"description":"Default Response"}}}},"/csv/fields/{game}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"game"}],"responses":{"200":{"description":"Default Response"}}}},"/csv/games":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/csv/expansions/{game}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"game"}],"responses":{"200":{"description":"Default Response"}}}},"/csv/available":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/sales-history/{productId}":{"get":{"tags":["Premium Features"],"parameters":[{"type":"string","required":true,"in":"path","name":"productId"}],"security":[{"apiKey":[]}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"sales":{"type":"array"},"statistics":{"type":"object"},"lastUpdated":{"type":"string","format":"date-time"}}}}}}}}},"/api/v1/email/test":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/email/welcome":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/email/send":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/recognize/demo":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/recognize":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/recognize/usage":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/v1/psa/demo/{certNumber}":{"get":{"parameters":[{"type":"string","pattern":"^[0-9]+$","required":true,"in":"path","name":"certNumber"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/psa/{certNumber}":{"get":{"parameters":[{"type":"string","pattern":"^[0-9]+$","required":true,"in":"path","name":"certNumber"}],"responses":{"200":{"description":"Default Response"}}}},"/whop/config":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/whop/create-checkout-session":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/whop/cancel-subscription":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/whop/uncancel-subscription":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/whop/subscription-status":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/whop/create-portal-session":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/whop/outstanding-balance":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/whop/pay-outstanding-balance":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/whop/webhook":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/admin/users":{"get":{"parameters":[{"type":"integer","default":1,"required":false,"in":"query","name":"page"},{"type":"integer","default":50,"required":false,"in":"query","name":"limit"},{"type":"string","required":false,"in":"query","name":"search"},{"type":"string","required":false,"in":"query","name":"plan"},{"type":"string","required":false,"in":"query","name":"status"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}},"put":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"name":{"type":"string"},"company":{"type":"string"},"emailVerified":{"type":"boolean"},"apiKeyActive":{"type":"boolean"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}},"delete":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/subscription":{"put":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["plan"],"properties":{"plan":{"type":"string","enum":["free","hobby","business","unlimited","lifetime"]},"subscriptionStatus":{"type":"string","enum":["active","past_due","suspended","unpaid","canceled","none"]},"currentPeriodEnd":{"type":"string","format":"date-time"},"cancelAtPeriodEnd":{"type":"boolean"},"reason":{"type":"string"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/suspend":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"reason":{"type":"string"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/admin-suspend":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"reason":{"type":"string"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/admin-unsuspend":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"reason":{"type":"string"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/reactivate-subscription":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/reset-api-calls":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/regenerate-api-key":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/logs":{"get":{"parameters":[{"type":"integer","default":1,"required":false,"in":"query","name":"page"},{"type":"integer","default":50,"required":false,"in":"query","name":"limit"},{"type":"string","required":false,"in":"query","name":"action"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/stats":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/admin/check":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/admin/usage/stats":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/admin/usage/summary":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/admin/usage/user/{userId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/bonus-api-calls":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["amount"],"properties":{"amount":{"type":"integer","minimum":1},"reason":{"type":"string"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/bonus-card-recognition-calls":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["amount"],"properties":{"amount":{"type":"integer","minimum":1},"reason":{"type":"string"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/{userId}/reset-bonus-calls":{"post":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","properties":{"type":{"type":"string","enum":["api","cardRecognition","both"]},"reason":{"type":"string"}}}},{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/users/bulk-subscription":{"put":{"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["userIds","plan"],"properties":{"userIds":{"type":"array","items":{"type":"string"},"minItems":1},"plan":{"type":"string","enum":["free","hobby","business","unlimited","lifetime"]},"subscriptionStatus":{"type":"string","enum":["active","past_due","suspended","unpaid","canceled","none"]},"reason":{"type":"string"}}}}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing":{"get":{"parameters":[{"type":"integer","default":50,"required":false,"in":"query","name":"limit"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/users/{userId}/preview":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/actions/{idempotencyKey}/reconcile":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"idempotencyKey"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/memberships/{membershipId}/{action}":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"membershipId"},{"type":"string","required":true,"in":"path","name":"action"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/payments/{paymentId}/{action}":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"paymentId"},{"type":"string","required":true,"in":"path","name":"action"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/users/{userId}/grant-trial":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/users/{userId}/end-trial":{"post":{"parameters":[{"type":"string","required":true,"in":"path","name":"userId"}],"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/reminders/run":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/admin/billing/notifications/send-queued":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/admin/login-as-user":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/api/games/stats":{"get":{"parameters":[{"type":"integer","description":"Number of results to return (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/games":{"get":{"summary":"Get all games","description":"Returns a paginated list of all supported trading card games. No authentication required.\n\n**Pagination:** Use `limit` and `offset` query params to page through results. The `data` array contains only the current page. Use `total` to know how many results exist. Example: first page `?limit=25&offset=0`, second page `?limit=25&offset=25`, etc.","tags":["V2"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100). Example: limit=25 returns 25 results.","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip for pagination (default 0). To get page N, use offset = (N-1) * limit. Example: offset=0 for page 1, offset=25 for page 2, offset=50 for page 3.","default":0,"required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"count":{"type":"integer","description":"Number of results returned in this page (may be less than limit on the last page)"},"total":{"type":"integer","description":"Total number of results available across all pages. Use this to calculate how many pages exist: totalPages = Math.ceil(total / limit)"},"offset":{"type":"integer","description":"The offset used for this request (number of results skipped)"},"limit":{"type":"integer","description":"The limit used for this request (max results per page)"},"data":{"type":"array","items":{"type":"object","properties":{"categoryId":{"type":"integer"},"name":{"type":"string"},"displayName":{"type":"string"},"image":{"type":"string"}}}}}}}}}},"/api/v2/expansions/{categoryId}":{"get":{"summary":"Get expansions by category ID","description":"Returns paginated expansions for a specific game. Requires Hobby plan or higher.\n\n**Pagination:** Use `limit` and `offset` query params to page through results. The `data` array contains only the current page. Example: first page `?limit=25&offset=0`, second page `?limit=25&offset=25`, etc.","tags":["V2"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100). Example: limit=25 returns 25 results.","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip for pagination (default 0). To get page N, use offset = (N-1) * limit. Example: offset=0 for page 1, offset=25 for page 2, offset=50 for page 3.","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","description":"The category ID of the game","required":true,"in":"path","name":"categoryId"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"count":{"type":"integer","description":"Number of results returned in this page (may be less than limit on the last page)"},"total":{"type":"integer","description":"Total number of results available across all pages. Use this to calculate how many pages exist: totalPages = Math.ceil(total / limit)"},"offset":{"type":"integer","description":"The offset used for this request (number of results skipped)"},"limit":{"type":"integer","description":"The limit used for this request (max results per page)"},"data":{"type":"array","items":{"type":"object","properties":{"groupId":{"type":"integer"},"name":{"type":"string"},"abbreviation":{"type":"string"},"publishedOn":{"type":"string"},"image":{"type":"string"}}}}}}}}}},"/api/v2/cards/{groupId}":{"get":{"summary":"Get cards by group ID","description":"Returns paginated cards in an expansion. Requires Hobby plan or higher.\n\n**Pagination:** Use `limit` and `offset` query params to page through results. The `data` array contains only the current page — not all cards. Example: `?limit=25&offset=0` returns cards 1-25, `?limit=25&offset=25` returns cards 26-50, and so on. Check `total` for the full count and `count` for how many were returned in this page.","tags":["V2"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100). Example: limit=25 returns 25 results.","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip for pagination (default 0). To get page N, use offset = (N-1) * limit. Example: offset=0 for page 1, offset=25 for page 2, offset=50 for page 3.","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","description":"The group ID of the expansion","required":true,"in":"path","name":"groupId"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"count":{"type":"integer","description":"Number of results returned in this page (may be less than limit on the last page)"},"total":{"type":"integer","description":"Total number of results available across all pages. Use this to calculate how many pages exist: totalPages = Math.ceil(total / limit)"},"offset":{"type":"integer","description":"The offset used for this request (number of results skipped)"},"limit":{"type":"integer","description":"The limit used for this request (max results per page)"},"data":{"type":"array","items":{"type":"object","additionalProperties":true}}}}}}}},"/api/v2/prices/{productId}":{"get":{"summary":"Get prices by product ID","description":"Returns pricing information for a specific product. Requires Business plan or higher.","tags":["V2"],"parameters":[{"type":"integer","description":"The product ID","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","additionalProperties":true}}}}}}},"/api/v2/livelistings/{productId}":{"get":{"summary":"Get live listings by product ID","description":"Returns real-time marketplace listings for a specific product. Requires Unlimited plan.","tags":["V2"],"parameters":[{"type":"integer","description":"The product ID","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","additionalProperties":true}}}}}}},"/api/v2/sales-history/{productId}":{"get":{"summary":"Get sales history by product ID","description":"Returns paginated historical sales data with statistics and price trend analysis. Statistics are computed over the full dataset regardless of pagination. Requires Business plan or higher.\n\n**Pagination:** Use `limit` and `offset` query params to page through the sales array. Example: `?limit=25&offset=0` for the first 25 sales, `?limit=25&offset=25` for the next 25.","tags":["V2"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100). Example: limit=25 returns 25 results.","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip for pagination (default 0). To get page N, use offset = (N-1) * limit. Example: offset=0 for page 1, offset=25 for page 2, offset=50 for page 3.","default":0,"required":false,"in":"query","name":"offset"},{"type":"string","description":"TCGPlayer product ID","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response","schema":{"type":"object","properties":{"success":{"type":"boolean"},"data":{"type":"object","properties":{"sales":{"type":"array"},"count":{"type":"integer","description":"Number of sales returned in this page"},"total":{"type":"integer","description":"Total number of sales available across all pages"},"offset":{"type":"integer","description":"The offset used for this request"},"limit":{"type":"integer","description":"The limit used for this request"},"statistics":{"type":"object"},"lastUpdated":{"type":"string"}}}}}}}}},"/api/v2/historic-prices/{productId}":{"get":{"summary":"Get historic prices by product ID","description":"Returns stored historical price data for a TCGPlayer product from the historicPrices collection. Available only for products tracked on TCGPlayer. Requires Business plan or higher.","tags":["V2"],"parameters":[{"type":"integer","description":"The product ID","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/sales-history/{productId}/full":{"get":{"summary":"Full historic sales for a product (filterable)","description":"Returns the full bucketed sales history for a product, with server-side filtering by condition, variant, language, date range, and sales-only. Each row is one (SKU, 3-day bucket) tuple — flatten-friendly for CSV export, easy to group client-side.\n\nDistinct from /sales-history/:productId, which returns the live recent-transactions feed (~100 most recent from TCGPlayer marketplace). Use this endpoint when you need the historic time-series.\n\nRequires Business plan or higher.","tags":["V2"],"parameters":[{"type":"string","description":"Filter by condition. Comma-separated for OR (e.g. \"Near Mint,Lightly Played\"). Case-insensitive.","required":false,"in":"query","name":"condition"},{"type":"string","description":"Filter by variant (e.g. Normal, Foil). Comma-separated for OR.","required":false,"in":"query","name":"variant"},{"type":"string","description":"Filter by language (e.g. English, Japanese). Comma-separated for OR.","required":false,"in":"query","name":"language"},{"type":"string","description":"Filter to a specific SKU ID.","required":false,"in":"query","name":"skuId"},{"type":"string","description":"Start of date range (inclusive). ISO date YYYY-MM-DD. Filters bucketStartDate.","required":false,"in":"query","name":"from"},{"type":"string","description":"End of date range (inclusive). ISO date YYYY-MM-DD. Filters bucketStartDate.","required":false,"in":"query","name":"to"},{"type":"string","description":"Set to \"true\" to drop buckets where transactionCount is 0 (price-only snapshots).","required":false,"in":"query","name":"salesOnly"},{"type":"integer","description":"Number of results per page (default 25, max 100). Example: limit=25 returns 25 results.","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip for pagination (default 0). To get page N, use offset = (N-1) * limit. Example: offset=0 for page 1, offset=25 for page 2, offset=50 for page 3.","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","description":"TCGPlayer product ID","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardmarket/games":{"get":{"summary":"Get all Cardmarket games","description":"Returns the list of Cardmarket-supported games keyed by `idGame`. Public, no auth required. Use the returned `idGame` against `/api/v1/cardmarket/expansions/:idGame`.","tags":["Cardmarket"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardmarket/expansions/{idGame}":{"get":{"summary":"Get Cardmarket expansions for a game","description":"Returns paginated expansions for the given Cardmarket `idGame`. Each row carries `idExpansion`, used against `/api/v1/cardmarket/singles/:idExpansion`.","tags":["Cardmarket"],"parameters":[{"type":"integer","required":false,"in":"query","name":"limit"},{"type":"integer","required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardmarket game ID","required":true,"in":"path","name":"idGame"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardmarket/singles/{idExpansion}":{"get":{"summary":"Get Cardmarket singles for an expansion","description":"Returns paginated singles for the given Cardmarket `idExpansion`. Each row carries `idProduct` (Cardmarket product ID, used against `/api/v1/cardmarket/prices/:idProduct`) and `productId` (TCGPlayer cross-ref where available).","tags":["Cardmarket"],"parameters":[{"type":"integer","required":false,"in":"query","name":"limit"},{"type":"integer","required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardmarket expansion ID","required":true,"in":"path","name":"idExpansion"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardmarket/single/{idProduct}":{"get":{"summary":"Get a single Cardmarket card by idProduct","tags":["Cardmarket"],"parameters":[{"type":"integer","description":"Cardmarket product ID","required":true,"in":"path","name":"idProduct"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardmarket/prices/{idProduct}":{"get":{"summary":"Get Cardmarket price guide for a product","description":"Returns the latest Cardmarket price guide entry: `low`, `trend`, `avg1/7/30` plus matching `-foil` variants. Keyed by Cardmarket `idProduct`. Requires Business plan or higher.","tags":["Cardmarket"],"parameters":[{"type":"integer","required":true,"in":"path","name":"idProduct"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardmarket/games":{"get":{"summary":"Get all Cardmarket games","description":"Returns the list of Cardmarket-supported games. Public, no auth required. Use the returned `idGame` to chain into `/api/v2/cardmarket/expansions/:idGame`.","tags":["V2 Cardmarket"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardmarket/expansions/{idGame}":{"get":{"summary":"Get Cardmarket expansions by idGame","description":"Paginated expansions for the given Cardmarket `idGame`. Each row carries `idExpansion` for the next chain step.","tags":["V2 Cardmarket"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardmarket game ID","required":true,"in":"path","name":"idGame"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardmarket/singles/{idExpansion}":{"get":{"summary":"Get Cardmarket singles by idExpansion","description":"Paginated singles for a given Cardmarket `idExpansion`. Each row exposes `idProduct` (use against `/api/v2/cardmarket/prices/:idProduct`) and `productId` (TCGPlayer cross-ref where present).","tags":["V2 Cardmarket"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardmarket expansion ID","required":true,"in":"path","name":"idExpansion"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardmarket/single/{idProduct}":{"get":{"summary":"Get a single Cardmarket card by idProduct","tags":["V2 Cardmarket"],"parameters":[{"type":"integer","description":"Cardmarket product ID","required":true,"in":"path","name":"idProduct"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardmarket/prices/{idProduct}":{"get":{"summary":"Get Cardmarket price guide by idProduct","description":"Latest Cardmarket price guide entry: `low`, `trend`, `avg1/7/30` plus `-foil` variants. Keyed by Cardmarket `idProduct`. Requires Business plan.","tags":["V2 Cardmarket"],"parameters":[{"type":"integer","description":"Cardmarket product ID","required":true,"in":"path","name":"idProduct"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardtrader/games":{"get":{"summary":"Get all Cardtrader games","description":"Returns the list of Cardtrader-supported games. Public. Use the returned `id` against `/api/v1/cardtrader/expansions/:game_id`.","tags":["Cardtrader"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardtrader/expansions/{game_id}":{"get":{"summary":"Get Cardtrader expansions for a game","description":"Paginated expansions for the given Cardtrader `game_id`. Each row carries `id`, used against `/api/v1/cardtrader/blueprints/:expansion_id`.","tags":["Cardtrader"],"parameters":[{"type":"integer","required":false,"in":"query","name":"limit"},{"type":"integer","required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardtrader game id","required":true,"in":"path","name":"game_id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardtrader/blueprints/{expansion_id}":{"get":{"summary":"Get Cardtrader blueprints (singles) for an expansion","description":"Paginated blueprints for the given Cardtrader `expansion_id`. Each blueprint carries cross-references: `tcg_player_id`, `card_market_ids[]`, and `scryfall_id` so callers can pivot between marketplaces.","tags":["Cardtrader"],"parameters":[{"type":"integer","required":false,"in":"query","name":"limit"},{"type":"integer","required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardtrader expansion id","required":true,"in":"path","name":"expansion_id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardtrader/blueprint/{id}":{"get":{"summary":"Get a single Cardtrader blueprint by id","tags":["Cardtrader"],"parameters":[{"type":"integer","description":"Cardtrader blueprint id","required":true,"in":"path","name":"id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/cardtrader/prices/{blueprint_id}":{"get":{"summary":"Get Cardtrader marketprices for a blueprint","description":"Returns the latest Cardtrader `marketprices` row keyed by `blueprint_id`. Includes a `variants` map keyed by `{print_type}_{condition}` (e.g. `foil_NM`, `normal_LP`) — each variant carries `min`, `max`, `avg`, `quantity`, `listings_count`. Requires Business plan or higher.","tags":["Cardtrader"],"parameters":[{"type":"integer","description":"Cardtrader blueprint id","required":true,"in":"path","name":"blueprint_id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardtrader/games":{"get":{"summary":"Get all Cardtrader games","description":"Returns Cardtrader-supported games. Public, no auth required. Use the returned `id` to chain into `/api/v2/cardtrader/expansions/:game_id`.","tags":["V2 Cardtrader"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardtrader/expansions/{game_id}":{"get":{"summary":"Get Cardtrader expansions by game_id","description":"Paginated expansions for a Cardtrader `game_id`. Each row carries `id` for the next chain step.","tags":["V2 Cardtrader"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardtrader game id","required":true,"in":"path","name":"game_id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardtrader/blueprints/{expansion_id}":{"get":{"summary":"Get Cardtrader blueprints by expansion_id","description":"Paginated blueprints (singles) for an expansion. Each blueprint exposes cross-marketplace IDs: `tcg_player_id`, `card_market_ids[]`, `scryfall_id`.","tags":["V2 Cardtrader"],"parameters":[{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","description":"Cardtrader expansion id","required":true,"in":"path","name":"expansion_id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardtrader/blueprint/{id}":{"get":{"summary":"Get a single Cardtrader blueprint by id","tags":["V2 Cardtrader"],"parameters":[{"type":"integer","description":"Cardtrader blueprint id","required":true,"in":"path","name":"id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/cardtrader/prices/{blueprint_id}":{"get":{"summary":"Get Cardtrader marketprices by blueprint_id","description":"Latest Cardtrader marketprices row. The `variants` map is keyed by `{print_type}_{condition}` (e.g. `foil_NM`, `normal_LP`); each entry carries `min`, `max`, `avg`, `quantity`, `listings_count`. Requires Business plan.","tags":["V2 Cardtrader"],"parameters":[{"type":"integer","description":"Cardtrader blueprint id","required":true,"in":"path","name":"blueprint_id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/trendprices/providers":{"get":{"summary":"List recognized trend-price providers and dimensions","description":"Public discovery endpoint. Lists every recognized priceProvider, providerListing, cardFinish, gameAvailability and currency. Use this to drive a UI dropdown without hardcoding values. `cardsphere` is recognized even when no rows exist yet so callers can pin against it before ingest lands.","tags":["Trend Prices"],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/trendprices/{productId}":{"get":{"summary":"Get latest trend prices for a TCGPlayer product","description":"Latest price snapshot for the TCGPlayer `productId` across all providers / listings / finishes. Filterable via `?provider`, `?listing`, `?finish`, `?availability`. Requires Business plan.","tags":["Trend Prices"],"parameters":[{"type":"string","description":"One of cardhoarder, cardkingdom, cardmarket, cardsphere, manapool, tcgplayer","required":false,"in":"query","name":"provider"},{"type":"string","description":"One of retail, buylist","required":false,"in":"query","name":"listing"},{"type":"string","description":"One of etched, foil, normal","required":false,"in":"query","name":"finish"},{"type":"string","description":"One of mtgo, paper","required":false,"in":"query","name":"availability"},{"type":"integer","description":"TCGPlayer product ID","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/trendprices/uuid/{uuid}":{"get":{"summary":"Get latest trend prices by mtgjson uuid","description":"Same as `/:productId` but keyed by mtgjson `uuid`. Useful when you already live in the mtgjson keyspace.","tags":["Trend Prices"],"parameters":[{"type":"string","required":false,"in":"query","name":"provider"},{"type":"string","required":false,"in":"query","name":"listing"},{"type":"string","required":false,"in":"query","name":"finish"},{"type":"string","required":false,"in":"query","name":"availability"},{"type":"string","description":"mtgjson UUID","required":true,"in":"path","name":"uuid"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/trendprices/{productId}/history":{"get":{"summary":"Get trend-price history for a TCGPlayer product","description":"Full price history for a TCGPlayer `productId`, sorted newest-first. Filterable via `?provider`, `?listing`, `?finish`, `?availability`, `?from=YYYY-MM-DD`, `?to=YYYY-MM-DD`. Paginated via `?limit` (max 100) and `?offset`. Requires Business plan.","tags":["Trend Prices"],"parameters":[{"type":"string","required":false,"in":"query","name":"provider"},{"type":"string","required":false,"in":"query","name":"listing"},{"type":"string","required":false,"in":"query","name":"finish"},{"type":"string","required":false,"in":"query","name":"availability"},{"type":"string","description":"ISO date YYYY-MM-DD (inclusive)","required":false,"in":"query","name":"from"},{"type":"string","description":"ISO date YYYY-MM-DD (inclusive)","required":false,"in":"query","name":"to"},{"type":"integer","required":false,"in":"query","name":"limit"},{"type":"integer","required":false,"in":"query","name":"offset"},{"type":"integer","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/trendprices/uuid/{uuid}/history":{"get":{"summary":"Get trend-price history by mtgjson uuid","tags":["Trend Prices"],"parameters":[{"type":"string","required":false,"in":"query","name":"provider"},{"type":"string","required":false,"in":"query","name":"listing"},{"type":"string","required":false,"in":"query","name":"finish"},{"type":"string","required":false,"in":"query","name":"availability"},{"type":"string","required":false,"in":"query","name":"from"},{"type":"string","required":false,"in":"query","name":"to"},{"type":"integer","required":false,"in":"query","name":"limit"},{"type":"integer","required":false,"in":"query","name":"offset"},{"type":"string","required":true,"in":"path","name":"uuid"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v1/trendprices/bulk":{"post":{"summary":"Bulk latest trend-price snapshot","description":"Body: { productIds: [int], provider?, listing?, finish?, availability? }. Returns the latest snapshot per (productId, provider, listing, finish, availability) for every productId in the request. Capped at 200 productIds per call. Requires Business plan.","tags":["Trend Prices"],"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["productIds"],"properties":{"productIds":{"type":"array","items":{"type":"integer"}},"provider":{"type":"string"},"listing":{"type":"string"},"finish":{"type":"string"},"availability":{"type":"string"}}}}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/trendprices/providers":{"get":{"summary":"List recognized trend-price providers and dimensions","description":"Public discovery endpoint. Lists every recognized priceProvider, providerListing, cardFinish, gameAvailability and currency. `cardsphere` is recognized even when no rows exist yet so callers can pin against it before ingest lands.","tags":["V2 Trend Prices"],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/trendprices/{productId}":{"get":{"summary":"Get latest trend prices for a TCGPlayer product","description":"Latest snapshot grouped by (provider, listing, finish, availability). Filterable. Requires Business plan.","tags":["V2 Trend Prices"],"parameters":[{"type":"string","required":false,"in":"query","name":"provider"},{"type":"string","required":false,"in":"query","name":"listing"},{"type":"string","required":false,"in":"query","name":"finish"},{"type":"string","required":false,"in":"query","name":"availability"},{"type":"integer","description":"TCGPlayer product ID","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/trendprices/uuid/{uuid}":{"get":{"summary":"Get latest trend prices by mtgjson uuid","tags":["V2 Trend Prices"],"parameters":[{"type":"string","required":false,"in":"query","name":"provider"},{"type":"string","required":false,"in":"query","name":"listing"},{"type":"string","required":false,"in":"query","name":"finish"},{"type":"string","required":false,"in":"query","name":"availability"},{"type":"string","description":"mtgjson UUID","required":true,"in":"path","name":"uuid"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/trendprices/{productId}/history":{"get":{"summary":"Get trend-price history for a TCGPlayer product","description":"Full price history for the productId, sorted newest-first. Filterable via `?provider`, `?listing`, `?finish`, `?availability`, `?from`, `?to`. Paginated. Business plan.","tags":["V2 Trend Prices"],"parameters":[{"type":"string","required":false,"in":"query","name":"provider"},{"type":"string","required":false,"in":"query","name":"listing"},{"type":"string","required":false,"in":"query","name":"finish"},{"type":"string","required":false,"in":"query","name":"availability"},{"type":"string","required":false,"in":"query","name":"from"},{"type":"string","required":false,"in":"query","name":"to"},{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"},{"type":"integer","required":true,"in":"path","name":"productId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/trendprices/uuid/{uuid}/history":{"get":{"summary":"Get trend-price history by mtgjson uuid","tags":["V2 Trend Prices"],"parameters":[{"type":"string","required":false,"in":"query","name":"provider"},{"type":"string","required":false,"in":"query","name":"listing"},{"type":"string","required":false,"in":"query","name":"finish"},{"type":"string","required":false,"in":"query","name":"availability"},{"type":"string","required":false,"in":"query","name":"from"},{"type":"string","required":false,"in":"query","name":"to"},{"type":"integer","description":"Number of results per page (default 25, max 100)","default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","description":"Number of results to skip (default 0)","default":0,"required":false,"in":"query","name":"offset"},{"type":"string","required":true,"in":"path","name":"uuid"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/trendprices/bulk":{"post":{"summary":"Bulk latest trend-price snapshot","description":"Body: { productIds: [int], provider?, listing?, finish?, availability? }. Capped at 200 productIds per call.","tags":["V2 Trend Prices"],"parameters":[{"name":"body","in":"body","schema":{"type":"object","required":["productIds"],"properties":{"productIds":{"type":"array","items":{"type":"integer"}},"provider":{"type":"string"},"listing":{"type":"string"},"finish":{"type":"string"},"availability":{"type":"string"}}}}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/":{"get":{"summary":"Search and filter the boardgame catalog","description":"Returns a paginated list of boardgames matching the supplied filters. The corpus is ~175,000 titles (boardgames and boardgame expansions) with ratings, mechanics, categories, designers, publishers, and multi-category ranks.\n\n**Filter set:** type · is_expansion · ranked · year range · player count overlap · playtime cap · min age · rating threshold · vote threshold · weight (complexity) · mechanic · category · designer · publisher · family · free-text name search.\n\n**Sort:** rank (default), rating, popularity, year, name, weight.\n\nRequires Hobby plan or higher.","tags":["Boardgames"],"parameters":[{"type":"string","description":"\"boardgame\" or \"boardgameexpansion\".","required":false,"in":"query","name":"type"},{"type":"string","description":"0|false for base games, 1|true for expansions.","required":false,"in":"query","name":"is_expansion"},{"type":"string","description":"\"true\" to limit to ranked games (rank > 0).","required":false,"in":"query","name":"ranked"},{"type":"integer","description":"Earliest year_published.","required":false,"in":"query","name":"yearMin"},{"type":"integer","description":"Latest year_published.","required":false,"in":"query","name":"yearMax"},{"type":"integer","description":"Game supports at least this many players.","required":false,"in":"query","name":"minPlayers"},{"type":"integer","description":"Game playable with at most this many players.","required":false,"in":"query","name":"maxPlayers"},{"type":"integer","description":"max_playtime <= this (minutes).","required":false,"in":"query","name":"playtimeMax"},{"type":"integer","description":"Game allows players aged this or older (game min_age <= ageMin).","required":false,"in":"query","name":"ageMin"},{"type":"number","description":"Community-rated average >= this (e.g. 7.5).","required":false,"in":"query","name":"ratingMin"},{"type":"integer","description":"At least this many community ratings.","required":false,"in":"query","name":"ratedMin"},{"type":"number","description":"Complexity weight >= this (1.0 = light, 5.0 = heaviest).","required":false,"in":"query","name":"weightMin"},{"type":"number","description":"Complexity weight <= this.","required":false,"in":"query","name":"weightMax"},{"type":"string","description":"Filter by mechanic value, e.g. \"Hand Management\".","required":false,"in":"query","name":"mechanic"},{"type":"string","description":"Filter by category value, e.g. \"Economic\".","required":false,"in":"query","name":"category"},{"type":"string","description":"Filter by designer id (integer) or name.","required":false,"in":"query","name":"designer"},{"type":"string","description":"Filter by publisher id (integer) or name.","required":false,"in":"query","name":"publisher"},{"type":"string","description":"Filter by family id (integer) or name.","required":false,"in":"query","name":"family"},{"type":"string","description":"Case-insensitive name search.","required":false,"in":"query","name":"q"},{"type":"string","description":"rank|rating|popularity|year|name|weight (default: rank).","required":false,"in":"query","name":"sort"},{"type":"integer","minimum":1,"maximum":100,"default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","minimum":0,"default":0,"required":false,"in":"query","name":"offset"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/top/{rankType}":{"get":{"summary":"Top games by rank category","description":"Top-N boardgames ordered by rank within the specified category. Categories: boardgame, strategygames, familygames, wargames, partygames, abstracts, thematic, childrensgames, cgs.","tags":["Boardgames"],"parameters":[{"type":"integer","minimum":1,"maximum":100,"default":25,"required":false,"in":"query","name":"limit"},{"type":"integer","minimum":0,"default":0,"required":false,"in":"query","name":"offset"},{"type":"string","description":"Rank category (boardgame, strategygames, familygames, wargames, partygames, abstracts, thematic, childrensgames, cgs).","required":true,"in":"path","name":"rankType"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/{id}":{"get":{"summary":"Get a single boardgame by ID","description":"Returns the full record for one game including description, all ranks, full ratings block, every artist/designer/publisher/family/mechanic/category, and community poll results.","tags":["Boardgames"],"parameters":[{"type":"integer","description":"Boardgame ID.","required":true,"in":"path","name":"id"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/mechanics":{"get":{"summary":"List every mechanic with the count of games using it","description":"Useful for populating filter dropdowns. ~170 mechanics in the corpus.","tags":["Boardgames"],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/categories":{"get":{"summary":"List every category with the count of games in it","description":"Useful for populating filter dropdowns. ~80 categories in the corpus.","tags":["Boardgames"],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/designers/top":{"get":{"summary":"Most-published designers in the corpus","description":"Returns designers ranked by total games credited.","tags":["Boardgames"],"parameters":[{"type":"integer","minimum":1,"maximum":500,"default":50,"required":false,"in":"query","name":"limit"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/publishers/top":{"get":{"summary":"Most-prolific publishers in the corpus","tags":["Boardgames"],"parameters":[{"type":"integer","minimum":1,"maximum":500,"default":50,"required":false,"in":"query","name":"limit"}],"responses":{"200":{"description":"Default Response"}}}},"/api/v2/boardgames/stats":{"get":{"summary":"Headline stats for the boardgame corpus","description":"Total games, expansion split, ranked count, distinct mechanics/categories, year coverage. Useful for landing-page widgets.","tags":["Boardgames"],"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/games":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/expansions":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/cards":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/skus":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/cm-games":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/cm-expansions":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/cm-singles":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/ct-games":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/ct-expansions":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/lookups/ct-blueprints":{"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/estimate":{"post":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/jobs":{"post":{"responses":{"200":{"description":"Default Response"}}},"get":{"responses":{"200":{"description":"Default Response"}}}},"/api/studio/jobs/{jobId}":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"jobId"}],"responses":{"200":{"description":"Default Response"}}}},"/api/studio/jobs/{jobId}/download":{"get":{"parameters":[{"type":"string","required":true,"in":"path","name":"jobId"}],"responses":{"200":{"description":"Default Response"}}}}},"host":"api.tcgapis.com","schemes":["https"],"consumes":["application/json"],"produces":["application/json"],"securityDefinitions":{"apiKey":{"type":"apiKey","name":"x-api-key","in":"header"}},"externalDocs":{"description":"Guides, plan access, and v2 quickstart","url":"https://tcgapis.com/documentation"}}