{"openapi":"3.1.0","info":{"title":"OpsLevel (BYOK) API","version":"0.1.0","description":"OpsLevel (BYOK) lets an AI assistant read your own OpsLevel data through the OpsLevel API with a key you supply (OpsLevel API token). Read-only: 12 tools (get_account, list_services, get_service, list_teams, list_systems, list_domains, list_scorecards, list_lifecycles, list_tiers, list_component_types, list_infrastructure_resources, list_deploys). 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-opslevel.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-opslevel/docs"},"termsOfService":"https://connectorbay.com/byok-opslevel/terms"},"servers":[{"url":"https://byok-opslevel.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-opslevel/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_account":{"post":{"operationId":"get_account","summary":"Get the name of the OpsLevel account the token belongs to (a quick check that the token works). Use for \"Which OpsLevel ","description":"Get the name of the OpsLevel account the token belongs to (a quick check that the token works). Use for \"Which OpsLevel account is this token for\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_accountArguments","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_services":{"post":{"operationId":"list_services","summary":"List catalog services (components) with owner team, lifecycle, tier, language, framework, product and component type. Fi","description":"List catalog services (components) with owner team, lifecycle, tier, language, framework, product and component type. Filter by text, owner, lifecycle, tier, language, framework or product. Use for \"Which Tier 1 services does the payments team own in OpsLevel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"},"search_term":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Match against service names.","title":"Search Term"},"owner_alias":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only services owned by the team with this alias.","title":"Owner Alias"},"lifecycle_alias":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only services in this lifecycle, for example 'production'.","title":"Lifecycle Alias"},"tier_alias":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only services in this tier, for example 'tier_1'.","title":"Tier Alias"},"language":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only services written in this language.","title":"Language"},"framework":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only services using this framework.","title":"Framework"},"product":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only services of this product.","title":"Product"}},"title":"list_servicesArguments","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_service":{"post":{"operationId":"get_service","summary":"Get one service by alias: owner, lifecycle, tier, tags, maturity level, last deploy time and environment, and descriptio","description":"Get one service by alias: owner, lifecycle, tier, tags, maturity level, last deploy time and environment, and description. Deploy authors are not returned. Use for \"Show the payments-api service in OpsLevel with its tags and maturity level\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"alias":{"description":"Alias of the service, usually its slug (list_services returns it).","maxLength":200,"title":"Alias","type":"string"}},"required":["alias"],"title":"get_serviceArguments","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_teams":{"post":{"operationId":"list_teams","summary":"List teams with alias, link, responsibilities and parent team. Members, managers and contact details are not returned. U","description":"List teams with alias, link, responsibilities and parent team. Members, managers and contact details are not returned. Use for \"Which teams exist in OpsLevel\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"},"search_term":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Match against team names.","title":"Search Term"}},"title":"list_teamsArguments","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_systems":{"post":{"operationId":"list_systems","summary":"List systems (groups of services) with description, owner and parent domain. Use for \"Which systems are in the OpsLevel ","description":"List systems (groups of services) with description, owner and parent domain. Use for \"Which systems are in the OpsLevel catalog\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"}},"title":"list_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_domains":{"post":{"operationId":"list_domains","summary":"List domains (top-level business areas that group systems) with description and owner. Use for \"Which domains are in the","description":"List domains (top-level business areas that group systems) with description and owner. Use for \"Which domains are in the OpsLevel catalog\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"}},"title":"list_domainsArguments","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_scorecards":{"post":{"operationId":"list_scorecards","summary":"List scorecards with how many checks they have, how many pass, the pass percentage and how many services they cover. Use","description":"List scorecards with how many checks they have, how many pass, the pass percentage and how many services they cover. Use for \"How are our OpsLevel scorecards doing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"}},"title":"list_scorecardsArguments","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_lifecycles":{"post":{"operationId":"list_lifecycles","summary":"List the lifecycle stages (for example alpha, beta, production) a service can be in. Use for \"Which lifecycle stages doe","description":"List the lifecycle stages (for example alpha, beta, production) a service can be in. Use for \"Which lifecycle stages does OpsLevel define\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_lifecyclesArguments","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_tiers":{"post":{"operationId":"list_tiers","summary":"List the service tiers (for example tier 1 to tier 4) with description and order. Use for \"Which service tiers does OpsL","description":"List the service tiers (for example tier 1 to tier 4) with description and order. Use for \"Which service tiers does OpsLevel define\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_tiersArguments","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_component_types":{"post":{"operationId":"list_component_types","summary":"List the component types (service, library, data pipeline and your own types) with category and description. Use for \"Wh","description":"List the component types (service, library, data pipeline and your own types) with category and description. Use for \"Which component types exist in our OpsLevel catalog\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"}},"title":"list_component_typesArguments","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_infrastructure_resources":{"post":{"operationId":"list_infrastructure_resources","summary":"List infrastructure resources (databases, queues, buckets and so on) synced into the catalog with type, owner link and l","description":"List infrastructure resources (databases, queues, buckets and so on) synced into the catalog with type, owner link and last sync time. Resource data and settings are not returned. Use for \"Which infrastructure resources does OpsLevel know about\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"}},"title":"list_infrastructure_resourcesArguments","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_deploys":{"post":{"operationId":"list_deploys","summary":"List deploys reported to OpsLevel in a time range with service, environment, status, start time, duration, commit and br","description":"List deploys reported to OpsLevel in a time range with service, environment, status, start time, duration, commit and branch. Names and e-mails of deployers and committers are not returned. Use for \"Which deploys happened in OpsLevel last week\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start_time":{"description":"Start of the time range (ISO 8601, for example 2026-10-01T00:00:00Z).","maxLength":200,"title":"Start Time","type":"string"},"end_time":{"description":"End of the time range (ISO 8601).","maxLength":200,"title":"End Time","type":"string"},"first":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":25,"description":"How many items to return (1 to 100, default 25).","title":"First"},"after":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Cursor from pageInfo.endCursor of the previous answer, to get the next page.","title":"After"}},"required":["start_time","end_time"],"title":"list_deploysArguments","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}}}}