{"openapi":"3.1.0","info":{"title":"Digital Ocean App Platform (BYOK) API","version":"0.1.0","description":"Digital Ocean App Platform (BYOK) lets an AI assistant read your own Digital Ocean App Platform data through the Digital Ocean App Platform API with a key you supply (personal access token with app read scope). Read-only: 12 tools (list_apps, get_app, list_deployments, get_deployment, list_events, get_event, get_health, list_instances, list_job_invocations, list_alerts, get_bandwidth_daily,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-digitalocean-apps.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-digitalocean-apps/docs"},"termsOfService":"https://connectorbay.com/byok-digitalocean-apps/terms"},"servers":[{"url":"https://byok-digitalocean-apps.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-digitalocean-apps/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_apps":{"post":{"operationId":"list_apps","summary":"List App Platform apps with name, region, live URL, tier, project and active deployment phase. App spec and environment ","description":"List App Platform apps with name, region, live URL, tier, project and active deployment phase. App spec and environment variables are not returned. Use for \"Which App Platform apps do I run and are their deployments active\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"with_projects":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True to include project information.","title":"With Projects"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"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 App Platform app: name, region, live URL, tier, project and active deployment phase. App spec and environment va","description":"Get one App Platform app: name, region, live URL, tier, project and active deployment phase. App spec and environment variables are not returned. Use for \"What is the live URL of my app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"}},"required":["app_id"],"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_deployments":{"post":{"operationId":"list_deployments","summary":"List the deployments of an app with cause, phase, step progress and timestamps. App spec and environment variables are n","description":"List the deployments of an app with cause, phase, step progress and timestamps. App spec and environment variables are not returned. Use for \"Did the last deployments of my app succeed\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["app_id"],"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/get_deployment":{"post":{"operationId":"get_deployment","summary":"Get one app deployment with cause, phase and step progress. App spec and environment variables are not returned. Use for","description":"Get one app deployment with cause, phase and step progress. App spec and environment variables are not returned. Use for \"Why is deployment 3aa4d20e still building\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"},"deployment_id":{"description":"Deployment id (UUID), as returned by list_deployments.","maxLength":64,"title":"Deployment Id","type":"string"}},"required":["app_id","deployment_id"],"title":"get_deploymentArguments","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_events":{"post":{"operationId":"list_events","summary":"List the events of an app (deployments and autoscaling) with type and time. Use for \"What happened on my app recently\".","description":"List the events of an app (deployments and autoscaling) with type and time. Use for \"What happened on my app recently\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"},"event_type":{"anyOf":[{"enum":["DEPLOYMENT","AUTOSCALING"],"type":"string"},{"type":"null"}],"default":null,"description":"Only events of this type.","title":"Event Type"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["app_id"],"title":"list_eventsArguments","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_event":{"post":{"operationId":"get_event","summary":"Get one app event with type, time and deployment id. Use for \"What was app event b7f1c2d3\".","description":"Get one app event with type, time and deployment id. Use for \"What was app event b7f1c2d3\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"},"event_id":{"description":"App event id, as returned by list_events.","maxLength":64,"title":"Event Id","type":"string"}},"required":["app_id","event_id"],"title":"get_eventArguments","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_health":{"post":{"operationId":"get_health","summary":"Get the health of an app's components: state, CPU and memory use, and desired versus ready replicas. Use for \"Are all co","description":"Get the health of an app's components: state, CPU and memory use, and desired versus ready replicas. Use for \"Are all components of my app healthy\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"}},"required":["app_id"],"title":"get_healthArguments","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_instances":{"post":{"operationId":"list_instances","summary":"List the running instances of an app with component name, type and instance name. Use for \"Which instances is my app run","description":"List the running instances of an app with component name, type and instance name. Use for \"Which instances is my app running\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"}},"required":["app_id"],"title":"list_instancesArguments","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_job_invocations":{"post":{"operationId":"list_job_invocations","summary":"List job runs of an app with job name, phase, trigger and start and completion times. Use for \"Did the scheduled jobs of","description":"List job runs of an app with job name, phase, trigger and start and completion times. Use for \"Did the scheduled jobs of my app run\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"},"deployment_id":{"anyOf":[{"maxLength":64,"type":"string"},{"type":"null"}],"default":null,"description":"Only runs of this deployment.","title":"Deployment Id"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":20,"description":"How many results per page (1 to 200).","title":"Per Page"},"page":{"anyOf":[{"maximum":10000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1; meta.total says how many items exist.","title":"Page"}},"required":["app_id"],"title":"list_job_invocationsArguments","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_alerts":{"post":{"operationId":"list_alerts","summary":"List the alert rules of an app (rule, operator, value, window, disabled flag, component). Recipient addresses and webhoo","description":"List the alert rules of an app (rule, operator, value, window, disabled flag, component). Recipient addresses and webhook URLs are left out. Use for \"Which alerts are configured for my app\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"}},"required":["app_id"],"title":"list_alertsArguments","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_bandwidth_daily":{"post":{"operationId":"get_bandwidth_daily","summary":"Get an app's bandwidth use for one day in bytes (default: yesterday). Use for \"How much bandwidth did my app use yesterd","description":"Get an app's bandwidth use for one day in bytes (default: yesterday). Use for \"How much bandwidth did my app use yesterday\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"app_id":{"description":"App Platform app id (UUID), as returned by list_apps.","maxLength":64,"title":"App Id","type":"string"},"date":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Day to report as YYYY-MM-DD; empty means yesterday.","title":"Date"}},"required":["app_id"],"title":"get_bandwidth_dailyArguments","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_instance_sizes":{"post":{"operationId":"list_instance_sizes","summary":"List the App Platform instance sizes with CPU, memory, bandwidth allowance and monthly price in USD. Use for \"What insta","description":"List the App Platform instance sizes with CPU, memory, bandwidth allowance and monthly price in USD. Use for \"What instance sizes can an App Platform app use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_instance_sizesArguments","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}}}}