SFTP IN. FILES IN CLOUDFLARE R2. NO SERVERS.

SFTP and FTP for Cloudflare R2

Cloudflare R2 has no SFTP of its own. DocEvent puts an SFTP, FTPS, FTP or SCP endpoint in front of your own R2 bucket - and because R2 charges no egress, the Cloudflare side of every partner download costs nothing per gigabyte. DocEvent bills per user, with data packs only beyond the transfer your plan includes.
SFTPFTPSFTPSCP
Client
Partner or app
DocEvent
Simple FTP Service
R2
Your bucket
Files stream straight through to your own Cloudflare R2 bucket — nothing is stored on our servers.

How it works

1
Connect your R2 bucket
Create an R2 API token in the Cloudflare dashboard and paste its access key ID and secret into DocEvent, along with your account's S3 endpoint — <account-id>.r2.cloudflarestorage.com — and the bucket name. Scope the token to one bucket and the endpoint can reach nothing else in the account.
2
Create a user for each partner
Add an SFTP/FTPS/FTP user per partner or system, with a password or an SSH key and its own home directory. Lock it down with per-service IP allow and deny rules if you want it pinned to known addresses.
3
Hand over the hostname
Give them the DocEvent hostname and credentials. Files land in your bucket as they are uploaded, and every connection and transfer is recorded in the audit log.Prefer your own domain? Point a CNAME at the endpoint and partners connect to something like sftp.yourcompany.com instead.

Built for Cloudflare R2

No Cloudflare egress bill on the way back out

This is usually why the bucket is on R2 to begin with. A partner uploads over SFTP and you pull those files into a processing job, hand them to a customer or serve them from a Worker - Cloudflare charges none of it as egress, where the same round trip on S3 is billed per gigabyte out by AWS. Whatever moves through the DocEvent endpoint itself still counts against your plan's data allowance.

The same bucket your Workers read

R2 buckets bind directly to Workers, so a file that arrives over SFTP is available to your Worker or queue consumer as soon as the upload completes. No copy step, no cross-cloud event plumbing to keep a second system in sync.

Jurisdiction and tokens stay yours

Location hints, EU-jurisdiction buckets for data residency and lifecycle rules are all set on the Cloudflare side and keep working — DocEvent connects to whatever endpoint you give it. It holds only the API token you issued, which you can scope to one bucket and roll in the dashboard at any time.

The R2 endpoint, and what happens after upload

R2’s S3 endpoint is https://<account-id>.r2.cloudflarestorage.com - the account id is in your Cloudflare dashboard URL, and the region is always "auto". A bucket created under the EU jurisdiction uses https://<account-id>.eu.r2.cloudflarestorage.com instead. That endpoint, an R2 API token’s access key and secret, and the bucket name are everything DocEvent needs - the SFTP, FTPS and FTP side is live from there.
Because DocEvent writes ordinary R2 objects, everything downstream works unchanged: R2 event notifications fire on each upload, a queue consumer or Worker picks the file up, and whatever it produces can be served straight from the bucket - none of it metered as egress. A partner uploading over SFTP is, in effect, feeding your Workers pipeline directly.

Common questions

You focus on integration,
we'll focus on delivery.

Get started for free