{"openapi":"3.1.0","info":{"title":"WaniKani (BYOK) API","version":"0.1.0","description":"WaniKani (BYOK) lets an AI assistant read your own WaniKani data through the WaniKani API with a key you supply (WaniKani API v2 token (read-only is enough)). Read-only: 9 tools (get_user, get_summary, list_subjects, get_subject, list_assignments, list_review_statistics, list_level_progressions, list_spaced_repetition_systems, list_voice_actors). 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-wanikani.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-wanikani/docs"},"termsOfService":"https://connectorbay.com/byok-wanikani/terms"},"servers":[{"url":"https://byok-wanikani.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-wanikani/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_user":{"post":{"operationId":"get_user","summary":"Get the account the token belongs to: username, current level, start date, subscription type and study preferences. Use ","description":"Get the account the token belongs to: username, current level, start date, subscription type and study preferences. Use for \"What WaniKani level am I on\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_userArguments","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_summary":{"post":{"operationId":"get_summary","summary":"Get the lessons available now and the reviews coming in the next 24 hours, grouped by hour, with the subject ids in each","description":"Get the lessons available now and the reviews coming in the next 24 hours, grouped by hour, with the subject ids in each batch. Use for \"How many WaniKani reviews do I have coming up today\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_summaryArguments","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_subjects":{"post":{"operationId":"list_subjects","summary":"List WaniKani reference subjects (radicals, kanji, vocabulary) filtered by type, level or slug, with meanings and readin","description":"List WaniKani reference subjects (radicals, kanji, vocabulary) filtered by type, level or slug, with meanings and readings. Up to 1000 per page. Use for \"Show the kanji taught at WaniKani level 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"types":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated subject types: radical, kanji, vocabulary, kana_vocabulary.","title":"Types"},"levels":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated levels (1 to 60) to restrict to, for example '1,2'.","title":"Levels"},"slugs":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated slugs, for example the characters themselves.","title":"Slugs"},"ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated record ids to return, for example '1,2,3'.","title":"Ids"},"page_after_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor for the next page: pass the last id of the previous page (see pages.next_url).","title":"Page After Id"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records updated after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Updated After"}},"title":"list_subjectsArguments","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_subject":{"post":{"operationId":"get_subject","summary":"Get one radical, kanji or vocabulary item by its subject id with meanings, readings, level and component ids. Use for \"W","description":"Get one radical, kanji or vocabulary item by its subject id with meanings, readings, level and component ids. Use for \"What does WaniKani subject 440 mean and how is it read\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"subject_id":{"description":"Numeric WaniKani subject id, for example 440.","title":"Subject Id","type":"integer"}},"required":["subject_id"],"title":"get_subjectArguments","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_assignments":{"post":{"operationId":"list_assignments","summary":"List the token owner's assignments (their progress per subject): SRS stage, unlock, start, pass and burn dates, and when","description":"List the token owner's assignments (their progress per subject): SRS stage, unlock, start, pass and burn dates, and when each next becomes available. Use for \"Which of my WaniKani items are available for review right now\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"immediately_available_for_review":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only assignments that can be reviewed now.","title":"Immediately Available For Review"},"immediately_available_for_lessons":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to return only assignments that can be learned now.","title":"Immediately Available For Lessons"},"burned":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for burned items only, false for not burned.","title":"Burned"},"started":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for started items only, false for not started.","title":"Started"},"srs_stages":{"anyOf":[{"maxLength":50,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated SRS stages (0 to 9).","title":"Srs Stages"},"levels":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated levels (1 to 60) to restrict to, for example '1,2'.","title":"Levels"},"subject_types":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated subject types: radical, kanji, vocabulary, kana_vocabulary.","title":"Subject Types"},"subject_ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated subject ids to restrict to.","title":"Subject Ids"},"page_after_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor for the next page: pass the last id of the previous page (see pages.next_url).","title":"Page After Id"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records updated after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Updated After"}},"title":"list_assignmentsArguments","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_review_statistics":{"post":{"operationId":"list_review_statistics","summary":"List the token owner's review statistics per subject: correct and incorrect counts, streaks and percentage correct. Use ","description":"List the token owner's review statistics per subject: correct and incorrect counts, streaks and percentage correct. Use for \"Which WaniKani items am I getting wrong most often\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"percentages_less_than":{"anyOf":[{"maximum":100,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only items whose percentage correct is below this number (0 to 100).","title":"Percentages Less Than"},"percentages_greater_than":{"anyOf":[{"maximum":100,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only items whose percentage correct is above this number (0 to 100).","title":"Percentages Greater Than"},"subject_types":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated subject types: radical, kanji, vocabulary, kana_vocabulary.","title":"Subject Types"},"subject_ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated subject ids to restrict to.","title":"Subject Ids"},"page_after_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor for the next page: pass the last id of the previous page (see pages.next_url).","title":"Page After Id"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records updated after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Updated After"}},"title":"list_review_statisticsArguments","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_level_progressions":{"post":{"operationId":"list_level_progressions","summary":"List the token owner's level progressions: when each level was unlocked, started, passed, completed or abandoned. Use fo","description":"List the token owner's level progressions: when each level was unlocked, started, passed, completed or abandoned. Use for \"How long did each of my WaniKani levels take\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated record ids to return, for example '1,2,3'.","title":"Ids"},"page_after_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor for the next page: pass the last id of the previous page (see pages.next_url).","title":"Page After Id"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records updated after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Updated After"}},"title":"list_level_progressionsArguments","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_spaced_repetition_systems":{"post":{"operationId":"list_spaced_repetition_systems","summary":"List the spaced repetition systems with their stage intervals, which explain how long each SRS stage waits before the ne","description":"List the spaced repetition systems with their stage intervals, which explain how long each SRS stage waits before the next review. Use for \"What review intervals does WaniKani use for each SRS stage\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated record ids to return, for example '1,2,3'.","title":"Ids"},"page_after_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor for the next page: pass the last id of the previous page (see pages.next_url).","title":"Page After Id"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records updated after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Updated After"}},"title":"list_spaced_repetition_systemsArguments","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_voice_actors":{"post":{"operationId":"list_voice_actors","summary":"List the voice actors whose recordings accompany vocabulary, with gender and accent description. Use for \"Which voice ac","description":"List the voice actors whose recordings accompany vocabulary, with gender and accent description. Use for \"Which voice actors does WaniKani use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ids":{"anyOf":[{"maxLength":500,"type":"string"},{"type":"null"}],"default":null,"description":"Comma-separated record ids to return, for example '1,2,3'.","title":"Ids"},"page_after_id":{"anyOf":[{"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Cursor for the next page: pass the last id of the previous page (see pages.next_url).","title":"Page After Id"},"updated_after":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only records updated after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Updated After"}},"title":"list_voice_actorsArguments","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}}}}