Skip to content
Beam Docs
Connectors

Cloudflare R2

Configure Cloudflare R2 as a source or destination for Beam transfers.

Cloudflare R2 is supported through SDK provider configs. The SDK signs R2 access locally and Beam workers receive only prepared URLs/routes.

TypeScript

import { BeamClient, R2ProviderConfig, S3ProviderConfig } from "@beam-network/sdk";

const beam = new BeamClient({ apiKey: process.env.BEAM_API_KEY! });

const transfer = await beam.createTransfer({
  sources: [
    S3ProviderConfig.create({
      bucket: "aws-source",
      key: "ml-models/model.tar.gz",
      region: "us-east-1",
      access_key_id: process.env.AWS_ACCESS_KEY_ID!,
      secret_access_key: process.env.AWS_SECRET_ACCESS_KEY!,
    }),
  ],
  destinations: [
    R2ProviderConfig.create({
      bucket: "cf-dest",
      key: "ml-models/model.tar.gz",
      account_id: process.env.R2_ACCOUNT_ID,
      access_key_id: process.env.R2_ACCESS_KEY_ID!,
      secret_access_key: process.env.R2_SECRET_ACCESS_KEY!,
    }),
  ],
  name: "s3-to-r2",
});

console.log(transfer.transfer_id);

Python

from beam_network_sdk.models import R2ProviderDestination, R2ProviderSource

source = R2ProviderSource(
    bucket="source-bucket",
    key="exports/file.bin",
    account_id="cloudflare-account-id",
    access_key_id="...",
    secret_access_key="...",
)

destination = R2ProviderDestination(
    bucket="dest-bucket",
    key="imports/file.bin",
    account_id="cloudflare-account-id",
    access_key_id="...",
    secret_access_key="...",
)

R2 Token Requirements

Create an R2 API token with object read permission for sources and object write/multipart permissions for destinations. R2 uses S3-compatible access key and secret key credentials.

The endpoint is derived from the account ID unless you provide an explicit endpoint_url:

https://<account-id>.r2.cloudflarestorage.com

Decentralized distributed bandwidth infrastructure.

On this page