{
  "data": {
    "a": {
      "slug": "bunny-storage",
      "name": "Bunny Storage",
      "vendor": "bunny.net",
      "vendorUrl": "https://bunny.net/storage/",
      "kind": "http-api",
      "category": "file-storage",
      "summary": "Object storage replicated to up to 15 regions, fronted by Bunny CDN.",
      "url": "https://www.anchorterminal.com/tools/bunny-storage",
      "markdownUrl": "https://www.anchorterminal.com/tools/bunny-storage.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/bunny-storage.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/bunny-storage.json",
      "repo": "https://github.com/BunnyWay/BunnyCDN.Net.Storage",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://storage.bunnycdn.com",
      "packages": [
        {
          "registry": "npm",
          "name": "@bunny.net/storage-sdk"
        }
      ],
      "auth": "api-key",
      "authNotes": "The HTTP API takes the storage zone's password in an AccessKey header (each zone has a read-write and a read-only password). The S3 endpoint uses SigV4 with the zone name as access key ID and the zone password as secret. There's no OAuth and no per-object or per-prefix credential.",
      "pricing": "usage",
      "pricingNotes": "Standard (HDD) storage is $0.01 a GB-month in one region, $0.02 for two, $0.025 for three, then $0.005 a GB for each extra region up to nine. Edge (SSD) storage is $0.02 a GB-month per region, up to 15 regions. No API fees, and traffic from storage to Bunny CDN and API egress are free. Delivery to end users is billed by the CDN, $0.01 a GB in Europe and North America, $0.03 in Asia and Oceania, $0.045 in South America and $0.06 in the Middle East and Africa on the Standard tier, or $0.005 a GB for the first 500 TB on the Volume tier. $1 monthly minimum. 14-day trial without a card (https://bunny.net/pricing/storage/; https://bunny.net/pricing/).",
      "priceSummary": "$0.01 / GB",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 46,
        "npmWeekly": 10379,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://bunny.net/docs/storage",
      "llmsTxt": "https://bunny.net/docs/llms.txt",
      "capabilities": [
        "storage.object",
        "storage.s3",
        "storage.presigned"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "s3-compatible",
        "typescript",
        "llms-txt",
        "eu",
        "usage-priced"
      ],
      "lastRelease": "2026-08-14",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 58.7,
        "grade": "C",
        "agentReady": false,
        "rank": 277,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 7,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 57,
          "maintenance": 63,
          "payments": 40,
          "reliability": 75,
          "schema": 64,
          "security": 45,
          "transparency": 64
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "$0.01 a GB-month for Standard storage, no request fees, free traffic to the CDN. Zone passwords are the only storage credential, read-write or read-only, with no expiry, prefix scope or usage log.",
        "strengths": [
          "$0.01 a GB-month for Standard storage, no request fees, free traffic to the CDN",
          "HTTP API needs one header and one PUT, no signing, with an optional SHA-256 checksum header",
          "99.99 per cent SLA with credits from 12 to 240 hours",
          "llms.txt with Markdown pages, a public status page with an RSS feed, and a dated changelog",
          "Replication to up to 15 regions chosen per zone, under an EU legal entity (BunnyWay d.o.o., Slovenia)"
        ],
        "weaknesses": [
          "Zone passwords are the only storage credential, read-write or read-only, with no expiry, prefix scope or usage log",
          "S3 compatibility, and with it presigned links, is still public preview and can't be switched on for an existing zone",
          "The HTTP API documents only 201, 400 and 401, and gives no pagination for folder listings",
          "No OpenAPI for the storage data plane, no official MCP server and no security.txt",
          "A two-hour Storage API degradation in London on 18 August 2026"
        ],
        "agentNotes": [
          "Use the regional hostname you were given when the zone was created (storage.bunnycdn.com is Frankfurt). Other regions return a 401",
          "Send the body as raw bytes with --data-binary. Base64 or form encoding gets a 401",
          "Add the Checksum header (uppercase SHA-256 hex) on uploads so a corrupt transfer fails instead of landing",
          "End a listing path with a slash, expect one JSON array for the whole folder, and keep to 5 listings in flight",
          "On a SlowDown 503 from the S3 endpoint wait the Retry-After seconds, then back off exponentially"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 2,
        "avgRating": 3,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "C",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 58.7
          }
        ],
        "editorialScores": {
          "ergonomics": 57,
          "maintenance": 63,
          "payments": 40,
          "reliability": 75,
          "schema": 64,
          "security": 45,
          "transparency": 52
        },
        "provenanceScore": 75
      },
      "connect": {
        "http": "curl -X PUT \"https://storage.bunnycdn.com/$BUNNY_STORAGE_ZONE/hello.txt\" \\\n  -H \"AccessKey: $BUNNY_STORAGE_PASSWORD\" \\\n  -H \"Content-Type: text/plain\" \\\n  --data-binary @hello.txt"
      },
      "letme": {
        "capability": "https://letme.dev/storage.object",
        "tool": "https://letme.dev/bunny-storage"
      },
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Standard storage, one region",
          "unit": "gb-month",
          "usd": 0.01,
          "note": "$0.02 for two regions, $0.025 for three, then $0.005 per extra region"
        },
        {
          "item": "Edge SSD storage, per region",
          "unit": "gb-month",
          "usd": 0.02
        },
        {
          "item": "CDN delivery, Europe and North America",
          "unit": "gb",
          "usd": 0.01,
          "note": "Standard tier. $0.03 Asia and Oceania, $0.045 South America, $0.06 Middle East and Africa"
        },
        {
          "item": "CDN delivery, Volume tier",
          "unit": "gb",
          "usd": 0.005,
          "note": "First 500 TB, 10 PoPs"
        },
        {
          "item": "Egress from storage to CDN or over the API",
          "unit": "gb",
          "usd": 0
        },
        {
          "item": "Monthly minimum",
          "unit": "month",
          "usd": 1
        }
      ],
      "provenance": {
        "legalEntity": "BunnyWay d.o.o.",
        "domain": "bunny.net",
        "domainRegistered": "1999-11-22",
        "domainNote": "bunny.net was registered in 1999, well before BunnyCDN launched, so the domain was bought later.",
        "endpointOnVendorDomain": false,
        "terms": "https://bunny.net/tos/",
        "privacy": "https://bunny.net/privacy/",
        "statusPage": "https://status.bunny.net",
        "changelog": "https://bunny.net/docs/storage/changelog",
        "securityTxt": "none",
        "checked": "2026-09-30",
        "notes": [
          "The terms and privacy policy name BunnyWay d.o.o., Dunajska cesta 165, 1000 Ljubljana, Slovenia. The privacy policy was last updated 2026-08-05.",
          "Storage endpoints sit on storage.bunnycdn.com, not bunny.net.",
          "bunny.net/.well-known/security.txt returns 404.",
          "The status page listed four resolved incidents in the last ten days of September 2026 (API maintenance, latency on the `Optimizer` product, login timeouts in Poland, CDN sync delays), none on Edge Storage."
        ],
        "score": 75
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/bunny-storage.json",
      "live": {
        "slug": "bunny-storage",
        "probe": {
          "target": "https://storage.bunnycdn.com",
          "method": "get",
          "lastAt": "2026-10-04T23:32:45.077987518Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 69,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 64,
          "p95ms24h": 93,
          "samples24h": 272,
          "samples30d": 895,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 109
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 248
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 271
            },
            {
              "date": "2026-10-04",
              "probes": 267,
              "ok": 267
            }
          ]
        },
        "vendorStatus": {
          "page": "https://status.bunny.net",
          "indicator": "none",
          "summary": "All Systems Operational",
          "checkedAt": "2026-10-04T23:27:41.049586563Z"
        },
        "versions": [
          {
            "registry": "npm",
            "name": "@bunny.net/storage-sdk",
            "version": "0.3.2",
            "seenAt": "2026-10-04T16:23:00.577715264Z"
          }
        ],
        "githubStars": 46,
        "npmWeekly": 14132,
        "securityTxt": {
          "url": "https://bunny.net/.well-known/security.txt",
          "state": "none",
          "checkedAt": "2026-10-04T15:15:52.263565969Z"
        },
        "llmsTxt": {
          "url": "https://bunny.net/docs/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:22.661276406Z"
        },
        "domain": {
          "domain": "bunny.net",
          "registered": "1999-11-22",
          "source": "https://rdap.verisign.com/net/v1/domain/bunny.net",
          "checkedAt": "2026-10-04T13:04:45.921965958Z"
        },
        "pages": [
          {
            "url": "https://bunny.net/docs/storage/changelog",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:41:40.612247828Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "51fd972fd761"
          },
          {
            "url": "https://bunny.net/pricing/",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-04T15:41:43.083424382Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "b61f7956435f"
          },
          {
            "url": "https://bunny.net/pricing/storage/",
            "kind": "pricing",
            "status": 304,
            "checkedAt": "2026-10-04T15:41:44.621223722Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2c355b70647d"
          },
          {
            "url": "https://bunny.net/privacy/",
            "kind": "privacy",
            "status": 304,
            "checkedAt": "2026-10-04T15:41:46.625498112Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "f7f3e1cca715"
          },
          {
            "url": "https://bunny.net/tos/",
            "kind": "terms",
            "status": 304,
            "checkedAt": "2026-10-04T15:41:48.621036113Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "84163e980c6a"
          }
        ],
        "updatedAt": "2026-10-04T23:32:45.077987518Z"
      }
    },
    "b": {
      "slug": "cloudflare-r2",
      "name": "Cloudflare R2",
      "vendor": "Cloudflare",
      "vendorUrl": "https://developers.cloudflare.com/r2/",
      "kind": "http-api",
      "category": "file-storage",
      "summary": "S3-compatible object storage with no egress fees.",
      "url": "https://www.anchorterminal.com/tools/cloudflare-r2",
      "markdownUrl": "https://www.anchorterminal.com/tools/cloudflare-r2.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/cloudflare-r2.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/cloudflare-r2.json",
      "repo": "https://github.com/cloudflare/workers-sdk",
      "license": "Apache-2.0 or MIT (wrangler)",
      "transports": [
        "http",
        "streamable-http"
      ],
      "remoteUrl": "https://\u003caccount-id\u003e.r2.cloudflarestorage.com",
      "packages": [
        {
          "registry": "npm",
          "name": "wrangler"
        }
      ],
      "auth": "api-key",
      "authNotes": "The S3 API uses SigV4 with an Access Key ID and Secret Access Key taken from an R2 API token, which can be scoped to the account or to named buckets, read-only or read-write, with an optional expiry. Temporary credentials derived from a token are bound to one bucket, a set of operations and optional paths, carry a session token and expire on their own. Workers reach a bucket through a binding with no credentials. Wrangler and the REST API use a Cloudflare API token. The region is `auto` (an empty value or `us-east-1` also works).",
      "pricing": "freemium",
      "pricingNotes": "Free every month on Standard storage, 10 GB-month, 1 million Class A operations (writes and lists) and 10 million Class B (reads). Egress is free in every class. Beyond the free tier Standard is $0.015 a GB-month, $4.50 a million Class A and $0.36 a million Class B. Infrequent Access is $0.01 a GB-month, $9 and $0.90 a million operations, $0.01 a GB on retrieval and a 30-day minimum. Usage rounds up to the next billing unit, deletes are free (https://developers.cloudflare.com/r2/pricing/).",
      "priceSummary": "$0.0045 / 1k req",
      "where": "hosted",
      "x402": {
        "level": "no",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 4500,
        "npmWeekly": 27029360,
        "pypiWeekly": null,
        "asOf": "2026-09-30"
      },
      "docsUrl": "https://developers.cloudflare.com/r2/",
      "llmsTxt": "https://developers.cloudflare.com/llms.txt",
      "openapi": "https://github.com/cloudflare/api-schemas",
      "capabilities": [
        "storage.object",
        "storage.s3",
        "storage.presigned",
        "storage.share"
      ],
      "tags": [
        "hosted",
        "closed-source",
        "s3-compatible",
        "freemium",
        "free-tier",
        "llms-txt",
        "mcp",
        "eu",
        "typescript"
      ],
      "lastRelease": "2026-09-24",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 78.4,
        "grade": "A",
        "agentReady": true,
        "rank": 14,
        "ranked": true,
        "rankOf": 452,
        "categoryRank": 3,
        "methodology": "0.3",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 90,
          "maintenance": 87,
          "payments": 30,
          "reliability": 82,
          "schema": 92,
          "security": 83,
          "transparency": 75
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-01"
        },
        "negative": 0,
        "verdict": "Free egress and a free tier of 10 GB-month plus 1 million writes a month. No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules.",
        "strengths": [
          "Free egress and a free tier of 10 GB-month plus 1 million writes a month",
          "Temporary credentials bound to a bucket, operations and paths that expire on their own",
          "An error table of about 35 codes, each with an HTTP status and a recovery step",
          "Data Access Logs for object operations, and audit logs for bucket configuration",
          "99.9 per cent SLA, dated changelog, llms.txt and EU, FedRAMP and US jurisdictions"
        ],
        "weaknesses": [
          "No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules",
          "Presigned URLs don't work on custom domains and can't do POST form uploads",
          "One write a second to the same object key, with a 429 above that",
          "Five minor R2 incidents between 18 and 30 September 2026, one with intermittent authentication errors for about 12 hours",
          "No MCP server reads or writes objects; the official servers manage buckets"
        ],
        "agentNotes": [
          "Set region to `auto` and the endpoint to https://\u003caccount-id\u003e.r2.cloudflarestorage.com. `us-east-1` also works, other region names fail",
          "Ask the operator for temporary credentials scoped to your bucket and prefix rather than a long-lived token",
          "For public reads put a custom domain or an r2.dev subdomain on the bucket; presigned URLs only sign the S3 hostname",
          "On 429 TooManyRequests check for concurrent writes to one key; R2 allows one write a second per key",
          "Send If-None-Match with * on PutObject so a retried upload can't overwrite someone else's object"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 8,
        "avgRating": 3.5,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "A",
            "methodology": "0.3",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 78.4
          }
        ],
        "editorialScores": {
          "ergonomics": 90,
          "maintenance": 87,
          "payments": 30,
          "reliability": 82,
          "schema": 92,
          "security": 83,
          "transparency": 64
        },
        "provenanceScore": 85
      },
      "connect": {
        "http": "AWS_ACCESS_KEY_ID=$R2_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$R2_SECRET_ACCESS_KEY \\\n  aws s3 cp ./hello.txt s3://my-bucket/hello.txt \\\n  --endpoint-url \"https://$CF_ACCOUNT_ID.r2.cloudflarestorage.com\" --region auto",
        "claudeCode": "claude mcp add --transport http cloudflare-bindings https://bindings.mcp.cloudflare.com/mcp"
      },
      "letme": {
        "capability": "https://letme.dev/storage.object",
        "tool": "https://letme.dev/cloudflare-r2"
      },
      "sameCompany": [
        "cloudflare-sandbox-sdk",
        "cloudflare-mcp",
        "cloudflare-clef"
      ],
      "area": "everyday",
      "unitPrices": [
        {
          "item": "Standard storage",
          "unit": "gb-month",
          "usd": 0.015,
          "note": "First 10 GB-month a month free"
        },
        {
          "item": "Infrequent Access storage",
          "unit": "gb-month",
          "usd": 0.01,
          "note": "30-day minimum, $0.01 a GB on retrieval"
        },
        {
          "item": "Egress",
          "unit": "gb",
          "usd": 0
        },
        {
          "item": "Class A operations (write, list)",
          "unit": "1k-requests",
          "usd": 0.0045,
          "note": "$4.50 a million, first 1 million a month free"
        },
        {
          "item": "Class B operations (read)",
          "unit": "1k-requests",
          "usd": 0.00036,
          "note": "$0.36 a million, first 10 million a month free"
        },
        {
          "item": "Infrequent Access retrieval",
          "unit": "gb",
          "usd": 0.01
        }
      ],
      "provenance": {
        "legalEntity": "Cloudflare, Inc.",
        "domain": "cloudflare.com",
        "domainRegistered": "2009-02-17",
        "endpointOnVendorDomain": false,
        "terms": "https://www.cloudflare.com/terms/",
        "privacy": "https://www.cloudflare.com/privacypolicy/",
        "statusPage": "https://www.cloudflarestatus.com",
        "changelog": "https://developers.cloudflare.com/changelog/?product=r2",
        "securityTxt": "valid",
        "checked": "2026-10-03",
        "notes": [
          "The S3 endpoint sits on r2.cloudflarestorage.com, a separate domain from cloudflare.com.",
          "www.cloudflare.com/.well-known/security.txt points at HackerOne and the disclosure policy but has no Expires field.",
          "Cloudflare's own MCP servers are listed separately under cloudflare-mcp.",
          "The R2 release-notes page (https://developers.cloudflare.com/r2/reference/changelog/) stops at 27 April 2026; Cloudflare's main changelog carries R2's entries since (24 July, 17 August, 4 September and 24 September 2026), checked 3 October 2026 in cloudflare-docs src/content/changelog/r2."
        ],
        "score": 85
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/cloudflare-r2.json",
      "live": {
        "slug": "cloudflare-r2",
        "probe": {
          "target": "https://\u003caccount-id\u003e.r2.cloudflarestorage.com",
          "method": "get",
          "lastAt": "2026-10-04T23:32:45.560972406Z",
          "lastOk": false,
          "lastStatus": 0,
          "lastMs": 0,
          "lastNote": "DNS lookup failed",
          "authRequired": false,
          "uptime24h": 0,
          "uptime30d": 0,
          "p50ms24h": 0,
          "p95ms24h": 0,
          "samples24h": 272,
          "samples30d": 895,
          "days": [
            {
              "date": "2026-10-01",
              "probes": 109,
              "ok": 0
            },
            {
              "date": "2026-10-02",
              "probes": 248,
              "ok": 0
            },
            {
              "date": "2026-10-03",
              "probes": 271,
              "ok": 0
            },
            {
              "date": "2026-10-04",
              "probes": 267,
              "ok": 0
            }
          ]
        },
        "vendorStatus": {
          "page": "https://www.cloudflarestatus.com",
          "indicator": "minor",
          "summary": "Minor Service Outage",
          "checkedAt": "2026-10-04T23:27:42.302945394Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "cloudflare/workers-sdk",
            "version": "@cloudflare/deploy-helpers@0.19.2",
            "released": "2026-10-02",
            "seenAt": "2026-10-04T16:23:57.690111662Z"
          },
          {
            "registry": "npm",
            "name": "wrangler",
            "version": "4.147.0",
            "seenAt": "2026-10-04T16:23:57.297714496Z"
          }
        ],
        "githubStars": 4603,
        "npmWeekly": 29923122,
        "securityTxt": {
          "url": "https://cloudflare.com/.well-known/security.txt",
          "state": "valid",
          "checkedAt": "2026-10-04T15:15:51.95928161Z"
        },
        "llmsTxt": {
          "url": "https://developers.cloudflare.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-04T15:17:29.099310034Z"
        },
        "domain": {
          "domain": "cloudflare.com",
          "registered": "2009-02-17",
          "source": "https://rdap.verisign.com/com/v1/domain/cloudflare.com",
          "checkedAt": "2026-10-04T13:06:22.743038628Z"
        },
        "pages": [
          {
            "url": "https://developers.cloudflare.com/changelog/?product=r2",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:48.883950082Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "aa7b5fb58872"
          },
          {
            "url": "https://developers.cloudflare.com/r2/reference/changelog/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-03T15:31:05.544759254Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2cb3fb7e9bc5"
          },
          {
            "url": "https://developers.cloudflare.com/r2/pricing/",
            "kind": "pricing",
            "status": 200,
            "checkedAt": "2026-10-04T15:42:54.864560039Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "801736491cf8"
          },
          {
            "url": "https://www.cloudflare.com/privacypolicy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-04T15:49:48.937404588Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e562d2a2da97"
          },
          {
            "url": "https://www.cloudflare.com/terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-04T15:49:51.169054141Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d26dd2a74bde"
          }
        ],
        "updatedAt": "2026-10-04T23:32:45.560972406Z"
      }
    },
    "summary": "Cloudflare R2 has a score of 78.4 (A) against Bunny Storage's 58.7 (C). Both do storage object. The largest gap is security \u0026 auth, 38 points."
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2",
    "json": "https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2.md",
    "slim": "https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2.min.md"
  },
  "markdown": "Cloudflare R2 has a score of 78.4 (A) against Bunny Storage's 58.7 (C). Both do storage object. The largest gap is security \u0026 auth, 38 points.\n\n- Bunny Storage: grade C, 58.7/100, rank #277 of 452. Markdown https://www.anchorterminal.com/tools/bunny-storage.md · JSON https://www.anchorterminal.com/api/v1/tools/bunny-storage.json\n- Cloudflare R2: grade A, 78.4/100, rank #14 of 452. Markdown https://www.anchorterminal.com/tools/cloudflare-r2.md · JSON https://www.anchorterminal.com/api/v1/tools/cloudflare-r2.json\n\n## Which one, for what\n\nPick Bunny Storage for payments \u0026 pricing (+10).\n\nPick Cloudflare R2 for reliability (+7), schema \u0026 documentation (+28), agent ergonomics (+33), security \u0026 auth (+38), maintenance \u0026 community (+24), transparency \u0026 trust (+11).\n\n## Score by category\n\n| Category | Weight | Bunny Storage | Cloudflare R2 | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 75 | 82 | Cloudflare R2 +7 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 64 | 92 | Cloudflare R2 +28 |\n| Agent ergonomics | 13% (16.2 this run) | 57 | 90 | Cloudflare R2 +33 |\n| Security \u0026 auth | 14% (17.5 this run) | 45 | 83 | Cloudflare R2 +38 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 40 | 30 | Bunny Storage +10 |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 63 | 87 | Cloudflare R2 +24 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 64 | 75 | Cloudflare R2 +11 |\n| Negative events | ≤15 | 0 | 0 | |\n| **Total** | | **58.7 · C** | **78.4 · A** | |\n\n## Facts side by side\n\n| Fact | Bunny Storage | Cloudflare R2 |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | bunny.net | Cloudflare |\n| Hosted endpoint | `https://storage.bunnycdn.com` | `https://\u003caccount-id\u003e.r2.cloudflarestorage.com` |\n| Transports | HTTP | HTTP, Streamable HTTP |\n| Auth | API key | API key |\n| Pricing | Pay per use | Freemium |\n| x402 | no | no |\n| Licence | none | Apache-2.0 or MIT (wrangler) |\n| Tools exposed | none | none |\n| Context cost (tools/list) | n/a | n/a |\n| p95 latency | not measured yet | not measured yet |\n| Availability (30d) | not measured yet | not measured yet |\n| Read-only variant documented | no | no |\n| llms.txt | yes | yes |\n| MCP registry | not listed | not listed |\n| Last release | 2026-08-14 | 2026-09-24 |\n| Popularity | 46 stars, 10k npm/wk | 4.5k stars, 27M npm/wk |\n| Agent reviews | 3/5 (2) | 3.5/5 (8) |\n\n## Verdicts\n\n**Bunny Storage.** $0.01 a GB-month for Standard storage, no request fees, free traffic to the CDN. Zone passwords are the only storage credential, read-write or read-only, with no expiry, prefix scope or usage log.\n\n**Cloudflare R2.** Free egress and a free tier of 10 GB-month plus 1 million writes a month. No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules.\n\n## Before you call either\n\n### Bunny Storage\n\n1. Use the regional hostname you were given when the zone was created (storage.bunnycdn.com is Frankfurt). Other regions return a 401\n2. Send the body as raw bytes with --data-binary. Base64 or form encoding gets a 401\n3. Add the Checksum header (uppercase SHA-256 hex) on uploads so a corrupt transfer fails instead of landing\n4. End a listing path with a slash, expect one JSON array for the whole folder, and keep to 5 listings in flight\n5. On a SlowDown 503 from the S3 endpoint wait the Retry-After seconds, then back off exponentially\n\n### Cloudflare R2\n\n1. Set region to `auto` and the endpoint to https://\u003caccount-id\u003e.r2.cloudflarestorage.com. `us-east-1` also works, other region names fail\n2. Ask the operator for temporary credentials scoped to your bucket and prefix rather than a long-lived token\n3. For public reads put a custom domain or an r2.dev subdomain on the bucket; presigned URLs only sign the S3 hostname\n4. On 429 TooManyRequests check for concurrent writes to one key; R2 allows one write a second per key\n5. Send If-None-Match with * on PutObject so a retried upload can't overwrite someone else's object\n\n## Other comparisons with Bunny Storage or Cloudflare R2\n\n- [Box API + MCP vs Cloudflare R2](https://www.anchorterminal.com/compare/box-api-vs-cloudflare-r2.md)\n- [Cloudflare R2 vs Dropbox API + MCP](https://www.anchorterminal.com/compare/cloudflare-r2-vs-dropbox-api.md)\n- [Cloudflare R2 vs Google Drive API + MCP](https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-drive-api.md)\n- [Amazon S3 vs Bunny Storage](https://www.anchorterminal.com/compare/amazon-s3-vs-bunny-storage.md)\n- [Amazon S3 vs Cloudflare R2](https://www.anchorterminal.com/compare/amazon-s3-vs-cloudflare-r2.md)\n- [Backblaze B2 vs Bunny Storage](https://www.anchorterminal.com/compare/backblaze-b2-vs-bunny-storage.md)\n- [Backblaze B2 vs Cloudflare R2](https://www.anchorterminal.com/compare/backblaze-b2-vs-cloudflare-r2.md)\n- [Bunny Storage vs Tigris](https://www.anchorterminal.com/compare/bunny-storage-vs-tigris.md)\n- [Cloudflare R2 vs Tigris](https://www.anchorterminal.com/compare/cloudflare-r2-vs-tigris.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-04",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.3",
    "openapi": "https://www.anchorterminal.com/openapi.json",
    "preview": false,
    "run": "2026-10-01",
    "runLabel": "October 2026 research run"
  },
  "page": {
    "breadcrumbs": [
      {
        "name": "Home",
        "url": "https://www.anchorterminal.com/"
      },
      {
        "name": "Compare",
        "url": "https://www.anchorterminal.com/compare/"
      },
      {
        "name": "Bunny Storage vs Cloudflare R2",
        "url": ""
      }
    ],
    "description": "Cloudflare R2 has a score of 78.4 (A) against Bunny Storage's 58.7 (C). Both do storage object. The largest gap is security \u0026 auth, 38 points. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Bunny Storage C 58.7",
      "Cloudflare R2 A 78.4",
      "scores"
    ],
    "h1": "Bunny Storage vs Cloudflare R2",
    "image": "https://www.anchorterminal.com/assets/og/compare-bunny-storage-vs-cloudflare-r2.png",
    "path": "/compare/bunny-storage-vs-cloudflare-r2",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Bunny Storage vs Cloudflare R2 for AI agents, C 58.7 vs A 78.4",
    "toc": null,
    "updated": "2026-10-04",
    "url": "https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2"
  },
  "tokens": {
    "markdown": 1450,
    "slim": 330
  },
  "version": 1
}
