Integrate Bunny.net services (CDN, Storage, Stream, DNS, Edge Scripting, Shield, Magic Containers, Optimizer, Database). Use when building with Bunny.net APIs, deploying to Bunny CDN, uploading files to Edge Storage, managing video streaming, configuring DNS zones, writing edge scripts, setting up WAF/DDoS protection, deploying containers, or optimizing images. Triggers on "bunny", "bunnycdn", "b-cdn", "pull zone", "edge storage", "bunny stream".
Integrate with Bunny.net's cloud platform: CDN, Storage, Stream, DNS, Edge Scripting, Shield (WAF/DDoS), Magic Containers, Optimizer, and Database.
Scope: This skill handles Bunny.net API integration, configuration, and deployment. Does NOT handle other CDN providers (Cloudflare, Fastly, AWS CloudFront).
Three credential types — each API uses its own key via AccessKey header:
| Credential | Used For | Where to Find |
|---|---|---|
| Account API Key | Core API (Pull Zones, DNS, Statistics) | Dashboard → Account Settings |
| Storage Zone Password | Edge Storage API | Dashboard → Storage Zone → FTP & API Access |
| Stream Library API Key | Stream API | Dashboard → Stream → API |
# All APIs use the same header format
curl -H "AccessKey: YOUR_KEY" -H "Content-Type: application/json" https://api.bunny.net/...
| Service | Base URL |
|---|---|
| Core (CDN, DNS, Zones) | https://api.bunny.net |
| Edge Storage | https://{region}.bunnycdn.com |
| Stream | https://video.bunnycdn.com |
| Shield | https://api.bunny.net (via Core) |
| Edge Scripting | https://api.bunny.net (via Core) |
Storage regions: storage (Falkenstein), uk, ny, la, sg, se, br, jh, syd
# Create pull zone
curl -X POST https://api.bunny.net/pullzone \
-H "AccessKey: $BUNNY_API_KEY" -H "Content-Type: application/json" \
-d '{"Name":"my-cdn","OriginUrl":"https://origin.example.com"}'
# Add custom hostname
curl -X POST https://api.bunny.net/pullzone/{id}/addHostname \
-H "AccessKey: $BUNNY_API_KEY" -H "Content-Type: application/json" \
-d '{"Hostname":"cdn.example.com"}'
# Purge cache
curl -X POST https://api.bunny.net/pullzone/{id}/purgeCache \
-H "AccessKey: $BUNNY_API_KEY"
# Purge single URL
curl -X POST "https://api.bunny.net/purge?url=https://cdn.example.com/file.js" \
-H "AccessKey: $BUNNY_API_KEY"
# Upload file (raw binary body, no encoding)
curl -X PUT https://storage.bunnycdn.com/{zone}/{path}/file.jpg \
-H "AccessKey: $STORAGE_PASSWORD" \
-H "Content-Type: application/octet-stream" \
--upload-file ./file.jpg
# Download file
curl -X GET https://storage.bunnycdn.com/{zone}/{path}/file.jpg \
-H "AccessKey: $STORAGE_PASSWORD" -o file.jpg
# List directory
curl https://storage.bunnycdn.com/{zone}/{path}/ \
-H "AccessKey: $STORAGE_PASSWORD"
# Delete file
curl -X DELETE https://storage.bunnycdn.com/{zone}/{path}/file.jpg \
-H "AccessKey: $STORAGE_PASSWORD"
# Create video entry
curl -X POST https://video.bunnycdn.com/library/{libId}/videos \
-H "AccessKey: $STREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"title":"My Video"}'
# Upload video (raw binary)
curl -X PUT https://video.bunnycdn.com/library/{libId}/videos/{videoId} \
-H "AccessKey: $STREAM_API_KEY" \
--data-binary '@video.mp4'
# Fetch from URL
curl -X POST https://video.bunnycdn.com/library/{libId}/videos/fetch \
-H "AccessKey: $STREAM_API_KEY" -H "Content-Type: application/json" \
-d '{"url":"https://example.com/video.mp4"}'
# Embed: <iframe src="https://iframe.mediadelivery.net/embed/{libId}/{videoId}" ...>
# Create DNS zone
curl -X POST https://api.bunny.net/dnszone \
-H "AccessKey: $BUNNY_API_KEY" -H "Content-Type: application/json" \
-d '{"Domain":"example.com"}'
# Add record
curl -X PUT https://api.bunny.net/dnszone/{zoneId}/records \
-H "AccessKey: $BUNNY_API_KEY" -H "Content-Type: application/json" \
-d '{"Type":0,"Name":"www","Value":"1.2.3.4","Ttl":300}'
# Type: 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
# Create edge script
curl -X POST https://api.bunny.net/compute/script \
-H "AccessKey: $BUNNY_API_KEY" -H "Content-Type: application/json" \
-d '{"Name":"my-script","ScriptType":0}'
# ScriptType: 0=Standalone, 1=Middleware
# Deploy code
curl -X POST https://api.bunny.net/compute/script/{id}/code \
-H "AccessKey: $BUNNY_API_KEY" -H "Content-Type: application/json" \
-d '{"Code":"export default { async fetch(request) { return new Response(\"Hello\"); }}"}'
# Publish release
curl -X POST https://api.bunny.net/compute/script/{id}/publish \
-H "AccessKey: $BUNNY_API_KEY"
# Create application
curl -X POST https://api.bunny.net/compute/container \
-H "AccessKey: $BUNNY_API_KEY" -H "Content-Type: application/json" \
-d '{"Name":"my-app","Containers":[{"Image":"nginx:latest","CpuLimit":500,"MemoryLimit":256}]}'
# Deploy
curl -X POST https://api.bunny.net/compute/container/{id}/deploy \
-H "AccessKey: $BUNNY_API_KEY"
For detailed API specs, SDKs, edge rules, token auth, Terraform, and service-specific guides:
references/bunny-core-api-reference.md — Pull Zones, Storage Zones, DNS, Statisticsreferences/bunny-storage-and-stream-reference.md — Edge Storage HTTP/FTP, Stream video lifecyclereferences/bunny-edge-scripting-and-shield-reference.md — Edge Scripts, WAF, DDoS, Rate Limitingreferences/bunny-optimizer-containers-database-reference.md — Dynamic Images, Magic Containers, Bunny Databasereferences/bunny-integrations-and-sdks-reference.md — Official SDKs, CMS plugins, Terraform, token authTo fetch latest docs: WebFetch https://docs.bunny.net/{service}/{topic}.md
Full docs index: https://docs.bunny.net/llms.txt
BUNNY_API_KEY=your-account-api-key
BUNNY_STORAGE_PASSWORD=your-storage-zone-password
BUNNY_STORAGE_ZONE=your-storage-zone-name
BUNNY_STORAGE_REGION=storage # or uk, ny, la, sg, se, br, jh, syd
BUNNY_STREAM_API_KEY=your-stream-library-api-key
BUNNY_STREAM_LIBRARY_ID=your-library-id