{"openapi":"3.1.0","info":{"title":"Unkey (BYOK) API","version":"0.1.0","description":"Unkey (BYOK) lets an AI assistant read your own Unkey data through the Unkey API with a key you supply (Unkey root key with read permissions). Read-only: 10 tools (list_projects, list_apps, list_environments, list_deployments, list_domains, get_api, list_api_keys, list_identities, list_roles, list_ratelimit_namespaces). The BYOK key travels with each request, is used for that one call only and is...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-unkey.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-unkey/docs"},"termsOfService":"https://connectorbay.com/byok-unkey/terms"},"servers":[{"url":"https://byok-unkey.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-unkey/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_projects":{"post":{"operationId":"list_projects","summary":"List projects in the workspace with name, slug and delete protection. Use for \"Which Unkey projects do I have\".","description":"List projects in the workspace with name, slug and delete protection. Use for \"Which Unkey projects do I have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"},"search":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null,"description":"Filter projects by a search string.","title":"Search"}},"title":"list_projectsArguments","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_apps":{"post":{"operationId":"list_apps","summary":"List the apps of one project with source type, repository, current deployment and rollback state. Use for \"What apps are","description":"List the apps of one project with source type, repository, current deployment and rollback state. Use for \"What apps are in my Unkey project billing\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project id or slug, as returned by list_projects.","maxLength":255,"title":"Project","type":"string"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"},"search":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null,"description":"Filter apps by a search string.","title":"Search"}},"required":["project"],"title":"list_appsArguments","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_environments":{"post":{"operationId":"list_environments","summary":"List the environments (production, preview) of one app with runtime and region settings. Use for \"Which environments doe","description":"List the environments (production, preview) of one app with runtime and region settings. Use for \"Which environments does the api app in billing have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"description":"Project slug.","maxLength":255,"title":"Project","type":"string"},"app":{"description":"App slug.","maxLength":255,"title":"App","type":"string"}},"required":["project","app"],"title":"list_environmentsArguments","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_deployments":{"post":{"operationId":"list_deployments","summary":"List deployments newest first with status, environment, app, git commit and branch, regions and errors. Use for \"What we","description":"List deployments newest first with status, environment, app, git commit and branch, regions and errors. Use for \"What were the latest Unkey deployments and did any fail\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only deployments of this project (id or slug).","title":"Project"},"app":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only deployments of this app (id or slug).","title":"App"},"environment":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only deployments of this environment.","title":"Environment"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"}},"title":"list_deploymentsArguments","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 custom domains with verification status, project, app and environment. Use for \"Are my Unkey custom domains verifie","description":"List custom domains with verification status, project, app and environment. Use for \"Are my Unkey custom domains verified\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"},"search":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null,"description":"Filter domains by a search string.","title":"Search"}},"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/get_api":{"post":{"operationId":"get_api","summary":"Get the name of an API namespace by its id. Use for \"What is the name of my Unkey API api_1234\".","description":"Get the name of an API namespace by its id. Use for \"What is the name of my Unkey API api_1234\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_id":{"description":"ID of the API namespace.","maxLength":200,"title":"Api Id","type":"string"}},"required":["api_id"],"title":"get_apiArguments","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_api_keys":{"post":{"operationId":"list_api_keys","summary":"List the keys of one API namespace with prefix, name, enabled flag, last use, expiry, roles, permissions and remaining c","description":"List the keys of one API namespace with prefix, name, enabled flag, last use, expiry, roles, permissions and remaining credits. Key values are never returned. Use for \"Which keys in my Unkey API api_1234 are disabled or expired\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"api_id":{"description":"ID of the API namespace, as returned by get_api.","maxLength":200,"title":"Api Id","type":"string"},"external_id":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only keys of the identity with this external ID.","title":"External Id"},"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"}},"required":["api_id"],"title":"list_api_keysArguments","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_identities":{"post":{"operationId":"list_identities","summary":"List identities with external ID and rate limit configuration. Use for \"Which identities are defined in my Unkey workspa","description":"List identities with external ID and rate limit configuration. Use for \"Which identities are defined in my Unkey workspace\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"},"search":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null,"description":"Filter identities by a search string.","title":"Search"}},"title":"list_identitiesArguments","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_roles":{"post":{"operationId":"list_roles","summary":"List roles with description and their assigned permissions. Use for \"What roles exist in Unkey and what can they do\".","description":"List roles with description and their assigned permissions. Use for \"What roles exist in Unkey and what can they do\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"},"search":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null,"description":"Filter roles by a search string.","title":"Search"}},"title":"list_rolesArguments","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_ratelimit_namespaces":{"post":{"operationId":"list_ratelimit_namespaces","summary":"List the rate limit namespaces used by your services. Use for \"Which rate limit namespaces does Unkey have\".","description":"List the rate limit namespaces used by your services. Use for \"Which rate limit namespaces does Unkey have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"limit":{"anyOf":[{"maximum":100,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Number of results to return (1 to 100, default 100).","title":"Limit"},"cursor":{"anyOf":[{"maxLength":200,"type":"string"},{"type":"null"}],"default":null,"description":"Pagination cursor from pagination.cursor of the previous page.","title":"Cursor"},"search":{"anyOf":[{"maxLength":256,"type":"string"},{"type":"null"}],"default":null,"description":"Filter namespaces by a search string.","title":"Search"}},"title":"list_ratelimit_namespacesArguments","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}}}}