{"openapi":"3.1.0","info":{"title":"Credly (BYOK) API","version":"0.1.0","description":"Credly (BYOK) lets an AI assistant read your own Credly data through the Credly API with a key you supply (Credly organization authorization token). Read-only: 6 tools (get_organization, list_badge_templates, get_badge_template, list_issued_badges, get_issued_badge, list_recommendations). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached;...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-credly.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-credly/docs"},"termsOfService":"https://connectorbay.com/byok-credly/terms"},"servers":[{"url":"https://byok-credly.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-credly/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_organization":{"post":{"operationId":"get_organization","summary":"Show your Credly organization's profile: name, location, verification status, featured badge templates and whether it is","description":"Show your Credly organization's profile: name, location, verification status, featured badge templates and whether it is a trial account. Use for \"What is the profile of my Credly organization\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"UUID of your Credly organization (shown in Organization Management; it also appears in the organization's API URLs).","maxLength":200,"title":"Organization Id","type":"string"}},"required":["organization_id"],"title":"get_organizationArguments","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_badge_templates":{"post":{"operationId":"list_badge_templates","summary":"List the organization's badge templates with state, visibility, number of badges issued, level, time to earn and skills.","description":"List the organization's badge templates with state, visibility, number of badges issued, level, time to earn and skills. Filter by state or name. Use for \"Which active badge templates does my organization have and how many badges were issued from each\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"UUID of your Credly organization (shown in Organization Management; it also appears in the organization's API URLs).","maxLength":200,"title":"Organization Id","type":"string"},"state":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only templates in this state: active, archived or draft (a comma-separated list is accepted).","title":"State"},"name":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Partial match on the template name (wrap in double quotes for an exact match).","title":"Name"},"query":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Partial match on template name or description.","title":"Query"},"sort":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Sort keys joined by |, each optionally prefixed with - for descending: badges_count, created_at, name, updated_at, state, public. Example: -badges_count.","title":"Sort"},"per":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 50).","title":"Per"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["organization_id"],"title":"list_badge_templatesArguments","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_badge_template":{"post":{"operationId":"get_badge_template","summary":"Get one badge template: description, state, visibility, issue counts, level, time to earn, skills and public URL. Use fo","description":"Get one badge template: description, state, visibility, issue counts, level, time to earn, skills and public URL. Use for \"Give me the details of one of my Credly badge templates\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"UUID of your Credly organization (shown in Organization Management; it also appears in the organization's API URLs).","maxLength":200,"title":"Organization Id","type":"string"},"badge_template_id":{"description":"UUID of the badge template (from list_badge_templates).","maxLength":200,"title":"Badge Template Id","type":"string"}},"required":["organization_id","badge_template_id"],"title":"get_badge_templateArguments","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_issued_badges":{"post":{"operationId":"list_issued_badges","summary":"List badges issued by the organization with state, issue and expiry dates and their template. Recipient names and emails","description":"List badges issued by the organization with state, issue and expiry dates and their template. Recipient names and emails are left out of the answer. Filter by state, template or creation date. Use for \"How many badges did we issue from template 9fc20758 since January and what state are they in\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"UUID of your Credly organization (shown in Organization Management; it also appears in the organization's API URLs).","maxLength":200,"title":"Organization Id","type":"string"},"state":{"anyOf":[{"enum":["pending","accepted","rejected","revoked","replaced"],"type":"string"},{"type":"null"}],"default":null,"description":"Only badges in this state: pending, accepted, rejected, revoked or replaced.","title":"State"},"badge_template_id":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only badges from this template UUID (comma-separated UUIDs accepted).","title":"Badge Template Id"},"created_at_min":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only badges created at or after this ISO 8601 time, for example 2026-01-01T00:00:00Z.","title":"Created At Min"},"created_at_max":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only badges created at or before this ISO 8601 time.","title":"Created At Max"},"sort":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Sort keys joined by |, optionally prefixed with -: created_at, issued_at, state, state_updated_at.","title":"Sort"},"per":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 50).","title":"Per"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["organization_id"],"title":"list_issued_badgesArguments","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_issued_badge":{"post":{"operationId":"get_issued_badge","summary":"Get one issued badge by id: state, issue and expiry dates, visibility and its template. Recipient details are left out. ","description":"Get one issued badge by id: state, issue and expiry dates, visibility and its template. Recipient details are left out. Use for \"What is the state of issued Credly badge a1b2c3d4\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"UUID of your Credly organization (shown in Organization Management; it also appears in the organization's API URLs).","maxLength":200,"title":"Organization Id","type":"string"},"badge_id":{"description":"UUID of the issued badge (from list_issued_badges).","maxLength":200,"title":"Badge Id","type":"string"}},"required":["organization_id","badge_id"],"title":"get_issued_badgeArguments","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_recommendations":{"post":{"operationId":"list_recommendations","summary":"List the learning recommendations configured in the organization (title, type, linked template count and last update). U","description":"List the learning recommendations configured in the organization (title, type, linked template count and last update). Use for \"What learning recommendations are set up in our Credly account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"organization_id":{"description":"UUID of your Credly organization (shown in Organization Management; it also appears in the organization's API URLs).","maxLength":200,"title":"Organization Id","type":"string"},"per":{"anyOf":[{"maximum":50,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many results per page (1 to 50).","title":"Per"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"}},"required":["organization_id"],"title":"list_recommendationsArguments","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}}}}