{"openapi":"3.1.0","info":{"title":"HenrikDev (BYOK) API","version":"0.1.0","description":"HenrikDev (BYOK) lets an AI assistant read your own HenrikDev data through the HenrikDev API with a key you supply (HenrikDev API key). Read-only: 12 tools (get_account, get_account_by_puuid, get_mmr, get_mmr_history, list_matches, get_match, get_leaderboard, get_content, get_server_status, get_queue_status, get_esports_schedule, get_premier_team). The BYOK key travels with each request, is used...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-henrikdev.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-henrikdev/docs"},"termsOfService":"https://connectorbay.com/byok-henrikdev/terms"},"servers":[{"url":"https://byok-henrikdev.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-henrikdev/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/get_account":{"post":{"operationId":"get_account","summary":"Look up a Valorant account by Riot ID (name and tag): PUUID, region, account level, card, title and platforms. Use for \"","description":"Look up a Valorant account by Riot ID (name and tag): PUUID, region, account level, card, title and platforms. Use for \"What is the Valorant account level and region of Henrik3#EUW3\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"Riot ID name (the part before the #), for example 'Henrik3'.","maxLength":32,"title":"Name","type":"string"},"tag":{"description":"Riot ID tag (the part after the #), for example 'EUW3'.","maxLength":10,"title":"Tag","type":"string"}},"required":["name","tag"],"title":"get_accountArguments","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_account_by_puuid":{"post":{"operationId":"get_account_by_puuid","summary":"Look up a Valorant account by PUUID: Riot ID, region, account level, card, title and platforms. Use for \"Which Valorant ","description":"Look up a Valorant account by PUUID: Riot ID, region, account level, card, title and platforms. Use for \"Which Valorant account has PUUID 54942ced-1967-5f66-8a16-1e0dae875641\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"puuid":{"description":"Player PUUID from get_account.","maxLength":64,"title":"Puuid","type":"string"}},"required":["puuid"],"title":"get_account_by_puuidArguments","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_mmr":{"post":{"operationId":"get_mmr","summary":"Get a player's current competitive rank (tier, RR, Elo, last change), peak rank and per-season results. Use for \"What is","description":"Get a player's current competitive rank (tier, RR, Elo, last change), peak rank and per-season results. Use for \"What is the Valorant rank of Henrik3#EUW3\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"affinity":{"description":"Region of the player: eu, na, latam, br, ap or kr.","maxLength":8,"title":"Affinity","type":"string"},"platform":{"description":"Platform: pc or console.","maxLength":10,"title":"Platform","type":"string"},"name":{"description":"Riot ID name (the part before the #), for example 'Henrik3'.","maxLength":32,"title":"Name","type":"string"},"tag":{"description":"Riot ID tag (the part after the #), for example 'EUW3'.","maxLength":10,"title":"Tag","type":"string"}},"required":["affinity","platform","name","tag"],"title":"get_mmrArguments","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_mmr_history":{"post":{"operationId":"get_mmr_history","summary":"Get a player's recent competitive rating changes per match: date, map, tier, RR and change. Use for \"How did Henrik3#EUW","description":"Get a player's recent competitive rating changes per match: date, map, tier, RR and change. Use for \"How did Henrik3#EUW3's Valorant rank change over the last matches\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"affinity":{"description":"Region of the player: eu, na, latam, br, ap or kr.","maxLength":8,"title":"Affinity","type":"string"},"platform":{"description":"Platform: pc or console.","maxLength":10,"title":"Platform","type":"string"},"name":{"description":"Riot ID name (the part before the #), for example 'Henrik3'.","maxLength":32,"title":"Name","type":"string"},"tag":{"description":"Riot ID tag (the part after the #), for example 'EUW3'.","maxLength":10,"title":"Tag","type":"string"}},"required":["affinity","platform","name","tag"],"title":"get_mmr_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/list_matches":{"post":{"operationId":"list_matches","summary":"List a player's recent matches (10 by default) with match ID, start time, map, queue, length and team results. Filter by","description":"List a player's recent matches (10 by default) with match ID, start time, map, queue, length and team results. Filter by mode or map. Use for \"What were Henrik3#EUW3's last Valorant competitive matches\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"affinity":{"description":"Region of the player: eu, na, latam, br, ap or kr.","maxLength":8,"title":"Affinity","type":"string"},"platform":{"description":"Platform: pc or console.","maxLength":10,"title":"Platform","type":"string"},"name":{"description":"Riot ID name (the part before the #), for example 'Henrik3'.","maxLength":32,"title":"Name","type":"string"},"tag":{"description":"Riot ID tag (the part after the #), for example 'EUW3'.","maxLength":10,"title":"Tag","type":"string"},"mode":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this game mode, for example 'competitive', 'unrated' or 'premier'.","title":"Mode"},"map":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this map, for example 'ascent'.","title":"Map"},"size":{"anyOf":[{"maximum":10,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"Number of matches to return (1 to 10).","title":"Size"},"start":{"anyOf":[{"maximum":1000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Offset into the match history, to page further back.","title":"Start"}},"required":["affinity","platform","name","tag"],"title":"list_matchesArguments","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_match":{"post":{"operationId":"get_match","summary":"Get one Valorant match by ID: metadata, team results and every player with agent, stats, economy and rank (kills and rou","description":"Get one Valorant match by ID: metadata, team results and every player with agent, stats, economy and rank (kills and rounds are left out for size). Use for \"Who won match m1 and how did each player do\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"affinity":{"description":"Region of the player: eu, na, latam, br, ap or kr.","maxLength":8,"title":"Affinity","type":"string"},"match_id":{"description":"Match ID from list_matches.","maxLength":64,"title":"Match Id","type":"string"}},"required":["affinity","match_id"],"title":"get_matchArguments","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_leaderboard":{"post":{"operationId":"get_leaderboard","summary":"Get the ranked leaderboard of a region and platform: rank, name, RR, tier and wins, plus the tier thresholds. Optionally","description":"Get the ranked leaderboard of a region and platform: rank, name, RR, tier and wins, plus the tier thresholds. Optionally for one season, or find a player by name and tag. Use for \"Who is at the top of the Valorant EU leaderboard\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"affinity":{"description":"Region of the player: eu, na, latam, br, ap or kr.","maxLength":8,"title":"Affinity","type":"string"},"platform":{"description":"Platform: pc or console.","maxLength":10,"title":"Platform","type":"string"},"season":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Season short ID such as 'e9a1'. Defaults to the current season.","title":"Season"},"size":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"Number of players to return.","title":"Size"},"page":{"anyOf":[{"maximum":1000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"name":{"anyOf":[{"maxLength":32,"type":"string"},{"type":"null"}],"default":null,"description":"Find this player (use with tag).","title":"Name"},"tag":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Tag of the player to find.","title":"Tag"}},"required":["affinity","platform"],"title":"get_leaderboardArguments","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_content":{"post":{"operationId":"get_content","summary":"Get the Valorant game content catalogue: current version, acts, maps, agents (characters) and game modes (skins and cosm","description":"Get the Valorant game content catalogue: current version, acts, maps, agents (characters) and game modes (skins and cosmetics are left out for size). Use for \"Which agents and maps exist in Valorant right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"locale":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Locale for names, for example 'en-US'.","title":"Locale"}},"title":"get_contentArguments","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_server_status":{"post":{"operationId":"get_server_status","summary":"Get open incidents and maintenance for the Valorant servers of a region. Use for \"Are there any Valorant incidents or ma","description":"Get open incidents and maintenance for the Valorant servers of a region. Use for \"Are there any Valorant incidents or maintenance in EU\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"affinity":{"description":"Region of the player: eu, na, latam, br, ap or kr.","maxLength":8,"title":"Affinity","type":"string"}},"required":["affinity"],"title":"get_server_statusArguments","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_queue_status":{"post":{"operationId":"get_queue_status","summary":"Get the Valorant matchmaking queues of a region: mode, whether enabled, ranked, team and party size and maps. Use for \"W","description":"Get the Valorant matchmaking queues of a region: mode, whether enabled, ranked, team and party size and maps. Use for \"Which Valorant queues are enabled in EU\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"affinity":{"description":"Region of the player: eu, na, latam, br, ap or kr.","maxLength":8,"title":"Affinity","type":"string"}},"required":["affinity"],"title":"get_queue_statusArguments","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_esports_schedule":{"post":{"operationId":"get_esports_schedule","summary":"Get the Valorant esports match schedule, optionally for one region or league. Use for \"What Valorant esports matches are","description":"Get the Valorant esports match schedule, optionally for one region or league. Use for \"What Valorant esports matches are coming up\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"region":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only this esports region such as 'international', 'emea' or 'americas'.","title":"Region"},"league":{"anyOf":[{"maxLength":60,"type":"string"},{"type":"null"}],"default":null,"description":"Only this league.","title":"League"}},"title":"get_esports_scheduleArguments","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_premier_team":{"post":{"operationId":"get_premier_team","summary":"Get a Valorant Premier team by name and tag: placement, record and members. Use for \"How is the Premier team 'Henrik' do","description":"Get a Valorant Premier team by name and tag: placement, record and members. Use for \"How is the Premier team 'Henrik' doing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name":{"description":"Premier team name.","maxLength":40,"title":"Name","type":"string"},"tag":{"description":"Premier team tag.","maxLength":10,"title":"Tag","type":"string"},"season":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Season short ID such as 'e9a1'.","title":"Season"}},"required":["name","tag"],"title":"get_premier_teamArguments","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}}}}