{
  "service": "bunnycdn",
  "displayName": "BunnyCDN",
  "categories": [
    "Storage",
    "Developer Tools"
  ],
  "authTypes": [
    "api_key"
  ],
  "auth": [
    {
      "type": "api_key",
      "label": "API Key",
      "placeholder": "bunny_api_key",
      "description": "Bunny account API key sent with the AccessKey header. Create or view it from the Bunny dashboard API Keys page: https://docs.bunny.net/account/api-keys.",
      "extraFields": []
    }
  ],
  "homepageUrl": "https://bunny.net/",
  "actions": [
    {
      "id": "bunnycdn.get_pull_zone",
      "service": "bunnycdn",
      "name": "get_pull_zone",
      "description": "Get one Bunny Pull Zone by ID.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pullZoneId": {
            "type": "integer",
            "minimum": 1,
            "description": "The Bunny Pull Zone ID."
          },
          "includeCertificate": {
            "type": "boolean",
            "description": "Whether hostname certificate data should be included."
          }
        },
        "additionalProperties": false,
        "required": [
          "pullZoneId"
        ],
        "description": "Input parameters for retrieving one Bunny Pull Zone."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "pullZone": {
            "type": "object",
            "properties": {
              "Id": {
                "type": "integer",
                "description": "The unique pull zone ID."
              },
              "Name": {
                "type": "string",
                "description": "The pull zone name."
              },
              "OriginUrl": {
                "type": "string",
                "description": "The origin URL used by the pull zone."
              },
              "Enabled": {
                "type": "boolean",
                "description": "Whether the pull zone is enabled."
              },
              "Suspended": {
                "type": "boolean",
                "description": "Whether the pull zone is suspended."
              },
              "Hostnames": {
                "type": "array",
                "items": {
                  "type": "object",
                  "properties": {
                    "Id": {
                      "type": "integer",
                      "description": "The unique hostname ID."
                    },
                    "Value": {
                      "type": "string",
                      "description": "The hostname value."
                    },
                    "ForceSSL": {
                      "type": "boolean",
                      "description": "Whether Force SSL is enabled."
                    },
                    "IsSystemHostname": {
                      "type": "boolean",
                      "description": "Whether this hostname is controlled by bunny.net."
                    },
                    "IsManagedHostname": {
                      "type": "boolean",
                      "description": "Whether this is a managed bunny.net hostname."
                    },
                    "HasCertificate": {
                      "type": "boolean",
                      "description": "Whether the hostname has an SSL certificate configured."
                    },
                    "Certificate": {
                      "type": "string",
                      "description": "The Base64Url-encoded certificate returned by Bunny when requested."
                    },
                    "CertificateProvisionType": {
                      "type": "integer",
                      "description": "The certificate provision type."
                    }
                  },
                  "additionalProperties": true,
                  "description": "A Bunny Pull Zone hostname."
                },
                "description": "The hostnames linked to this pull zone."
              },
              "StorageZoneId": {
                "type": "integer",
                "description": "The linked storage zone ID."
              },
              "EdgeScriptId": {
                "type": "integer",
                "description": "The linked edge script ID."
              },
              "AllowedReferrers": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1
                },
                "description": "The referrer hostnames allowed to access the pull zone."
              },
              "BlockedReferrers": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1
                },
                "description": "The referrer hostnames blocked from the pull zone."
              },
              "BlockedIps": {
                "type": "array",
                "items": {
                  "type": "string",
                  "minLength": 1
                },
                "description": "The IP addresses blocked from the pull zone."
              },
              "ZoneSecurityEnabled": {
                "type": "boolean",
                "description": "Whether secure-token URL authentication is enabled."
              },
              "IgnoreQueryStrings": {
                "type": "boolean",
                "description": "Whether the pull zone ignores query strings for cache keys."
              },
              "MonthlyBandwidthLimit": {
                "type": "integer",
                "description": "The monthly bandwidth limit in bytes."
              },
              "MonthlyBandwidthUsed": {
                "type": "integer",
                "description": "The bandwidth used this month in bytes."
              },
              "MonthlyCharges": {
                "type": "number",
                "description": "The total monthly charges accumulated by the pull zone."
              },
              "AddHostHeader": {
                "type": "boolean",
                "description": "Whether Bunny forwards the current hostname to the origin."
              },
              "OriginHostHeader": {
                "type": "string",
                "description": "The host header sent to the origin."
              }
            },
            "additionalProperties": true,
            "description": "A Bunny Pull Zone payload."
          }
        },
        "additionalProperties": false,
        "required": [
          "pullZone"
        ],
        "description": "The response returned when retrieving one Bunny Pull Zone."
      }
    },
    {
      "id": "bunnycdn.list_pull_zones",
      "service": "bunnycdn",
      "name": "list_pull_zones",
      "description": "List Bunny Pull Zones with optional pagination, search, and certificate expansion.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "page": {
            "type": "integer",
            "minimum": 1,
            "description": "The page number to return."
          },
          "perPage": {
            "type": "integer",
            "minimum": 5,
            "maximum": 1000,
            "description": "The page size to return when page is provided."
          },
          "search": {
            "type": "string",
            "minLength": 1,
            "description": "The search term used to filter pull zones by name or related text."
          },
          "includeCertificate": {
            "type": "boolean",
            "description": "Whether hostname certificate data should be included."
          }
        },
        "additionalProperties": false,
        "description": "Input parameters for listing Bunny Pull Zones."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "pullZones": {
            "type": "array",
            "items": {
              "type": "object",
              "properties": {
                "Id": {
                  "type": "integer",
                  "description": "The unique pull zone ID."
                },
                "Name": {
                  "type": "string",
                  "description": "The pull zone name."
                },
                "OriginUrl": {
                  "type": "string",
                  "description": "The origin URL used by the pull zone."
                },
                "Enabled": {
                  "type": "boolean",
                  "description": "Whether the pull zone is enabled."
                },
                "Suspended": {
                  "type": "boolean",
                  "description": "Whether the pull zone is suspended."
                },
                "Hostnames": {
                  "type": "array",
                  "items": {
                    "type": "object",
                    "properties": {
                      "Id": {
                        "type": "integer",
                        "description": "The unique hostname ID."
                      },
                      "Value": {
                        "type": "string",
                        "description": "The hostname value."
                      },
                      "ForceSSL": {
                        "type": "boolean",
                        "description": "Whether Force SSL is enabled."
                      },
                      "IsSystemHostname": {
                        "type": "boolean",
                        "description": "Whether this hostname is controlled by bunny.net."
                      },
                      "IsManagedHostname": {
                        "type": "boolean",
                        "description": "Whether this is a managed bunny.net hostname."
                      },
                      "HasCertificate": {
                        "type": "boolean",
                        "description": "Whether the hostname has an SSL certificate configured."
                      },
                      "Certificate": {
                        "type": "string",
                        "description": "The Base64Url-encoded certificate returned by Bunny when requested."
                      },
                      "CertificateProvisionType": {
                        "type": "integer",
                        "description": "The certificate provision type."
                      }
                    },
                    "additionalProperties": true,
                    "description": "A Bunny Pull Zone hostname."
                  },
                  "description": "The hostnames linked to this pull zone."
                },
                "StorageZoneId": {
                  "type": "integer",
                  "description": "The linked storage zone ID."
                },
                "EdgeScriptId": {
                  "type": "integer",
                  "description": "The linked edge script ID."
                },
                "AllowedReferrers": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "description": "The referrer hostnames allowed to access the pull zone."
                },
                "BlockedReferrers": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "description": "The referrer hostnames blocked from the pull zone."
                },
                "BlockedIps": {
                  "type": "array",
                  "items": {
                    "type": "string",
                    "minLength": 1
                  },
                  "description": "The IP addresses blocked from the pull zone."
                },
                "ZoneSecurityEnabled": {
                  "type": "boolean",
                  "description": "Whether secure-token URL authentication is enabled."
                },
                "IgnoreQueryStrings": {
                  "type": "boolean",
                  "description": "Whether the pull zone ignores query strings for cache keys."
                },
                "MonthlyBandwidthLimit": {
                  "type": "integer",
                  "description": "The monthly bandwidth limit in bytes."
                },
                "MonthlyBandwidthUsed": {
                  "type": "integer",
                  "description": "The bandwidth used this month in bytes."
                },
                "MonthlyCharges": {
                  "type": "number",
                  "description": "The total monthly charges accumulated by the pull zone."
                },
                "AddHostHeader": {
                  "type": "boolean",
                  "description": "Whether Bunny forwards the current hostname to the origin."
                },
                "OriginHostHeader": {
                  "type": "string",
                  "description": "The host header sent to the origin."
                }
              },
              "additionalProperties": true,
              "description": "A Bunny Pull Zone payload."
            },
            "description": "The pull zones returned by Bunny."
          },
          "currentPage": {
            "type": "integer",
            "description": "The current page number when Bunny returns a paginated response."
          },
          "totalItems": {
            "type": "integer",
            "description": "The total number of pull zones available for the current query."
          },
          "hasMoreItems": {
            "type": "boolean",
            "description": "Whether another page of pull zones is available."
          }
        },
        "additionalProperties": false,
        "required": [
          "pullZones"
        ],
        "description": "The normalized response returned when listing Bunny Pull Zones."
      }
    },
    {
      "id": "bunnycdn.purge_pull_zone_cache",
      "service": "bunnycdn",
      "name": "purge_pull_zone_cache",
      "description": "Purge the cache for a Bunny Pull Zone, optionally restricted to one cache tag.",
      "requiredScopes": [],
      "providerPermissions": [],
      "inputSchema": {
        "type": "object",
        "properties": {
          "pullZoneId": {
            "type": "integer",
            "minimum": 1,
            "description": "The Bunny Pull Zone ID."
          },
          "cacheTag": {
            "type": "string",
            "minLength": 1,
            "description": "Optional cache tag used to purge only matching cached objects."
          }
        },
        "additionalProperties": false,
        "required": [
          "pullZoneId"
        ],
        "description": "Input parameters for purging a Bunny Pull Zone cache."
      },
      "outputSchema": {
        "type": "object",
        "properties": {
          "pullZoneId": {
            "type": "integer",
            "minimum": 1,
            "description": "The Bunny Pull Zone ID."
          },
          "purged": {
            "type": "boolean",
            "description": "Whether the purge request completed successfully."
          },
          "cacheTag": {
            "type": "string",
            "minLength": 1,
            "description": "The cache tag passed to Bunny for the purge request."
          }
        },
        "additionalProperties": false,
        "required": [
          "pullZoneId",
          "purged"
        ],
        "description": "The confirmation returned after purging a Bunny Pull Zone cache."
      }
    }
  ]
}
