{"openapi":"3.1.0","info":{"title":"DigitalOcean (BYOK) API","version":"0.1.0","description":"DigitalOcean (BYOK) lets an AI assistant read your own DigitalOcean data through the DigitalOcean API with a key you supply (personal access token). Read-only: 10 tools (list_droplets, list_domains, get_domain, list_domain_records, get_account, get_balance, list_billing_history, list_invoices, list_projects, list_project_resources). The BYOK key travels with each request, is used for that one...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-digitalocean.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-digitalocean/docs"},"termsOfService":"https://connectorbay.com/byok-digitalocean/terms"},"servers":[{"url":"https://byok-digitalocean.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-digitalocean/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_droplets":{"post":{"operationId":"list_droplets","summary":"List the account's Droplets (virtual machines) with status, size, region, memory, disk, tags and network addresses. Up t","description":"List the account's Droplets (virtual machines) with status, size, region, memory, disk, tags and network addresses. Up to 200 per page. Use for \"Which Droplets are running in my DigitalOcean account\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"droplet_name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only the Droplet with this exact name (case-insensitive). Cannot be combined with tag_name.","title":"Droplet Name"},"tag_name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only Droplets with this tag. Cannot be combined with droplet_name or kind.","title":"Tag Name"},"kind":{"anyOf":[{"enum":["droplets","gpus"],"type":"string"},{"type":"null"}],"default":null,"description":"droplets (default) or gpus to list only GPU Droplets. Cannot be combined with tag_name.","title":"Kind"},"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_dropletsArguments","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 the domains managed in DigitalOcean DNS with their TTL. Use for \"Which domains do I manage in DigitalOcean\".","description":"List the domains managed in DigitalOcean DNS with their TTL. Use for \"Which domains do I manage in DigitalOcean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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_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_domain":{"post":{"operationId":"get_domain","summary":"Get one DigitalOcean DNS domain with its TTL and zone file text. Use for \"Show the DigitalOcean zone file of example.com","description":"Get one DigitalOcean DNS domain with its TTL and zone file text. Use for \"Show the DigitalOcean zone file of example.com\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain_name":{"description":"Domain name, for example 'example.com'.","maxLength":200,"title":"Domain Name","type":"string"}},"required":["domain_name"],"title":"get_domainArguments","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_domain_records":{"post":{"operationId":"list_domain_records","summary":"List the DNS records of a DigitalOcean domain (type, name, data, TTL, priority), optionally by type or fully qualified n","description":"List the DNS records of a DigitalOcean domain (type, name, data, TTL, priority), optionally by type or fully qualified name. Use for \"What DNS records does example.com have in DigitalOcean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"domain_name":{"description":"Domain name, for example 'example.com'.","maxLength":200,"title":"Domain Name","type":"string"},"record_name":{"anyOf":[{"maxLength":255,"type":"string"},{"type":"null"}],"default":null,"description":"Only records with this fully qualified name, for example 'www.example.com'.","title":"Record Name"},"record_type":{"anyOf":[{"maxLength":10,"type":"string"},{"type":"null"}],"default":null,"description":"Only records of this type, for example A, AAAA, CNAME, MX or TXT.","title":"Record Type"},"per_page":{"anyOf":[{"maximum":200,"minimum":1,"type":"integer"},{"type":"null"}],"default":50,"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":["domain_name"],"title":"list_domain_recordsArguments","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_account":{"post":{"operationId":"get_account","summary":"Show the DigitalOcean account behind the token: email, name, status, whether the email is verified, Droplet and reserved","description":"Show the DigitalOcean account behind the token: email, name, status, whether the email is verified, Droplet and reserved IP limits, and team. Use for \"What are my DigitalOcean account limits\".","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/get_balance":{"post":{"operationId":"get_balance","summary":"Show the DigitalOcean account balance, month-to-date usage and month-to-date balance as of the generation time. Use for ","description":"Show the DigitalOcean account balance, month-to-date usage and month-to-date balance as of the generation time. Use for \"How much have I spent on DigitalOcean this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_balanceArguments","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_billing_history":{"post":{"operationId":"list_billing_history","summary":"List DigitalOcean billing history entries (invoices and payments) with amount, date and description. Use for \"What payme","description":"List DigitalOcean billing history entries (invoices and payments) with amount, date and description. Use for \"What payments and invoices does my DigitalOcean billing history show\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_billing_historyArguments","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_invoices":{"post":{"operationId":"list_invoices","summary":"List DigitalOcean invoices with amount, billing period and update time, plus the current invoice preview. Use for \"List ","description":"List DigitalOcean invoices with amount, billing period and update time, plus the current invoice preview. Use for \"List my DigitalOcean invoices\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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_invoicesArguments","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_projects":{"post":{"operationId":"list_projects","summary":"List the account's DigitalOcean projects with purpose, environment, default flag and dates. Use for \"What projects do I ","description":"List the account's DigitalOcean projects with purpose, environment, default flag and dates. Use for \"What projects do I have in DigitalOcean\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"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_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_project_resources":{"post":{"operationId":"list_project_resources","summary":"List the resources (Droplets, domains, databases and others, as URNs) assigned to a DigitalOcean project. Use for \"What ","description":"List the resources (Droplets, domains, databases and others, as URNs) assigned to a DigitalOcean project. Use for \"What resources are in my DigitalOcean project\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"project_id":{"description":"Project UUID, as returned by list_projects.","maxLength":200,"title":"Project 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":["project_id"],"title":"list_project_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}}}}