{"openapi":"3.1.0","info":{"title":"bunny.net (BYOK) API","version":"0.1.0","description":"bunny.net (BYOK) lets an AI assistant read your own bunny.net data through the bunny.net API with a key you supply (account API key). Read-only: 8 tools (list_pull_zones, get_pull_zone, list_storage_zones, list_dns_zones, list_dns_records, get_statistics, list_video_libraries, get_billing_summary). The BYOK key travels with each request, is used for that one call only and is never stored, logged...\n\nEvery operation is read-only or compute-only. The same tools are available over MCP (streamable HTTP) at https://byok-bunnynet.connectorbay.com/mcp.","contact":{"name":"Unify Dynamics LLC","email":"agent@connectorbay.com","url":"https://connectorbay.com/byok-bunnynet/docs"},"termsOfService":"https://connectorbay.com/byok-bunnynet/terms"},"servers":[{"url":"https://byok-bunnynet.connectorbay.com"}],"externalDocs":{"url":"https://connectorbay.com/byok-bunnynet/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_pull_zones":{"post":{"operationId":"list_pull_zones","summary":"List CDN pull zones with origin URL, enabled and suspended flags, type, origin shield flag and this month's bandwidth an","description":"List CDN pull zones with origin URL, enabled and suspended flags, type, origin shield flag and this month's bandwidth and charges. Use for \"Which pull zones do I have on bunny.net and what did they cost this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only zones whose name or hostname matches this text.","title":"Search"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"},"per_page":{"anyOf":[{"maximum":1000,"minimum":5,"type":"integer"},{"type":"null"}],"default":100,"description":"How many zones per page (5 to 1000).","title":"Per Page"}},"title":"list_pull_zonesArguments","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_pull_zone":{"post":{"operationId":"get_pull_zone","summary":"Get one pull zone by id: origin URL, flags, bandwidth used and limit, month-to-date charges. Hostnames and certificates ","description":"Get one pull zone by id: origin URL, flags, bandwidth used and limit, month-to-date charges. Hostnames and certificates are left out. Use for \"Show bunny.net pull zone 1\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"id":{"description":"Pull zone id (a number) from list_pull_zones.","maximum":1000000000000,"minimum":1,"title":"Id","type":"integer"}},"required":["id"],"title":"get_pull_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_storage_zones":{"post":{"operationId":"list_storage_zones","summary":"List storage zones with name, region, replication regions, stored bytes and file count. Passwords are never returned. Us","description":"List storage zones with name, region, replication regions, stored bytes and file count. Passwords are never returned. Use for \"How much data is in my bunny.net storage zones\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only zones whose name matches this text.","title":"Search"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"},"per_page":{"anyOf":[{"maximum":1000,"minimum":5,"type":"integer"},{"type":"null"}],"default":100,"description":"How many zones per page (5 to 1000).","title":"Per Page"}},"title":"list_storage_zonesArguments","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_dns_zones":{"post":{"operationId":"list_dns_zones","summary":"List DNS zones with domain, nameservers, DNSSEC flag and created and modified dates. Records are left out (use list_dns_","description":"List DNS zones with domain, nameservers, DNSSEC flag and created and modified dates. Records are left out (use list_dns_records). Use for \"Which domains do I host DNS for on bunny.net\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only zones whose domain matches this text.","title":"Search"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":1000,"minimum":5,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results per page (5 to 1000).","title":"Per Page"}},"title":"list_dns_zonesArguments","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_dns_records":{"post":{"operationId":"list_dns_records","summary":"List the records of one DNS zone with type code, name, value, TTL, priority and disabled flag. Type codes: 0 A, 1 AAAA, ","description":"List the records of one DNS zone with type code, name, value, TTL, priority and disabled flag. Type codes: 0 A, 1 AAAA, 2 CNAME, 3 TXT, 4 MX, 5 Redirect, 6 Flatten, 7 PullZone, 8 SRV, 9 CAA, 10 PTR, 11 Script, 12 NS, 13 SVCB, 14 HTTPS, 15 TLSA. Use for \"What DNS records does my bunny.net zone 123 have\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"zone_id":{"description":"DNS zone id (a number) from list_dns_zones.","maximum":1000000000000,"minimum":1,"title":"Zone Id","type":"integer"},"type":{"anyOf":[{"maximum":15,"minimum":0,"type":"integer"},{"type":"null"}],"default":null,"description":"Only records of this type code (0 A, 1 AAAA, 2 CNAME, 3 TXT, 4 MX, 8 SRV, 9 CAA, 12 NS).","title":"Type"},"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only records whose name or value matches this text.","title":"Search"},"page":{"anyOf":[{"maximum":100000,"minimum":1,"type":"integer"},{"type":"null"}],"default":1,"description":"Page number, starting at 1.","title":"Page"},"per_page":{"anyOf":[{"maximum":1000,"minimum":5,"type":"integer"},{"type":"null"}],"default":100,"description":"How many results per page (5 to 1000).","title":"Per Page"}},"required":["zone_id"],"title":"list_dns_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_statistics":{"post":{"operationId":"get_statistics","summary":"Get account-wide (or one pull zone's) CDN totals for a date range: bandwidth used, origin traffic, requests served, cach","description":"Get account-wide (or one pull zone's) CDN totals for a date range: bandwidth used, origin traffic, requests served, cache hit rate and average origin response time. Defaults to the last 30 days. Use for \"How much bandwidth did my bunny.net CDN serve in the last 30 days and what was the cache hit rate\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"date_from":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"Start date (ISO 8601, for example 2026-09-01).","title":"Date From"},"date_to":{"anyOf":[{"maxLength":40,"type":"string"},{"type":"null"}],"default":null,"description":"End date (ISO 8601, for example 2026-09-30).","title":"Date To"},"pull_zone":{"anyOf":[{"maximum":1000000000000,"minimum":1,"type":"integer"},{"type":"null"}],"default":null,"description":"Only this pull zone id.","title":"Pull Zone"},"hourly":{"anyOf":[{"type":"boolean"},{"type":"null"}],"default":null,"description":"True for hourly grouping.","title":"Hourly"}},"title":"get_statisticsArguments","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_video_libraries":{"post":{"operationId":"list_video_libraries","summary":"List Stream video libraries with video count, traffic and storage usage, DRM flag and linked pull zone. API keys are nev","description":"List Stream video libraries with video count, traffic and storage usage, DRM flag and linked pull zone. API keys are never returned. Use for \"How many videos are in my bunny.net Stream libraries\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{"search":{"anyOf":[{"maxLength":100,"type":"string"},{"type":"null"}],"default":null,"description":"Only libraries whose name matches this text.","title":"Search"},"page":{"anyOf":[{"maximum":100000,"minimum":0,"type":"integer"},{"type":"null"}],"default":0,"description":"Page number, starting at 0.","title":"Page"},"per_page":{"anyOf":[{"maximum":1000,"minimum":5,"type":"integer"},{"type":"null"}],"default":100,"description":"How many libraries per page (5 to 1000).","title":"Per Page"}},"title":"list_video_librariesArguments","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_billing_summary":{"post":{"operationId":"get_billing_summary","summary":"Get the current month's usage and bandwidth per pull zone from the billing summary. Use for \"How much did each bunny.net","description":"Get the current month's usage and bandwidth per pull zone from the billing summary. Use for \"How much did each bunny.net pull zone cost so far this month\".","tags":["tools"],"requestBody":{"required":true,"content":{"application/json":{"schema":{"properties":{},"title":"get_billing_summaryArguments","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}}}}