bucketpilot/Docs

Connecting Cloudflare R2

Add R2 buckets with an S3-compatible API token and your Cloudflare account ID, and what differs from S3 once they're connected.

What you need

R2 buckets are a Business feature, alongside Google Cloud Storage buckets and Azure migrations.

R2 speaks the S3 API, so once it's connected it behaves like any other bucket in BucketPilot — browse, search, index, back up, migrate. Two things are specific to R2 and both are asked for on the form:

  • •An S3-compatible API token. In the Cloudflare dashboard: R2 → Manage API tokens → Create token. Use the S3-compatible Access Key ID and Secret. (Cloudflare's own instructions)
  • •Your Cloudflare account ID. R2 gives every account its own endpoint — https://<account id>.r2.cloudflarestorage.com — so without it there is no host to talk to. It's on the R2 overview page in the Cloudflare dashboard.

There is no region to choose. R2 is a single global namespace, and BucketPilot sends the auto region string R2 expects.

Adding the credential and the buckets

  1. 1.Credentials → Add credential, and pick Cloudflare R2.
  2. 2.Paste the access key ID, the secret, and your Cloudflare account ID.
  3. 3.Test it. A failure here names what went wrong — a wrong account ID looks different from a wrong key, because the first one can't resolve a host and the second is refused by one.
  4. 4.Discover buckets lists everything the credential can see, and you import the ones you want in one click. You can also add a bucket by name if you'd rather not grant listing.

A credential can be re-tested at any time from its card, and the result stays there rather than disappearing.

What differs from S3

None of this stops you using R2 — it's what to expect from the parts of BucketPilot that assume S3.

On R2
Object versioningNot available. Nothing in BucketPilot can restore a previous version of an object here, because there isn't one to restore — deletes and overwrites are final. Keep a backup job to a versioned bucket if you need that.
Lifecycle rulesSupported — expiration, cleaning up incomplete multipart uploads, and one transition (to STANDARD_IA). Tag filters are not honoured — Cloudflare R2 accepts a rule containing one and then ignores the filter, so BucketPilot doesn't offer it.
Per-object storage classSupported — STANDARD and STANDARD_IA. You can see which class each object is in and change it in place, which matters because Cloudflare R2 prices them differently.
Bucket policiesNot available. The policy editor is an S3 feature; manage access in the Cloudflare dashboard.
CORSEditable from BucketPilot.
Object tagsStored by BucketPilot, not on the object. Cloudflare R2 answers the tagging calls with not implemented, so tags you add here live in our index — they are searchable and they survive, but a tool reading the bucket directly won't see them.
Inventory-based indexingNot available — indexing is always a live scan. Fine for most buckets; see Indexing & search for what that means on a very large one.
Cost figuresStorage size is measured from the index, and BucketPilot does not price Cloudflare R2 for you — there are no published rates it can apply the way it does for S3. The size and object counts are real; the money column is not shown.

The zero-egress pricing that makes R2 attractive is also why it's a common backup destination: a restore doesn't cost you bandwidth. Backups & migration →

© 2026 BucketPilot