{"openapi":"3.1.0","info":{"title":"wger (BYOK) API","version":"0.1.0","description":"wger (BYOK) lets an AI assistant read your own wger data through the wger API with a key you supply (wger API key (permanent token) for wger.de). Read-only: 12 tools (get_profile, list_weight_entries, list_routines, list_workout_sessions, list_workout_logs, list_measurement_categories, list_measurements, list_nutrition_plans, search_exercises, list_muscles, list_equipment, search_ingredients)....\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-wger.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-wger/docs"},"termsOfService":"https://connectorbay.com/byok-wger/terms"},"servers":[{"url":"https://byok-wger.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-wger/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_profile":{"post":{"operationId":"get_profile","summary":"Show the account profile on wger.de: user name, join date, age, height, gender, preferred weight unit, daily calories an","description":"Show the account profile on wger.de: user name, join date, age, height, gender, preferred weight unit, daily calories and time zone. Use for \"What does my wger profile say\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_profileArguments","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_weight_entries":{"post":{"operationId":"list_weight_entries","summary":"List body weight entries (date and weight) of the account, newest first by default; filter by date range. Use for \"What ","description":"List body weight entries (date and weight) of the account, newest first by default; filter by date range. Use for \"What has my weight been over the last months in wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries on or after this date (YYYY-MM-DD).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries on or before this date (YYYY-MM-DD).","title":"Date To"},"ordering":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"-date","description":"Sort field, prefix '-' to reverse, for example '-date' (newest first) or 'date'.","title":"Ordering"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_weight_entriesArguments","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_routines":{"post":{"operationId":"list_routines","summary":"List the account's training routines (and optionally templates) with name, description, start and end dates. Use for \"Wh","description":"List the account's training routines (and optionally templates) with name, description, start and end dates. Use for \"Which training routines do I have in wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"is_template":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to list only template routines, false for only non-templates; omit for all.","title":"Is Template"},"ordering":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Sort field, prefix '-' to reverse, for example '-created'.","title":"Ordering"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_routinesArguments","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_workout_sessions":{"post":{"operationId":"list_workout_sessions","summary":"List logged workout sessions with routine, day, notes, impression (1 bad, 2 neutral, 3 good) and start and end time. Use","description":"List logged workout sessions with routine, day, notes, impression (1 bad, 2 neutral, 3 good) and start and end time. Use for \"When did I last work out according to wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_after":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only sessions that started after this time (ISO 8601 date or date-time).","title":"Start After"},"start_before":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Only sessions that started before this time (ISO 8601 date or date-time).","title":"Start Before"},"routine":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only sessions of this routine id.","title":"Routine"},"ordering":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"-datetime_start","description":"Sort field, prefix '-' to reverse, for example '-datetime_start'.","title":"Ordering"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_workout_sessionsArguments","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_workout_logs":{"post":{"operationId":"list_workout_logs","summary":"List logged exercise sets (repetitions, weight, rest, RIR with targets) filtered by exercise id, routine id or date rang","description":"List logged exercise sets (repetitions, weight, rest, RIR with targets) filtered by exercise id, routine id or date range. Use for \"What weights did I lift for exercise 345 in wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"exercise":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only logs of this exercise id (from search_exercises).","title":"Exercise"},"routine":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only logs of this routine id.","title":"Routine"},"date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries on or after this date (YYYY-MM-DD).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries on or before this date (YYYY-MM-DD).","title":"Date To"},"ordering":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"-date","description":"Sort field, prefix '-' to reverse, for example '-date'.","title":"Ordering"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_workout_logsArguments","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_measurement_categories":{"post":{"operationId":"list_measurement_categories","summary":"List the account's body measurement categories (for example body fat, steps, custom ones) with unit and metric type; the","description":"List the account's body measurement categories (for example body fat, steps, custom ones) with unit and metric type; the id is used in list_measurements. Use for \"What measurement categories do I track in wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"metric_type":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only this metric type, for example body_fat, steps, heart_rate or custom.","title":"Metric Type"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_measurement_categoriesArguments","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_measurements":{"post":{"operationId":"list_measurements","summary":"List body measurement values (date, value, source) of the account, optionally for one category id and date range. Use fo","description":"List body measurement values (date, value, source) of the account, optionally for one category id and date range. Use for \"Show my body fat measurements from wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"category":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Only this measurement category id (from list_measurement_categories).","title":"Category"},"date_from":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries on or after this date (YYYY-MM-DD).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only entries on or before this date (YYYY-MM-DD).","title":"Date To"},"ordering":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":"-date","description":"Sort field, prefix '-' to reverse, for example '-date'.","title":"Ordering"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_measurementsArguments","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_nutrition_plans":{"post":{"operationId":"list_nutrition_plans","summary":"List the account's nutrition plans with description, dates and daily goals for energy, protein, carbohydrates, fat and f","description":"List the account's nutrition plans with description, dates and daily goals for energy, protein, carbohydrates, fat and fibre. Use for \"What nutrition plans do I have in wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"ordering":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Sort field, prefix '-' to reverse, for example '-creation_date'.","title":"Ordering"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_nutrition_plansArguments","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_exercises":{"post":{"operationId":"search_exercises","summary":"Search the wger exercise database by name, with muscles, equipment, category and translated names and descriptions; filt","description":"Search the wger exercise database by name, with muscles, equipment, category and translated names and descriptions; filter by category, muscle or equipment id. Use for \"Find exercises for the biceps with a dumbbell in wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name_search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Words in the exercise name, for example 'curl'.","title":"Name Search"},"category":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Exercise category id (the category.id shown in exercise results).","title":"Category"},"muscles":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Primary muscle id (see list_muscles).","title":"Muscles"},"equipment":{"anyOf":[{"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Equipment id (see list_equipment).","title":"Equipment"},"language_code":{"anyOf":[{"maxLength":5,"type":"string"},{"type":"null"}],"default":"en","description":"Language code of the texts, for example 'en' or 'de'; unknown codes fall back to English.","title":"Language Code"},"limit":{"anyOf":[{"maximum":20,"minimum":1,"type":"integer"},{"type":"null"}],"default":5,"description":"How many exercises to return (1 to 20).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"search_exercisesArguments","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_muscles":{"post":{"operationId":"list_muscles","summary":"List the muscles of the wger exercise database with id and name; the id is a filter for search_exercises. Use for \"What ","description":"List the muscles of the wger exercise database with id and name; the id is a filter for search_exercises. Use for \"What muscle ids does wger use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_musclesArguments","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_equipment":{"post":{"operationId":"list_equipment","summary":"List exercise equipment of the wger database with id and name; the id is a filter for search_exercises. Use for \"What eq","description":"List exercise equipment of the wger database with id and name; the id is a filter for search_exercises. Use for \"What equipment ids does wger use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results to return (1 to 100).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"title":"list_equipmentArguments","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_ingredients":{"post":{"operationId":"search_ingredients","summary":"Search the wger food database by name: energy, protein, carbohydrates, sugar, fat, fibre, sodium, Nutri-Score and vegan ","description":"Search the wger food database by name: energy, protein, carbohydrates, sugar, fat, fibre, sodium, Nutri-Score and vegan or vegetarian flags per 100 g. Use for \"How much protein does chicken breast have according to wger\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"name_search":{"description":"Words in the food name, for example 'chicken breast'.","maxLength":100,"title":"Name Search","type":"string"},"language_code":{"anyOf":[{"maxLength":5,"type":"string"},{"type":"null"}],"default":"en","description":"Language code of the texts, for example 'en' or 'de'; unknown codes fall back to English.","title":"Language Code"},"limit":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":10,"description":"How many foods to return (1 to 50).","title":"Limit"},"offset":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"How many results to skip, for paging.","title":"Offset"}},"required":["name_search"],"title":"search_ingredientsArguments","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}}}}