{"openapi":"3.1.0","info":{"title":"TCG API (BYOK) API","version":"0.1.0","description":"TCG API (BYOK) lets an AI assistant read your own TCG API data through the TCG API API with a key you supply (TCG API key). Read-only: 11 tools (list_games, get_game, list_game_sets, get_set, list_set_cards, get_card, get_card_prices, get_card_by_tcgplayer_id, get_card_price_history, search_cards, list_top_price_movers). The BYOK key travels with each request, is used for that one call only and...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-tcgapi.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-tcgapi/docs"},"termsOfService":"https://connectorbay.com/byok-tcgapi/terms"},"servers":[{"url":"https://byok-tcgapi.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-tcgapi/docs"},"security":[{"upstreamKey":[]}],"components":{"securitySchemes":{"bearer":{"type":"http","scheme":"bearer","description":"Optional. A Pro API key raises rate limits; no credentials are required."},"upstreamKey":{"type":"apiKey","in":"header","name":"X-Upstream-Key","description":"Your own key for the service this connector wraps (bring your own key). Used for that one call only; never stored, logged or cached."}},"schemas":{"Error":{"type":"object","properties":{"ok":{"const":false},"error":{"type":"object"}}}}},"paths":{"/v1/tools/list_games":{"post":{"operationId":"list_games","summary":"List the trading card games covered, with set and card counts and last sync time. Use for \"Which trading card games can ","description":"List the trading card games covered, with set and card counts and last sync time. Use for \"Which trading card games can I look up prices for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 200, default 50).","title":"Per Page"}},"title":"list_gamesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_game":{"post":{"operationId":"get_game","summary":"Get one game by slug: counts of sets and cards and when its data was last synced. Use for \"How many cards does the pokem","description":"Get one game by slug: counts of sets and cards and when its data was last synced. Use for \"How many cards does the pokemon game have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"slug":{"description":"Game slug such as 'pokemon' or 'magic-the-gathering' (or the numeric TCGplayer category id). Find slugs with list_games.","maxLength":200,"title":"Slug","type":"string"}},"required":["slug"],"title":"get_gameArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_game_sets":{"post":{"operationId":"list_game_sets","summary":"List the sets (expansions) of one game with release date and card count. Use for \"What Pokemon sets exist and when were ","description":"List the sets (expansions) of one game with release date and card count. Use for \"What Pokemon sets exist and when were they released\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"slug":{"description":"Game slug such as 'pokemon' or 'magic-the-gathering' (or the numeric TCGplayer category id). Find slugs with list_games.","maxLength":200,"title":"Slug","type":"string"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 200, default 50).","title":"Per Page"}},"required":["slug"],"title":"list_game_setsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_set":{"post":{"operationId":"get_set","summary":"Get one set by numeric id. Use for \"Tell me about set 23821\".","description":"Get one set by numeric id. Use for \"Tell me about set 23821\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"set_id":{"description":"Numeric set id from list_game_sets.","title":"Set Id","type":"integer"}},"required":["set_id"],"title":"get_setArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_set_cards":{"post":{"operationId":"list_set_cards","summary":"List the cards of a set together with their current prices, paged. Use for \"Show the cards of set 23821 with prices\".","description":"List the cards of a set together with their current prices, paged. Use for \"Show the cards of set 23821 with prices\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"set_id":{"description":"Numeric set id from list_game_sets.","title":"Set Id","type":"integer"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 200, default 50).","title":"Per Page"}},"required":["set_id"],"title":"list_set_cardsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_card":{"post":{"operationId":"get_card","summary":"Get one card's details by numeric id: name, number, rarity, set, game and TCGplayer link. Use for \"What is card 123456\".","description":"Get one card's details by numeric id: name, number, rarity, set, game and TCGplayer link. Use for \"What is card 123456\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"card_id":{"description":"Numeric card id from search_cards or list_set_cards.","title":"Card Id","type":"integer"}},"required":["card_id"],"title":"get_cardArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_card_prices":{"post":{"operationId":"get_card_prices","summary":"Get the current prices of one card: market, low and foil market price and the 24h, 7d and 30d changes in percent. Use fo","description":"Get the current prices of one card: market, low and foil market price and the 24h, 7d and 30d changes in percent. Use for \"What is the current price of card 123456\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"card_id":{"description":"Numeric card id from search_cards or list_set_cards.","title":"Card Id","type":"integer"}},"required":["card_id"],"title":"get_card_pricesArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_card_by_tcgplayer_id":{"post":{"operationId":"get_card_by_tcgplayer_id","summary":"Find a card by its TCGplayer product id and return it with price data. Use for \"Which card is TCGplayer product 1\".","description":"Find a card by its TCGplayer product id and return it with price data. Use for \"Which card is TCGplayer product 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"tcgplayer_id":{"description":"TCGplayer product id (integer).","title":"Tcgplayer Id","type":"integer"}},"required":["tcgplayer_id"],"title":"get_card_by_tcgplayer_idArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/get_card_price_history":{"post":{"operationId":"get_card_price_history","summary":"Get a card's historical prices for a month, quarter or year (needs a Pro plan or higher). Use for \"How has card 123456 c","description":"Get a card's historical prices for a month, quarter or year (needs a Pro plan or higher). Use for \"How has card 123456 changed in price over the last year\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"card_id":{"description":"Numeric card id from search_cards or list_set_cards.","title":"Card Id","type":"integer"},"range":{"anyOf":[{"enum":["month","quarter","year"],"type":"string"},{"type":"null"}],"default":"month","description":"History range: month, quarter or year.","title":"Range"}},"required":["card_id"],"title":"get_card_price_historyArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/search_cards":{"post":{"operationId":"search_cards","summary":"Search cards by name across all games, with optional game, set, rarity and price range filters. Use for \"Find Charizard ","description":"Search cards by name across all games, with optional game, set, rarity and price range filters. Use for \"Find Charizard cards under 50 dollars\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"q":{"description":"Card name text (at least 2 characters).","maxLength":200,"title":"Q","type":"string"},"game":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only this game slug.","title":"Game"},"set_id":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this numeric set id.","title":"Set Id"},"rarity":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only this rarity text, for example 'Rare'.","title":"Rarity"},"min_price":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Minimum market price in USD.","title":"Min Price"},"max_price":{"anyOf":[{"minimum":0,"type":"number"},{"type":"null"}],"default":null,"description":"Maximum market price in USD.","title":"Max Price"},"sort":{"anyOf":[{"enum":["relevance","price_asc","price_desc","name"],"type":"string"},{"type":"null"}],"default":"relevance","description":"Order: relevance, price_asc, price_desc or name.","title":"Sort"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many results per page (1 to 200, default 50).","title":"Per Page"}},"required":["q"],"title":"search_cardsArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}},"/v1/tools/list_top_price_movers":{"post":{"operationId":"list_top_price_movers","summary":"List the cards with the biggest price rises or falls over 24 hours, 7 days or 30 days, optionally for one game. Use for ","description":"List the cards with the biggest price rises or falls over 24 hours, 7 days or 30 days, optionally for one game. Use for \"Which Pokemon cards went up most this week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"game":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only this game slug.","title":"Game"},"direction":{"anyOf":[{"enum":["up","down"],"type":"string"},{"type":"null"}],"default":"up","description":"Movers up or down.","title":"Direction"},"period":{"anyOf":[{"enum":["24h","7d","30d"],"type":"string"},{"type":"null"}],"default":"24h","description":"Time window: 24h, 7d or 30d.","title":"Period"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many cards (1 to 50).","title":"Limit"}},"title":"list_top_price_moversArguments","type":"object"}}}},"responses":{"200":{"description":"Tool result. `ok: true` on success; `ok: false` with a structured `error` (provider_unavailable, upstream_error, bad_input) when the tool could not answer.","content":{"application/json":{"schema":{"type":"object","additionalProperties":true}}}},"422":{"description":"Arguments failed validation","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}},"429":{"description":"Rate limit exceeded (see Retry-After)","content":{"application/json":{"schema":{"$ref":"#/components/schemas/Error"}}}}},"x-read-only":true}}}}