{"openapi":"3.1.0","info":{"title":"KeyCDN (BYOK) API","version":"0.1.0","description":"KeyCDN (BYOK) lets an AI assistant read your own KeyCDN data through the KeyCDN API with a key you supply (API key). Read-only: 9 tools (get_zone, list_zone_aliases, list_zone_referrers, get_traffic_stats, get_storage_stats, get_cache_status_stats, get_image_processing_stats, get_credit_bookings, get_credit_balance). 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-keycdn.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-keycdn/docs"},"termsOfService":"https://connectorbay.com/byok-keycdn/terms"},"servers":[{"url":"https://byok-keycdn.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-keycdn/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_zone":{"post":{"operationId":"get_zone","summary":"Get one KeyCDN zone by id: name, status, type (pull or push), origin URL, SSL certificate mode, force-SSL and cache sett","description":"Get one KeyCDN zone by id: name, status, type (pull or push), origin URL, SSL certificate mode, force-SSL and cache settings. Secret token and certificate key fields are left out. Use for \"Show KeyCDN zone 1000\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"Numeric zone id, for example 1000 (see zone_id in list_zone_aliases).","maximum":1000000000000,"minimum":1,"title":"Zone Id","type":"integer"}},"required":["zone_id"],"title":"get_zoneArguments","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_zone_aliases":{"post":{"operationId":"list_zone_aliases","summary":"List the zone aliases (custom hostnames such as cdn.example.com) of all zones with the zone each belongs to. Use it to f","description":"List the zone aliases (custom hostnames such as cdn.example.com) of all zones with the zone each belongs to. Use it to find zone ids. Use for \"Which custom CDN hostnames do I have on KeyCDN\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_zone_aliasesArguments","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_zone_referrers":{"post":{"operationId":"list_zone_referrers","summary":"List the zone referrers (hostnames allowed or blocked by referrer rules) of all zones. Use for \"Which referrers are conf","description":"List the zone referrers (hostnames allowed or blocked by referrer rules) of all zones. Use for \"Which referrers are configured on my KeyCDN zones\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"list_zone_referrersArguments","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_traffic_stats":{"post":{"operationId":"get_traffic_stats","summary":"Get delivered traffic in bytes per day for a time range, for the account or one zone. Use for \"How much traffic did my K","description":"Get delivered traffic in bytes per day for a time range, for the account or one zone. Use for \"How much traffic did my KeyCDN zones deliver in the given range\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"End","type":"integer"},"zone_id":{"anyOf":[{"maximum":1000000000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this zone (numeric id, from get_zone or list_zone_aliases); leave out for the whole account.","title":"Zone Id"}},"required":["start","end"],"title":"get_traffic_statsArguments","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_storage_stats":{"post":{"operationId":"get_storage_stats","summary":"Get storage used in bytes per day for a time range, for the account or one zone. Use for \"How much storage did my KeyCDN","description":"Get storage used in bytes per day for a time range, for the account or one zone. Use for \"How much storage did my KeyCDN zones use in the given range\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"End","type":"integer"},"zone_id":{"anyOf":[{"maximum":1000000000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this zone (numeric id, from get_zone or list_zone_aliases); leave out for the whole account.","title":"Zone Id"}},"required":["start","end"],"title":"get_storage_statsArguments","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_cache_status_stats":{"post":{"operationId":"get_cache_status_stats","summary":"Get cache hit and miss counts and success and error counts per day for a time range, for the account or one zone. Use fo","description":"Get cache hit and miss counts and success and error counts per day for a time range, for the account or one zone. Use for \"What was my KeyCDN cache hit rate in the given range\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"End","type":"integer"},"zone_id":{"anyOf":[{"maximum":1000000000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this zone (numeric id, from get_zone or list_zone_aliases); leave out for the whole account.","title":"Zone Id"}},"required":["start","end"],"title":"get_cache_status_statsArguments","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_image_processing_stats":{"post":{"operationId":"get_image_processing_stats","summary":"Get the number of image processing operations per day for a time range, for the account or one zone. Use for \"How many i","description":"Get the number of image processing operations per day for a time range, for the account or one zone. Use for \"How many image processing operations did KeyCDN run in the given range\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"End","type":"integer"},"zone_id":{"anyOf":[{"maximum":1000000000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this zone (numeric id, from get_zone or list_zone_aliases); leave out for the whole account.","title":"Zone Id"}},"required":["start","end"],"title":"get_image_processing_statsArguments","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_credit_bookings":{"post":{"operationId":"get_credit_bookings","summary":"Get credit bookings (traffic, storage, zones, initial, payment) with amount and time for a time range. Use for \"What did","description":"Get credit bookings (traffic, storage, zones, initial, payment) with amount and time for a time range. Use for \"What did KeyCDN charge me in credits during the given range\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"start":{"description":"Start of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"Start","type":"integer"},"end":{"description":"End of the range as a Unix timestamp in seconds.","maximum":4102444800,"minimum":0,"title":"End","type":"integer"}},"required":["start","end"],"title":"get_credit_bookingsArguments","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_credit_balance":{"post":{"operationId":"get_credit_balance","summary":"Get the remaining credit balance of the KeyCDN account. Use for \"How many credits do I have left on KeyCDN\".","description":"Get the remaining credit balance of the KeyCDN account. Use for \"How many credits do I have left on KeyCDN\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_credit_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}}}}