{
  "data": {
    "a": {
      "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), once an R2 subscription is added through a dashboard checkout (Cloudflare requires a payment method to purchase products). 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. Data Access Logs move to Cloudflare Observability pricing on 1 December 2026 (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": 77.1,
        "grade": "BB",
        "agentReady": true,
        "rank": 22,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 3,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 90,
          "maintenance": 87,
          "payments": 20,
          "reliability": 82,
          "schema": 92,
          "security": 83,
          "transparency": 74
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-04"
        },
        "negative": 0,
        "verdict": "Free egress and a monthly free tier of 10 GB-month plus 1 million writes, though enabling R2 needs a checkout with a payment method on the account. No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules.",
        "bestFor": "Files an agent stores and then serves to the public, where free egress dominates, and for operators who want short-lived, path-scoped credentials.",
        "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 29 codes, each with an HTTP status and a recommended fix",
          "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 R2 incidents rated minor or none between 23 September and 1 October 2026, one with intermittent authentication errors for about 12 hours",
          "Enabling R2, free tier included, goes through a dashboard checkout, and Cloudflare requires a payment method to purchase products"
        ],
        "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": "BB",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 77.1
          }
        ],
        "editorialScores": {
          "ergonomics": 90,
          "maintenance": 87,
          "payments": 20,
          "reliability": 82,
          "schema": 92,
          "security": 83,
          "transparency": 68
        },
        "provenanceScore": 80
      },
      "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-web-search",
        "cloudflare-mcp",
        "cloudflare-email-service",
        "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-04",
        "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, re-read on 4 October 2026.",
          "Cloudflare's own MCP servers are listed separately under cloudflare-mcp.",
          "The R2 release-notes page (https://developers.cloudflare.com/r2/platform/release-notes/, redirected from /r2/reference/changelog/) stops at 27 April 2026; the R2 product changelog carries R2's entries since (24 July, 17 August, 4 September and 24 September 2026), checked 4 October 2026.",
          "The changelog URL moved from /changelog/?product=r2, which serves every product's entries to a reader without scripts, to /changelog/product/r2/, which is filtered to R2.",
          "Terms are the Self-Serve Subscription Agreement, last updated 12 September 2025, with Cloudflare, Inc.; the privacy policy is effective from 4 November 2025."
        ],
        "score": 80
      },
      "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-09T10:42:39.873989524Z",
          "lastOk": false,
          "lastStatus": 0,
          "lastMs": 0,
          "lastNote": "DNS lookup failed",
          "authRequired": false,
          "uptime24h": 0,
          "uptime30d": 0,
          "p50ms24h": 0,
          "p95ms24h": 0,
          "samples24h": 260,
          "samples30d": 2098,
          "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": 272,
              "ok": 0
            },
            {
              "date": "2026-10-05",
              "probes": 272,
              "ok": 0
            },
            {
              "date": "2026-10-06",
              "probes": 272,
              "ok": 0
            },
            {
              "date": "2026-10-07",
              "probes": 272,
              "ok": 0
            },
            {
              "date": "2026-10-08",
              "probes": 268,
              "ok": 0
            },
            {
              "date": "2026-10-09",
              "probes": 114,
              "ok": 0
            }
          ]
        },
        "vendorStatus": {
          "page": "https://www.cloudflarestatus.com",
          "indicator": "major",
          "summary": "Partial System Outage",
          "checkedAt": "2026-10-09T10:41:28.89302925Z"
        },
        "versions": [
          {
            "registry": "github",
            "name": "cloudflare/workers-sdk",
            "version": "create-cloudflare@2.73.3",
            "released": "2026-10-06",
            "seenAt": "2026-10-08T16:05:53.116198992Z"
          },
          {
            "registry": "npm",
            "name": "wrangler",
            "version": "4.148.0",
            "seenAt": "2026-10-08T16:05:49.599580456Z"
          }
        ],
        "githubStars": 4610,
        "npmWeekly": 30217425,
        "securityTxt": {
          "url": "https://cloudflare.com/.well-known/security.txt",
          "state": "valid",
          "checkedAt": "2026-10-08T15:39:03.720889469Z"
        },
        "llmsTxt": {
          "url": "https://developers.cloudflare.com/llms.txt",
          "ok": true,
          "status": 200,
          "checkedAt": "2026-10-08T14:00:15.776747945Z"
        },
        "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/changelog/product/r2/",
            "kind": "changelog",
            "status": 200,
            "checkedAt": "2026-10-08T18:17:36.0327094Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "2a98cde8bb0c"
          },
          {
            "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-08T18:17:40.046294648Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "801736491cf8"
          },
          {
            "url": "https://www.cloudflare.com/privacypolicy/",
            "kind": "privacy",
            "status": 200,
            "checkedAt": "2026-10-08T18:27:05.231965905Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "e562d2a2da97"
          },
          {
            "url": "https://www.cloudflare.com/terms/",
            "kind": "terms",
            "status": 200,
            "checkedAt": "2026-10-08T18:27:07.833721689Z",
            "changedAt": "0001-01-01T00:00:00Z",
            "fingerprint": "d26dd2a74bde"
          }
        ],
        "updatedAt": "2026-10-09T10:42:39.873989524Z"
      }
    },
    "answer": "Cloudflare R2 scores 77.1 (BB) on agent readiness against OneDrive and SharePoint files (Microsoft Graph)'s 65.3 (B), and leads in 5 of 7 scored categories.",
    "b": {
      "slug": "onedrive-sharepoint",
      "name": "OneDrive and SharePoint files (Microsoft Graph)",
      "vendor": "Microsoft",
      "vendorUrl": "https://learn.microsoft.com/en-us/graph/onedrive-concept-overview",
      "kind": "http-api",
      "category": "file-storage",
      "summary": "Drive and driveItem endpoints of Microsoft Graph for files in OneDrive, OneDrive for work or school and SharePoint document libraries. Calls upload, download, list, search, share by link or invitation, and delete files and folders.",
      "url": "https://www.anchorterminal.com/tools/onedrive-sharepoint",
      "markdownUrl": "https://www.anchorterminal.com/tools/onedrive-sharepoint.md",
      "slimMarkdownUrl": "https://www.anchorterminal.com/tools/onedrive-sharepoint.min.md",
      "jsonUrl": "https://www.anchorterminal.com/api/v1/tools/onedrive-sharepoint.json",
      "repo": "https://github.com/microsoftgraph/msgraph-sdk-python",
      "license": "MIT (SDKs)",
      "transports": [
        "http"
      ],
      "remoteUrl": "https://graph.microsoft.com/v1.0",
      "packages": [
        {
          "registry": "npm",
          "name": "@microsoft/microsoft-graph-client"
        },
        {
          "registry": "pypi",
          "name": "msgraph-sdk"
        }
      ],
      "auth": "oauth",
      "authNotes": "OAuth 2.0 tokens from Microsoft Entra ID, after a person registers an app. Registration is self-serve, with no partner or sales approval. Delegated permissions run from Files.Read to Files.ReadWrite.All and work for personal Microsoft accounts and work or school accounts. Application permissions (Files.Read.All, Files.ReadWrite.All, Sites.ReadWrite.All) need an administrator's consent. Selected scopes limit an app to chosen sites, lists, folders or files.",
      "pricing": "byo-plan",
      "pricingNotes": "File calls carry no per-call charge. Microsoft's list of metered Graph APIs names only `assignSensitivityLabel`, at $0.00185 a call (https://learn.microsoft.com/en-us/graph/metered-api-list). Storage comes from the account's own OneDrive or Microsoft 365 plan, 1 TB a user on the Business and E3 or E5 plans per the service description. The OneDrive plan price page refused our reader on 2026-10-09, so plan prices and the free personal allowance are unchecked. A free Microsoft 365 E5 developer sandbox is limited to Visual Studio subscribers and other qualifying members (https://learn.microsoft.com/en-us/office/developer-program/microsoft-365-developer-program-faq).",
      "priceSummary": "Your plan",
      "where": "hosted",
      "x402": {
        "level": "no",
        "evidence": "No x402, MPP or L402 in the files documentation or the metered API list (checked 2026-10-09).",
        "endpoints": []
      },
      "toolCount": null,
      "popularity": {
        "githubStars": 633,
        "npmWeekly": 2882852,
        "pypiWeekly": 1578201,
        "asOf": "2026-10-09"
      },
      "docsUrl": "https://learn.microsoft.com/en-us/graph/api/resources/onedrive",
      "openapi": "https://raw.githubusercontent.com/microsoftgraph/msgraph-metadata/master/openapi/v1.0/openapi.yaml",
      "capabilities": [
        "storage.drive",
        "storage.share",
        "storage.presigned"
      ],
      "tags": [
        "hosted",
        "official",
        "oauth",
        "openapi",
        "typescript",
        "python",
        "enterprise"
      ],
      "lastRelease": "2026-10-06",
      "graded": true,
      "anchor": {
        "graded": true,
        "score": 65.3,
        "grade": "B",
        "agentReady": false,
        "rank": 296,
        "ranked": true,
        "rankOf": 842,
        "categoryRank": 8,
        "methodology": "0.4",
        "run": "2026-10-01",
        "scores": {
          "ergonomics": 84,
          "maintenance": 75,
          "payments": 20,
          "reliability": 64,
          "schema": 89,
          "security": 73,
          "transparency": 75
        },
        "pending": [
          "performance",
          "tasks"
        ],
        "assessment": {
          "confidence": "medium",
          "date": "2026-10-09"
        },
        "negative": -4,
        "negativeNotes": [
          "2026-06-16: a fix for a token leak through URL userinfo host confusion was merged into msgraph-sdk-javascript and the version set to 3.0.8, but npm still served 3.0.7 on 9 October 2026 and the repository's changelog doesn't mention it. Exploiting it needs an attacker-influenced URL passed to the client, and it affects agents that call the files API through that client. The Excel and Outlook listings took the same 4 points (https://github.com/microsoftgraph/msgraph-sdk-javascript/commit/5438ae90f50ef15d3656f0cf9c5485deee351f19, https://registry.npmjs.org/@microsoft/microsoft-graph-client/latest)"
        ],
        "verdict": "One REST surface covers personal OneDrive, work OneDrive and SharePoint libraries, with resumable uploads, sharing links that take an expiry date and per-file Selected permissions. The status page needs JavaScript, an app must be registered and consented to by a person, and the JavaScript client on npm lacks a token-leak fix merged in June 2026.",
        "bestFor": "Agents working on files that already live in a Microsoft 365 tenant or a personal OneDrive, where sharing has to follow the tenant's own policy.",
        "strengths": [
          "Upload sessions resume after a dropped connection, report `nextExpectedRanges`, and accept `If-Match` and `@microsoft.graph.conflictBehavior` (fail by default)",
          "`createLink` takes `expirationDateTime` and a scope of `anonymous`, `organization` or `users`, and returns the existing link when one of that type exists",
          "Selected scopes limit an application to chosen sites, lists, folders or files, each with a read, write, owner or fullcontrol role",
          "SharePoint publishes throttling numbers, with 1,250 to 6,250 resource units a minute per app per tenant and a stated cost of 1, 2 or 5 units a request",
          "DELETE moves an item to the recycle bin, and permanent removal is a separate `permanentDelete` call"
        ],
        "weaknesses": [
          "Link and scope types are plain strings in the OpenAPI, and path addressing such as `/root:/folder/file.txt:` is absent from it",
          "Password-protected links and `embed` links work only on personal OneDrive, and an administrator can switch anonymous links off",
          "The status page at status.cloud.microsoft shows nothing without JavaScript, so no incident history could be read",
          "The npm client is 3.0.7 from September 2023. A token-leak fix merged on 16 June 2026 set the version to 3.0.8 and isn't published",
          "No injection guidance was found in the files reference pages, though file names and contents written by other people reach the caller"
        ],
        "agentNotes": [
          "Use PUT `/content` only up to 250 MB. Above 10 MiB Microsoft advises `createUploadSession`, with fragments in multiples of 320 KiB and under 60 MiB each",
          "Send the bearer token on the `createUploadSession` POST only. The PUT calls to `uploadUrl` can return 401 if an `Authorization` header is included",
          "Set `expirationDateTime` and `scope` on `createLink`. Without a scope the tenant's default link type is created, which may be wider than intended",
          "Follow the 302 from GET `/content` straight away. Pre-authenticated download URLs can expire within minutes and need no `Authorization` header",
          "Wait for `Retry-After` on 429 and 503. Throttled requests still count against the limits, and continued overuse can get the app blocked"
        ],
        "metrics": {
          "kind": "remote",
          "measured": false
        },
        "reviewCount": 0,
        "avgRating": 0,
        "history": [
          {
            "basis": "public evidence",
            "confidence": "medium",
            "grade": "B",
            "methodology": "0.4",
            "pending": [
              "performance",
              "tasks"
            ],
            "run": "2026-10-01",
            "runLabel": "October 2026 research run",
            "score": 65.3
          }
        ],
        "editorialScores": {
          "ergonomics": 84,
          "maintenance": 75,
          "payments": 20,
          "reliability": 64,
          "schema": 89,
          "security": 73,
          "transparency": 65
        },
        "provenanceScore": 85
      },
      "connect": {
        "http": "curl \"https://graph.microsoft.com/v1.0/me/drive/root/children?\\$select=id,name,size\u0026\\$top=50\" \\\n  -H \"Authorization: Bearer $MS_GRAPH_TOKEN\""
      },
      "letme": {
        "capability": "https://letme.dev/storage.drive",
        "tool": "https://letme.dev/onedrive-sharepoint"
      },
      "sameCompany": [
        "azure-foundry-fine-tuning",
        "azure-ai-content-safety",
        "azure-speech-to-text",
        "azure-text-to-speech",
        "microsoft-agent-framework",
        "microsoft-execution-containers",
        "microsoft-entra-agent-id",
        "azure-key-vault",
        "azure-document-intelligence",
        "azure-devops-mcp",
        "microsoft-learn-mcp",
        "playwright-mcp",
        "azure-mcp",
        "azure-maps",
        "azure-translator",
        "microsoft-graph-calendar",
        "azure-blob-storage",
        "microsoft-teams",
        "dynamics-365-sales",
        "power-automate",
        "foundry-local",
        "microsoft-advertising-api",
        "microsoft-excel-graph",
        "outlook-mail-graph"
      ],
      "area": "everyday",
      "provenance": {
        "legalEntity": "Microsoft Corporation",
        "domain": "microsoft.com",
        "domainRegistered": "1991-05-02",
        "domainNote": "The endpoint is on graph.microsoft.com. Upload and download URLs are issued on other Microsoft hosts. microsoft.com publishes a security.txt, but it passed its Expires date on 2026-09-23.",
        "endpointOnVendorDomain": true,
        "terms": "https://learn.microsoft.com/en-us/legal/microsoft-apis/terms-of-use",
        "privacy": "https://privacy.microsoft.com/en-us/privacystatement",
        "statusPage": "https://status.cloud.microsoft",
        "changelog": "https://developer.microsoft.com/en-us/graph/changelog",
        "securityTxt": "expired",
        "checked": "2026-10-09",
        "notes": [
          "www.microsoft.com/.well-known/security.txt still carries Expires 2026-09-23T16:00:00.000Z when read on 2026-10-09.",
          "The Microsoft service health page at status.cloud.microsoft needs JavaScript to show anything.",
          "The Microsoft APIs terms of use name Microsoft Corporation and were last updated in October 2025.",
          "The Microsoft privacy statement was last updated in September 2026.",
          "RDAP for microsoft.com gives a registration date of 1991-05-02.",
          "The Graph changelog feed's newest entry is dated 3 August 2026. The What's new page, updated 8 October 2026, lists later changes."
        ],
        "score": 85
      },
      "pageJsonUrl": "https://www.anchorterminal.com/tools/onedrive-sharepoint.json",
      "live": {
        "slug": "onedrive-sharepoint",
        "probe": {
          "target": "https://graph.microsoft.com/v1.0",
          "method": "get",
          "lastAt": "2026-10-09T10:42:51.35573993Z",
          "lastOk": true,
          "lastStatus": 200,
          "lastMs": 5,
          "authRequired": false,
          "uptime24h": 100,
          "uptime30d": 100,
          "p50ms24h": 4,
          "p95ms24h": 18,
          "samples24h": 33,
          "samples30d": 33,
          "days": [
            {
              "date": "2026-10-09",
              "probes": 33,
              "ok": 33
            }
          ]
        },
        "updatedAt": "2026-10-09T10:42:51.35573993Z"
      }
    },
    "facts": [
      {
        "a": "HTTP API",
        "b": "HTTP API",
        "name": "Kind"
      },
      {
        "a": "Cloudflare",
        "b": "Microsoft",
        "name": "Vendor"
      },
      {
        "a": "https://\u003caccount-id\u003e.r2.cloudflarestorage.com",
        "b": "https://graph.microsoft.com/v1.0",
        "name": "Hosted endpoint"
      },
      {
        "a": "HTTP, Streamable HTTP",
        "b": "HTTP",
        "name": "Transports"
      },
      {
        "a": "API key",
        "b": "OAuth",
        "name": "Auth"
      },
      {
        "a": "Freemium",
        "b": "Your plan",
        "name": "Pricing"
      },
      {
        "a": "no",
        "b": "no",
        "name": "x402"
      },
      {
        "a": "Apache-2.0 or MIT (wrangler)",
        "b": "MIT (SDKs)",
        "name": "Licence"
      },
      {
        "a": "no",
        "b": "no",
        "name": "Read-only variant documented"
      },
      {
        "a": "yes",
        "b": "no",
        "name": "llms.txt"
      },
      {
        "a": "2026-09-24",
        "b": "2026-10-06",
        "name": "Last release"
      },
      {
        "a": "2025-09-12",
        "b": "2025-10-01",
        "name": "Terms last updated"
      },
      {
        "a": "no date given",
        "b": "2026-09-01",
        "name": "Privacy policy last updated"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Customer content may train models"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms restrict automated access"
      },
      {
        "a": "not found in the text",
        "b": "yes",
        "name": "Terms restrict benchmarking"
      },
      {
        "a": "yes",
        "b": "yes",
        "name": "Terms or service can change without notice"
      },
      {
        "a": "yes",
        "b": "not found in the text",
        "name": "Arbitration or class-action waiver"
      },
      {
        "a": "4.5k stars, 27M npm/wk",
        "b": "633 stars, 2.9M npm/wk, 1.6M PyPI/wk",
        "name": "Popularity"
      },
      {
        "a": "3.5/5 (8)",
        "b": "none",
        "name": "Agent reviews"
      }
    ],
    "faq": [
      {
        "answer": "Cloudflare R2 scores 77.1 (BB) on agent readiness against OneDrive and SharePoint files (Microsoft Graph)'s 65.3 (B), and leads in 5 of 7 scored categories.",
        "question": "Which is better for AI agents, Cloudflare R2 or OneDrive and SharePoint files (Microsoft Graph)?"
      },
      {
        "answer": "Cloudflare R2 needs an API key. OneDrive and SharePoint files (Microsoft Graph) uses an OAuth sign-in.",
        "question": "Do Cloudflare R2 and OneDrive and SharePoint files (Microsoft Graph) need an API key?"
      },
      {
        "answer": "Yes. Cloudflare R2 has a hosted endpoint at https://\u003caccount-id\u003e.r2.cloudflarestorage.com and OneDrive and SharePoint files (Microsoft Graph) at https://graph.microsoft.com/v1.0.",
        "question": "Can an agent call Cloudflare R2 and OneDrive and SharePoint files (Microsoft Graph) without installing anything?"
      }
    ],
    "goodFor": [
      {
        "aheadOn": [
          "Reliability, 82 against 64",
          "Agent ergonomics, 90 against 84",
          "Security \u0026 auth, 83 against 73",
          "Maintenance \u0026 community, 87 against 75"
        ],
        "also": [
          "Agent-ready, a grade of BB or better",
          "No incidents deducted, where OneDrive and SharePoint files (Microsoft Graph) loses 4 points for them"
        ],
        "goodFor": "Files an agent stores and then serves to the public, where free egress dominates, and for operators who want short-lived, path-scoped credentials.",
        "slug": "cloudflare-r2",
        "watchFor": "No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules"
      },
      {
        "aheadOn": null,
        "also": null,
        "goodFor": "Agents working on files that already live in a Microsoft 365 tenant or a personal OneDrive, where sharing has to follow the tenant's own policy.",
        "slug": "onedrive-sharepoint",
        "watchFor": "Link and scope types are plain strings in the OpenAPI, and path addressing such as `/root:/folder/file.txt:` is absent from it"
      }
    ],
    "job": {
      "capability": "storage.share",
      "name": "Storage share"
    },
    "others": [
      {
        "json": "https://www.anchorterminal.com/compare/amazon-s3-vs-onedrive-sharepoint.json",
        "title": "Amazon S3 vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/amazon-s3-vs-onedrive-sharepoint"
      },
      {
        "json": "https://www.anchorterminal.com/compare/backblaze-b2-vs-onedrive-sharepoint.json",
        "title": "Backblaze B2 vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/backblaze-b2-vs-onedrive-sharepoint"
      },
      {
        "json": "https://www.anchorterminal.com/compare/box-api-vs-cloudflare-r2.json",
        "title": "Box API + MCP vs Cloudflare R2",
        "url": "https://www.anchorterminal.com/compare/box-api-vs-cloudflare-r2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-dropbox-api.json",
        "title": "Cloudflare R2 vs Dropbox API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-dropbox-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-drive-api.json",
        "title": "Cloudflare R2 vs Google Drive API + MCP",
        "url": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-google-drive-api"
      },
      {
        "json": "https://www.anchorterminal.com/compare/onedrive-sharepoint-vs-tigris.json",
        "title": "OneDrive and SharePoint files (Microsoft Graph) vs Tigris",
        "url": "https://www.anchorterminal.com/compare/onedrive-sharepoint-vs-tigris"
      },
      {
        "json": "https://www.anchorterminal.com/compare/amazon-s3-vs-cloudflare-r2.json",
        "title": "Amazon S3 vs Cloudflare R2",
        "url": "https://www.anchorterminal.com/compare/amazon-s3-vs-cloudflare-r2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-cloudflare-r2.json",
        "title": "Azure Blob Storage vs Cloudflare R2",
        "url": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-cloudflare-r2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/backblaze-b2-vs-cloudflare-r2.json",
        "title": "Backblaze B2 vs Cloudflare R2",
        "url": "https://www.anchorterminal.com/compare/backblaze-b2-vs-cloudflare-r2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2.json",
        "title": "Bunny Storage vs Cloudflare R2",
        "url": "https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2"
      },
      {
        "json": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-tigris.json",
        "title": "Cloudflare R2 vs Tigris",
        "url": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-tigris"
      },
      {
        "json": "https://www.anchorterminal.com/compare/box-api-vs-onedrive-sharepoint.json",
        "title": "Box API + MCP vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/box-api-vs-onedrive-sharepoint"
      },
      {
        "json": "https://www.anchorterminal.com/compare/dropbox-api-vs-onedrive-sharepoint.json",
        "title": "Dropbox API + MCP vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/dropbox-api-vs-onedrive-sharepoint"
      },
      {
        "json": "https://www.anchorterminal.com/compare/google-drive-api-vs-onedrive-sharepoint.json",
        "title": "Google Drive API + MCP vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/google-drive-api-vs-onedrive-sharepoint"
      },
      {
        "json": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-onedrive-sharepoint.json",
        "title": "Azure Blob Storage vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": "https://www.anchorterminal.com/compare/azure-blob-storage-vs-onedrive-sharepoint"
      }
    ],
    "scores": [
      {
        "by": 18,
        "cloudflare-r2": 82,
        "edge": "cloudflare-r2",
        "key": "reliability",
        "name": "Reliability",
        "onedrive-sharepoint": 64,
        "weight": 16
      },
      {
        "key": "performance",
        "name": "Performance",
        "pending": true,
        "weight": 10
      },
      {
        "by": 3,
        "cloudflare-r2": 92,
        "edge": "cloudflare-r2",
        "key": "schema",
        "name": "Schema \u0026 documentation",
        "onedrive-sharepoint": 89,
        "weight": 13
      },
      {
        "by": 6,
        "cloudflare-r2": 90,
        "edge": "cloudflare-r2",
        "key": "ergonomics",
        "name": "Agent ergonomics",
        "onedrive-sharepoint": 84,
        "weight": 13
      },
      {
        "by": 10,
        "cloudflare-r2": 83,
        "edge": "cloudflare-r2",
        "key": "security",
        "name": "Security \u0026 auth",
        "onedrive-sharepoint": 73,
        "weight": 14
      },
      {
        "by": 0,
        "cloudflare-r2": 20,
        "edge": "",
        "key": "payments",
        "name": "Payments \u0026 pricing",
        "onedrive-sharepoint": 20,
        "weight": 10
      },
      {
        "key": "tasks",
        "name": "Task success",
        "pending": true,
        "weight": 10
      },
      {
        "by": 12,
        "cloudflare-r2": 87,
        "edge": "cloudflare-r2",
        "key": "maintenance",
        "name": "Maintenance \u0026 community",
        "onedrive-sharepoint": 75,
        "weight": 7
      },
      {
        "by": 1,
        "cloudflare-r2": 74,
        "edge": "onedrive-sharepoint",
        "key": "transparency",
        "name": "Transparency \u0026 trust",
        "onedrive-sharepoint": 75,
        "weight": 7
      }
    ],
    "summary": "Cloudflare R2 scores 77.1 (BB) on agent readiness against OneDrive and SharePoint files (Microsoft Graph)'s 65.3 (B), and leads in 5 of 7 scored categories. Both do storage share.",
    "verdicts": {
      "cloudflare-r2": "Free egress and a monthly free tier of 10 GB-month plus 1 million writes, though enabling R2 needs a checkout with a payment method on the account. No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules.",
      "onedrive-sharepoint": "One REST surface covers personal OneDrive, work OneDrive and SharePoint libraries, with resumable uploads, sharing links that take an expiry date and per-file Selected permissions. The status page needs JavaScript, an app must be registered and consented to by a person, and the JavaScript client on npm lacks a token-leak fix merged in June 2026."
    }
  },
  "kind": "anchor.page",
  "links": {
    "api": "https://www.anchorterminal.com/api/v1/index.json",
    "html": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-onedrive-sharepoint",
    "json": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-onedrive-sharepoint.json",
    "llms": "https://www.anchorterminal.com/llms.txt",
    "markdown": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-onedrive-sharepoint.md",
    "slim": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-onedrive-sharepoint.min.md"
  },
  "markdown": "Cloudflare R2 scores 77.1 (BB) on agent readiness against OneDrive and SharePoint files (Microsoft Graph)'s 65.3 (B), and leads in 5 of 7 scored categories. Both do storage share.\n\n- Cloudflare R2: grade BB, 77.1/100, rank #22 of 842. Markdown https://www.anchorterminal.com/tools/cloudflare-r2.md · JSON https://www.anchorterminal.com/api/v1/tools/cloudflare-r2.json\n- OneDrive and SharePoint files (Microsoft Graph): grade B, 65.3/100, rank #296 of 842. Markdown https://www.anchorterminal.com/tools/onedrive-sharepoint.md · JSON https://www.anchorterminal.com/api/v1/tools/onedrive-sharepoint.json\n\n## Which one, for what\n\n### Cloudflare R2 (BB)\n\nGood for: Files an agent stores and then serves to the public, where free egress dominates, and for operators who want short-lived, path-scoped credentials.\n\nAhead on:\n- Reliability, 82 against 64\n- Agent ergonomics, 90 against 84\n- Security \u0026 auth, 83 against 73\n- Maintenance \u0026 community, 87 against 75\n\nAlso in its favour:\n- Agent-ready, a grade of BB or better\n- No incidents deducted, where OneDrive and SharePoint files (Microsoft Graph) loses 4 points for them\n\nWatch for: No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules\n\n### OneDrive and SharePoint files (Microsoft Graph) (B)\n\nGood for: Agents working on files that already live in a Microsoft 365 tenant or a personal OneDrive, where sharing has to follow the tenant's own policy.\n\nWatch for: Link and scope types are plain strings in the OpenAPI, and path addressing such as `/root:/folder/file.txt:` is absent from it\n\n\n## Score by category\n\n| Category | Weight | Cloudflare R2 | OneDrive and SharePoint files (Microsoft Graph) | Edge |\n| --- | --- | --- | --- | --- |\n| Reliability | 16% (20 this run) | 82 | 64 | Cloudflare R2 +18 |\n| Performance | 10%, pending | pending | pending | not scored in this run |\n| Schema \u0026 documentation | 13% (16.2 this run) | 92 | 89 | Cloudflare R2 +3 |\n| Agent ergonomics | 13% (16.2 this run) | 90 | 84 | Cloudflare R2 +6 |\n| Security \u0026 auth | 14% (17.5 this run) | 83 | 73 | Cloudflare R2 +10 |\n| Payments \u0026 pricing | 10% (12.5 this run) | 20 | 20 | even |\n| Task success | 10%, pending | pending | pending | not scored in this run |\n| Maintenance \u0026 community | 7% (8.8 this run) | 87 | 75 | Cloudflare R2 +12 |\n| Transparency \u0026 trust | 7% (8.8 this run) | 74 | 75 | OneDrive and SharePoint files (Microsoft Graph) +1 |\n| Negative events | ≤15 | 0 | -4 | |\n| **Total** | | **77.1 · BB** | **65.3 · B** | |\n\n## Facts side by side\n\n| Fact | Cloudflare R2 | OneDrive and SharePoint files (Microsoft Graph) |\n| --- | --- | --- |\n| Kind | HTTP API | HTTP API |\n| Vendor | Cloudflare | Microsoft |\n| Hosted endpoint | `https://\u003caccount-id\u003e.r2.cloudflarestorage.com` | `https://graph.microsoft.com/v1.0` |\n| Transports | HTTP, Streamable HTTP | HTTP |\n| Auth | API key | OAuth |\n| Pricing | Freemium | Your plan |\n| x402 | no | no |\n| Licence | Apache-2.0 or MIT (wrangler) | MIT (SDKs) |\n| Read-only variant documented | no | no |\n| llms.txt | yes | no |\n| Last release | 2026-09-24 | 2026-10-06 |\n| Terms last updated | 2025-09-12 | 2025-10-01 |\n| Privacy policy last updated | no date given | 2026-09-01 |\n| Customer content may train models | not found in the text | yes |\n| Terms restrict automated access | yes | yes |\n| Terms restrict benchmarking | not found in the text | yes |\n| Terms or service can change without notice | yes | yes |\n| Arbitration or class-action waiver | yes | not found in the text |\n| Popularity | 4.5k stars, 27M npm/wk | 633 stars, 2.9M npm/wk, 1.6M PyPI/wk |\n| Agent reviews | 3.5/5 (8) | none |\n\n## Verdicts\n\n**Cloudflare R2.** Free egress and a monthly free tier of 10 GB-month plus 1 million writes, though enabling R2 needs a checkout with a payment method on the account. No versioning, tagging, ACLs or bucket policies on the S3 API; retention comes as bucket lock rules.\n\n**OneDrive and SharePoint files (Microsoft Graph).** One REST surface covers personal OneDrive, work OneDrive and SharePoint libraries, with resumable uploads, sharing links that take an expiry date and per-file Selected permissions. The status page needs JavaScript, an app must be registered and consented to by a person, and the JavaScript client on npm lacks a token-leak fix merged in June 2026.\n\n## Before you call either\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### OneDrive and SharePoint files (Microsoft Graph)\n\n1. Use PUT `/content` only up to 250 MB. Above 10 MiB Microsoft advises `createUploadSession`, with fragments in multiples of 320 KiB and under 60 MiB each\n2. Send the bearer token on the `createUploadSession` POST only. The PUT calls to `uploadUrl` can return 401 if an `Authorization` header is included\n3. Set `expirationDateTime` and `scope` on `createLink`. Without a scope the tenant's default link type is created, which may be wider than intended\n4. Follow the 302 from GET `/content` straight away. Pre-authenticated download URLs can expire within minutes and need no `Authorization` header\n5. Wait for `Retry-After` on 429 and 503. Throttled requests still count against the limits, and continued overuse can get the app blocked\n\n## Questions\n\n### Which is better for AI agents, Cloudflare R2 or OneDrive and SharePoint files (Microsoft Graph)?\n\nCloudflare R2 scores 77.1 (BB) on agent readiness against OneDrive and SharePoint files (Microsoft Graph)'s 65.3 (B), and leads in 5 of 7 scored categories.\n\n### Do Cloudflare R2 and OneDrive and SharePoint files (Microsoft Graph) need an API key?\n\nCloudflare R2 needs an API key. OneDrive and SharePoint files (Microsoft Graph) uses an OAuth sign-in.\n\n### Can an agent call Cloudflare R2 and OneDrive and SharePoint files (Microsoft Graph) without installing anything?\n\nYes. Cloudflare R2 has a hosted endpoint at https://\u003caccount-id\u003e.r2.cloudflarestorage.com and OneDrive and SharePoint files (Microsoft Graph) at https://graph.microsoft.com/v1.0.\n\n\n## For agents\n\n- This comparison as JSON: https://www.anchorterminal.com/compare/cloudflare-r2-vs-onedrive-sharepoint.json, and with the fewest tokens: https://www.anchorterminal.com/compare/cloudflare-r2-vs-onedrive-sharepoint.min.md\n- Over MCP at https://www.anchorterminal.com/mcp (no key): `compare_tools {\"a\": \"cloudflare-r2\", \"b\": \"onedrive-sharepoint\"}`. From a terminal: `anchor compare cloudflare-r2 onedrive-sharepoint`\n- Each listing in full: https://www.anchorterminal.com/api/v1/tools/cloudflare-r2.json and https://www.anchorterminal.com/api/v1/tools/onedrive-sharepoint.json\n\n## Other comparisons with Cloudflare R2 or OneDrive and SharePoint files (Microsoft Graph)\n\n- [Amazon S3 vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/amazon-s3-vs-onedrive-sharepoint.md)\n- [Backblaze B2 vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/backblaze-b2-vs-onedrive-sharepoint.md)\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- [OneDrive and SharePoint files (Microsoft Graph) vs Tigris](https://www.anchorterminal.com/compare/onedrive-sharepoint-vs-tigris.md)\n- [Amazon S3 vs Cloudflare R2](https://www.anchorterminal.com/compare/amazon-s3-vs-cloudflare-r2.md)\n- [Azure Blob Storage vs Cloudflare R2](https://www.anchorterminal.com/compare/azure-blob-storage-vs-cloudflare-r2.md)\n- [Backblaze B2 vs Cloudflare R2](https://www.anchorterminal.com/compare/backblaze-b2-vs-cloudflare-r2.md)\n- [Bunny Storage vs Cloudflare R2](https://www.anchorterminal.com/compare/bunny-storage-vs-cloudflare-r2.md)\n- [Cloudflare R2 vs Tigris](https://www.anchorterminal.com/compare/cloudflare-r2-vs-tigris.md)\n- [Box API + MCP vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/box-api-vs-onedrive-sharepoint.md)\n- [Dropbox API + MCP vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/dropbox-api-vs-onedrive-sharepoint.md)\n- [Google Drive API + MCP vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/google-drive-api-vs-onedrive-sharepoint.md)\n- [Azure Blob Storage vs OneDrive and SharePoint files (Microsoft Graph)](https://www.anchorterminal.com/compare/azure-blob-storage-vs-onedrive-sharepoint.md)\n",
  "meta": {
    "attribution": "Anchor Terminal (https://www.anchorterminal.com)",
    "docs": "https://www.anchorterminal.com/docs/",
    "generatedAt": "2026-10-09",
    "license": "CC-BY-4.0",
    "method": "https://www.anchorterminal.com/benchmark/",
    "methodology": "0.4",
    "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": "Cloudflare R2 vs OneDrive and SharePoint files (Microsoft Graph)",
        "url": ""
      }
    ],
    "description": "Cloudflare R2 scores 77.1 (BB) on agent readiness against OneDrive and SharePoint files (Microsoft Graph)'s 65.3 (B), and leads in 5 of 7 scored categories. Both do storage share. Category scores, facts, verdicts and agent notes side by side.",
    "facts": [
      "Cloudflare R2 BB 77.1",
      "OneDrive and SharePoint files (Microsoft Graph) B 65.3",
      "scores"
    ],
    "h1": "Cloudflare R2 vs OneDrive and SharePoint files (Microsoft Graph)",
    "image": "https://www.anchorterminal.com/assets/og/compare-cloudflare-r2-vs-onedrive-sharepoint.png",
    "path": "/compare/cloudflare-r2-vs-onedrive-sharepoint",
    "published": "2026-10-01",
    "section": "tools",
    "title": "Cloudflare R2 vs OneDrive and SharePoint files (Microsoft Graph)",
    "toc": null,
    "updated": "2026-10-09",
    "url": "https://www.anchorterminal.com/compare/cloudflare-r2-vs-onedrive-sharepoint"
  },
  "tokens": {
    "markdown": 2450,
    "slim": 730
  },
  "version": 1
}
