{"openapi":"3.1.0","info":{"title":"Coassemble (BYOK) API","version":"0.1.0","description":"Coassemble (BYOK) lets an AI assistant read your own Coassemble data through the Coassemble API with a key you supply (Coassemble key as COASSEMBLE:WORKSPACE_ID:API_KEY). Read-only: 11 tools (list_courses, get_course, list_collections, get_collection, list_themes, get_theme, list_layouts, get_workspace_allowances, get_client_allowances, get_default_client_caps, list_client_usage). The BYOK key...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-coassemble.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-coassemble/docs"},"termsOfService":"https://connectorbay.com/byok-coassemble/terms"},"servers":[{"url":"https://byok-coassemble.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-coassemble/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_courses":{"post":{"operationId":"list_courses","summary":"List the courses of the workspace with title, description, language, estimated minutes, publish state and share key. Scr","description":"List the courses of the workspace with title, description, language, estimated minutes, publish state and share key. Screens and blocks are not returned. Needs the Build plan or above. Use for \"Which courses do we have in Coassemble and which are published\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"title":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only courses whose title matches this text.","title":"Title"},"client_identifier":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items that belong to this client identifier (your own stable id for a customer or tenant).","title":"Client Identifier"},"deleted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"Include soft-deleted courses.","title":"Deleted"},"length":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return per page (1 to 100).","title":"Length"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"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: title, description, language, estimated minutes, publish dates, theme and share settings. Screens and bl","description":"Get one course: title, description, language, estimated minutes, publish dates, theme and share settings. Screens and blocks are not returned. Use for \"When was Coassemble course 1234 last updated\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"course_id":{"description":"Coassemble course id (from list_courses).","title":"Course Id","type":"integer"}},"required":["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/list_collections":{"post":{"operationId":"list_collections","summary":"List collections (curated learning paths of courses) with title, description, share key and sharing flags. The course li","description":"List collections (curated learning paths of courses) with title, description, share key and sharing flags. The course lists inside them are not returned. Use for \"Which learning-path collections exist in Coassemble\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_identifier":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Only items that belong to this client identifier (your own stable id for a customer or tenant).","title":"Client Identifier"},"deleted":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":false,"description":"Include soft-deleted collections.","title":"Deleted"},"length":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":100,"description":"How many items to return per page (1 to 100).","title":"Length"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"title":"list_collectionsArguments","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_collection":{"post":{"operationId":"get_collection","summary":"Get one collection: title, description, share key, theme and sharing flags. The course list inside it is not returned. U","description":"Get one collection: title, description, share key, theme and sharing flags. The course list inside it is not returned. Use for \"What are the settings of Coassemble collection 501\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"collection_id":{"description":"Coassemble collection id (from list_collections).","title":"Collection Id","type":"integer"}},"required":["collection_id"],"title":"get_collectionArguments","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_themes":{"post":{"operationId":"list_themes","summary":"List the workspace-level themes (branding) with name, default flag and logo. Use for \"Which brand themes are set up in C","description":"List the workspace-level themes (branding) with name, default flag and logo. Use for \"Which brand themes are set up in Coassemble\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"length":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many themes to return (1 to 100).","title":"Length"}},"title":"list_themesArguments","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_theme":{"post":{"operationId":"get_theme","summary":"Get one theme: name, default flag, logo and dates. Use for \"What does Coassemble theme 77 look like (name and logo)\".","description":"Get one theme: name, default flag, logo and dates. Use for \"What does Coassemble theme 77 look like (name and logo)\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"theme_id":{"description":"Coassemble theme id (from list_themes).","title":"Theme Id","type":"integer"}},"required":["theme_id"],"title":"get_themeArguments","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_layouts":{"post":{"operationId":"list_layouts","summary":"List the catalog of screen layouts (id, name, category, screen type) that can be used when building library screens. Use","description":"List the catalog of screen layouts (id, name, category, screen type) that can be used when building library screens. Use for \"Which screen layouts does Coassemble offer\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_layoutsArguments","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_workspace_allowances":{"post":{"operationId":"get_workspace_allowances","summary":"Get the current billing-period allowances and usage of the workspace: identified and anonymous recipients, narration usa","description":"Get the current billing-period allowances and usage of the workspace: identified and anonymous recipients, narration usage and image generations, with limits and reset dates. Use for \"How much of our Coassemble allowance have we used this period\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_workspace_allowancesArguments","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_client_allowances":{"post":{"operationId":"get_client_allowances","summary":"Get the monthly AI allowance rows (narration and image generation) and current usage for one client identifier. Use for ","description":"Get the monthly AI allowance rows (narration and image generation) and current usage for one client identifier. Use for \"How much AI narration has client_123 used in Coassemble this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"client_identifier":{"description":"Your stable client identifier, for example 'client_123'.","maxLength":200,"title":"Client Identifier","type":"string"}},"required":["client_identifier"],"title":"get_client_allowancesArguments","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_default_client_caps":{"post":{"operationId":"get_default_client_caps","summary":"Get the workspace default narration and image caps that new clients receive, whether client caps are enabled, and how ma","description":"Get the workspace default narration and image caps that new clients receive, whether client caps are enabled, and how many existing clients differ. Use for \"What default AI caps do new Coassemble clients get\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_default_client_capsArguments","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_client_usage":{"post":{"operationId":"list_client_usage","summary":"List usage per client identifier and metric for a date window (up to 366 days). Aggregate counters only. Use for \"How mu","description":"List usage per client identifier and metric for a date window (up to 366 days). Aggregate counters only. Use for \"How much did each of our Coassemble clients use last month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Start of the usage window, an ISO date such as 2026-09-01.","title":"Start"},"end":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"End of the usage window, an ISO date such as 2026-09-30.","title":"End"},"length":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"description":"How many rows to return per page (1 to 100).","title":"Length"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"}},"title":"list_client_usageArguments","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}}}}