{"openapi":"3.1.0","info":{"title":"Digital Ocean Spaces and CDN (BYOK) API","version":"0.1.0","description":"Digital Ocean Spaces and CDN (BYOK) lets an AI assistant read your own Digital Ocean Spaces and CDN data through the Digital Ocean Spaces and CDN API with a key you supply (personal access token with CDN, certificate and Spaces key read scope). Read-only: 5 tools (list_cdn_endpoints, get_cdn_endpoint, list_certificates, get_certificate, list_spaces_keys). The BYOK key travels with each request,...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-digitalocean-spaces-cdn.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-digitalocean-spaces-cdn/docs"},"termsOfService":"https://connectorbay.com/byok-digitalocean-spaces-cdn/terms"},"servers":[{"url":"https://byok-digitalocean-spaces-cdn.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-digitalocean-spaces-cdn/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_cdn_endpoints":{"post":{"operationId":"list_cdn_endpoints","summary":"List Spaces CDN endpoints with origin, edge endpoint, TTL, custom domain and certificate. Use for \"Which Spaces buckets ","description":"List Spaces CDN endpoints with origin, edge endpoint, TTL, custom domain and certificate. Use for \"Which Spaces buckets have a CDN and on what custom domain\".","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_cdn_endpointsArguments","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_cdn_endpoint":{"post":{"operationId":"get_cdn_endpoint","summary":"Get one CDN endpoint: origin, edge endpoint, TTL, custom domain and certificate id. Use for \"What TTL does CDN endpoint ","description":"Get one CDN endpoint: origin, edge endpoint, TTL, custom domain and certificate id. Use for \"What TTL does CDN endpoint 19f06b6a use\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"cdn_id":{"description":"CDN endpoint id (UUID), as returned by list_cdn_endpoints.","maxLength":64,"title":"Cdn Id","type":"string"}},"required":["cdn_id"],"title":"get_cdn_endpointArguments","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_certificates":{"post":{"operationId":"list_certificates","summary":"List SSL certificates with state, type (custom or Let's Encrypt), DNS names, expiry and fingerprint. Use for \"Which SSL ","description":"List SSL certificates with state, type (custom or Let's Encrypt), DNS names, expiry and fingerprint. Use for \"Which SSL certificates do I have and when do they expire\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"certificate_name":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only certificates with this exact name.","title":"Certificate Name"},"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_certificatesArguments","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_certificate":{"post":{"operationId":"get_certificate","summary":"Get one SSL certificate: state, type, DNS names and expiry. Use for \"When does certificate 892071a0 expire\".","description":"Get one SSL certificate: state, type, DNS names and expiry. Use for \"When does certificate 892071a0 expire\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"certificate_id":{"description":"Certificate id (UUID), as returned by list_certificates.","maxLength":64,"title":"Certificate Id","type":"string"}},"required":["certificate_id"],"title":"get_certificateArguments","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_spaces_keys":{"post":{"operationId":"list_spaces_keys","summary":"List Spaces access keys with name, access key id, creation time and bucket grants (bucket and permission). Only access k","description":"List Spaces access keys with name, access key id, creation time and bucket grants (bucket and permission). Only access key ids and bucket grants are returned, never secrets. Use for \"Which Spaces keys exist and which buckets can they access\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"sort":{"anyOf":[{"maxLength":30,"type":"string"},{"type":"null"}],"default":null,"description":"Sort field, for example name or created_at.","title":"Sort"},"sort_direction":{"anyOf":[{"maxLength":4,"type":"string"},{"type":"null"}],"default":null,"description":"Sort direction, asc or desc.","title":"Sort Direction"},"bucket":{"anyOf":[{"maxLength":63,"type":"string"},{"type":"null"}],"default":null,"description":"Only keys with a grant on this bucket.","title":"Bucket"},"permission":{"anyOf":[{"maxLength":20,"type":"string"},{"type":"null"}],"default":null,"description":"Only keys with this permission, for example read, readwrite or fullaccess.","title":"Permission"},"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_spaces_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}}}}