{"openapi":"3.1.0","info":{"title":"Heroku (BYOK) API","version":"0.1.0","description":"Heroku (BYOK) lets an AI assistant read your own Heroku data through the Heroku API with a key you supply (Heroku API authorization token). Read-only: 9 tools (get_account, list_apps, get_app, list_dynos, list_releases, list_formation, list_app_domains, list_app_addons, list_addons). The BYOK key travels with each request, is used for that one call only and is never stored, logged or cached; it...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-heroku.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-heroku/docs"},"termsOfService":"https://connectorbay.com/byok-heroku/terms"},"servers":[{"url":"https://byok-heroku.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-heroku/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":"Show the Heroku account the token belongs to: name, email, verified flag, two-factor status, last login and creation dat","description":"Show the Heroku account the token belongs to: name, email, verified flag, two-factor status, last login and creation date. Use for \"Which Heroku account is my token connected to\".","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_apps":{"post":{"operationId":"list_apps","summary":"List the Heroku apps the token can see, with region, stack, team, maintenance flag, web URL and release dates. The API r","description":"List the Heroku apps the token can see, with region, stack, team, maintenance flag, web URL and release dates. The API returns at most the first 200 items in its default order (by id); there is no paging. Use for \"Which Heroku apps do I have and where are they hosted\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"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/get_app":{"post":{"operationId":"get_app","summary":"Get one Heroku app: region, stack, team, maintenance flag, slug size, web URL and release dates. Use for \"When was my He","description":"Get one Heroku app: region, stack, team, maintenance flag, slug size, web URL and release dates. Use for \"When was my Heroku app my-app last released\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app":{"description":"Name or id (UUID) of the Heroku app, for example 'my-app'.","maxLength":100,"title":"App","type":"string"}},"required":["app"],"title":"get_appArguments","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_dynos":{"post":{"operationId":"list_dynos","summary":"List the dynos of an app with process name, type, state (for example up or crashed), size, command and last update. The ","description":"List the dynos of an app with process name, type, state (for example up or crashed), size, command and last update. The API returns at most the first 200 items in its default order (by id); there is no paging. Use for \"Which dynos of my-app are running or crashed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app":{"description":"Name or id (UUID) of the Heroku app, for example 'my-app'.","maxLength":100,"title":"App","type":"string"}},"required":["app"],"title":"list_dynosArguments","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_releases":{"post":{"operationId":"list_releases","summary":"List the releases of an app with version, description, status, whether it is the current one, author email and time. The","description":"List the releases of an app with version, description, status, whether it is the current one, author email and time. The API returns the first 200 in id order, so apps with more releases are cut off; check the highest version number. Use for \"What are the releases of Heroku app my-app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app":{"description":"Name or id (UUID) of the Heroku app, for example 'my-app'.","maxLength":100,"title":"App","type":"string"}},"required":["app"],"title":"list_releasesArguments","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_formation":{"post":{"operationId":"list_formation","summary":"List the process types (formation) of an app with quantity, dyno size and command. Use for \"How many web and worker dyno","description":"List the process types (formation) of an app with quantity, dyno size and command. Use for \"How many web and worker dynos does my-app run\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app":{"description":"Name or id (UUID) of the Heroku app, for example 'my-app'.","maxLength":100,"title":"App","type":"string"}},"required":["app"],"title":"list_formationArguments","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_app_domains":{"post":{"operationId":"list_app_domains","summary":"List the domains of an app with hostname, kind (heroku or custom), status, DNS target and ACM status. Use for \"Which cus","description":"List the domains of an app with hostname, kind (heroku or custom), status, DNS target and ACM status. Use for \"Which custom domains does my-app have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app":{"description":"Name or id (UUID) of the Heroku app, for example 'my-app'.","maxLength":100,"title":"App","type":"string"}},"required":["app"],"title":"list_app_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_app_addons":{"post":{"operationId":"list_app_addons","summary":"List the add-ons attached to an app with service, plan, state, price and creation date. The API returns at most the firs","description":"List the add-ons attached to an app with service, plan, state, price and creation date. The API returns at most the first 200 items in its default order (by id); there is no paging. Use for \"Which add-ons does my-app use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app":{"description":"Name or id (UUID) of the Heroku app, for example 'my-app'.","maxLength":100,"title":"App","type":"string"}},"required":["app"],"title":"list_app_addonsArguments","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_addons":{"post":{"operationId":"list_addons","summary":"List all add-ons on all apps the token can see with service, plan, state, owning app and price. The API returns at most ","description":"List all add-ons on all apps the token can see with service, plan, state, owning app and price. The API returns at most the first 200 items in its default order (by id); there is no paging. Use for \"Which Heroku add-ons do I pay for across my apps\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_addonsArguments","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}}}}