{"openapi":"3.1.0","info":{"title":"TalentLMS (BYOK) API","version":"0.1.0","description":"TalentLMS (BYOK) lets an AI assistant read your own TalentLMS data through the TalentLMS API with a key you supply (TalentLMS API key (a super administrator must enable the API under Account & Settings)). Read-only: 10 tools (list_users, get_user, list_courses, get_course, get_user_course_status, list_categories, list_groups, list_branches, get_domain_info, get_rate_limit). The BYOK key travels...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-talentlms.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-talentlms/docs"},"termsOfService":"https://connectorbay.com/byok-talentlms/terms"},"servers":[{"url":"https://byok-talentlms.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-talentlms/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_users":{"post":{"operationId":"list_users","summary":"List the learners and administrators of the TalentLMS domain with login, name, email, user type, status, level, points a","description":"List the learners and administrators of the TalentLMS domain with login, name, email, user type, status, level, points and dates. Auto-login links and bios are left out. Not paged: the whole list is returned, cut to the first 100 records by this connector. Use for \"Which users does my TalentLMS domain have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"}},"required":["domain"],"title":"list_usersArguments","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_user":{"post":{"operationId":"get_user","summary":"Get one TalentLMS user by id with login, name, email, user type, status, level, points and dates (no auto-login link or ","description":"Get one TalentLMS user by id with login, name, email, user type, status, level, points and dates (no auto-login link or course list). Use for \"Show TalentLMS user 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"user_id":{"description":"TalentLMS user id from list_users.","maximum":999999999,"minimum":1,"title":"User Id","type":"integer"}},"required":["domain","user_id"],"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/list_courses":{"post":{"operationId":"list_courses","summary":"List courses with name, code, category, price, status, dates, creator, catalog visibility and certification settings. No","description":"List courses with name, code, category, price, status, dates, creator, catalog visibility and certification settings. Not paged: the whole list is returned, cut to the first 100 records by this connector. Use for \"What courses are available in TalentLMS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"}},"required":["domain"],"title":"list_coursesArguments","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_course":{"post":{"operationId":"get_course","summary":"Get one course by id with name, code, category, status, dates, certification settings and the learners enrolled with the","description":"Get one course by id with name, code, category, status, dates, certification settings and the learners enrolled with their completion percentage. Use for \"Show TalentLMS course 1 and who is enrolled\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"course_id":{"description":"TalentLMS course id from list_courses.","maximum":999999999,"minimum":1,"title":"Course Id","type":"integer"}},"required":["domain","course_id"],"title":"get_courseArguments","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_user_course_status":{"post":{"operationId":"get_user_course_status","summary":"Get one user's progress in one course: role, enrolment and completion dates, completion percentage, time spent and per-u","description":"Get one user's progress in one course: role, enrolment and completion dates, completion percentage, time spent and per-unit status and score. Use for \"How far has TalentLMS user 2 got in course 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"},"course_id":{"description":"TalentLMS course id.","maximum":999999999,"minimum":1,"title":"Course Id","type":"integer"},"user_id":{"description":"TalentLMS user id.","maximum":999999999,"minimum":1,"title":"User Id","type":"integer"}},"required":["domain","course_id","user_id"],"title":"get_user_course_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/list_categories":{"post":{"operationId":"list_categories","summary":"List course categories with name, price and parent category. Use for \"How are TalentLMS courses categorised\".","description":"List course categories with name, price and parent category. Use for \"How are TalentLMS courses categorised\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"}},"required":["domain"],"title":"list_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_groups":{"post":{"operationId":"list_groups","summary":"List learner groups with name, description, price, owner and redemption counters. Join keys are left out. Not paged: the","description":"List learner groups with name, description, price, owner and redemption counters. Join keys are left out. Not paged: the whole list is returned, cut to the first 100 records by this connector. Use for \"Which groups exist in TalentLMS\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"}},"required":["domain"],"title":"list_groupsArguments","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_branches":{"post":{"operationId":"list_branches","summary":"List branches (separate portals of the domain) with name, description, time zone, language, user type and sign-up method","description":"List branches (separate portals of the domain) with name, description, time zone, language, user type and sign-up method. Not paged: the whole list is returned, cut to the first 100 records by this connector. Use for \"Which branches does my TalentLMS domain have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"}},"required":["domain"],"title":"list_branchesArguments","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_domain_info":{"post":{"operationId":"get_domain_info","summary":"Show domain totals: users, courses, categories, groups, branches, monthly active users, sign-up method and date format. ","description":"Show domain totals: users, courses, categories, groups, branches, monthly active users, sign-up method and date format. Use for \"How many users and courses does my TalentLMS domain have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"}},"required":["domain"],"title":"get_domain_infoArguments","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_rate_limit":{"post":{"operationId":"get_rate_limit","summary":"Show the TalentLMS API hourly limit, calls remaining and when the window resets. This call does not count against the li","description":"Show the TalentLMS API hourly limit, calls remaining and when the window resets. This call does not count against the limit. Use for \"How many TalentLMS API calls do I have left this hour\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain":{"description":"Your TalentLMS domain name: 'acme' for acme.talentlms.com.","maxLength":63,"pattern":"^[a-z0-9]([a-z0-9-]{0,61}[a-z0-9])?$","title":"Domain","type":"string"}},"required":["domain"],"title":"get_rate_limitArguments","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}}}}