Skip to content
Beam Docs

Developer Quickstart

Create your Beam account and an API key, install Beam Studio and the Beam CLI, and send your first transfer.

Getting set up on Beam runs through these steps, in this order:

  1. Create your account — sign-up is self-serve.
  2. Add credits and create an API key in the Console — everything else authenticates against your organization.
  3. Install Beam Studio — the application you design and operate data movement in.
  4. Install the Beam CLI — the terminal client for your account, your machines, and Rooms.
  5. Send your first transfer — here, with the Python SDK.
  6. Check the result in the Console.

Steps 2 and 3 are independent of each other. Install both: Studio is where pipelines live, the CLI is how you manage your account and machines from a shell.

Beam has one public environment: production, at console.b1m.ai. Keys, installers, and transfers all target it.


0. Create your account

Open console.b1m.ai and choose Create an account. Enter your name and email address, and Beam emails you a link to confirm it. The link works once, for 10 minutes, in any browser: open it wherever you want to continue.

Then create your organization, or join one you have been invited to. You own an organization you create, and the Console opens in it.

One Beam account signs you in to the Console, Studio, and the CLI.


1. Add credits and create an API key

The Console's Get started checklist walks through this step:

StepWhere
Add creditsSettings → Billing
API keyAPI Keys
Send your first transferThis guide, step 4

See Billing & Payments for what transfers cost.

Copy the key (b1m_…) when it is shown — it is not displayed again. Ask an organization administrator if you cannot manage billing or create keys.

Keys can also be created and rotated without the Console, which is what you want once you are automating deployments. See the Account Management API.

API keys spend organization credits. Keep them server-side and out of source control.


2. Install Beam Studio

Beam Studio is a self-hosted application for building data movement as a graph — transfers, transforms, checks, branching, and schedules — and then watching it run. It runs on your own infrastructure, which is what lets it hold your storage credentials locally.

Studio needs a Linux host with systemd, at least 2 vCPUs, 4 GB of memory, and 20 GB of free disk, and root access to install. It runs on Docker Engine with the Docker Compose plugin (docker compose). The installer installs Docker, the Compose plugin, curl, jq, and OpenSSL when they are missing. Windows and macOS are not supported.

curl -fsSL https://cdn.b1m.ai/studio/install.sh | sudo sh

Then open Studio, sign in with your Beam account, and claim it for your organization with the claim code the installer prints. Studio then asks you to approve its instance key: Beam issues Studio its own organization API key, so you never paste one.

Your First Studio Workflow walks through these steps and on to a completed transfer. See Beam Studio for the public-URL setting and how updates are signed and verified.


3. Install the Beam CLI

The Beam CLI manages your account, your machines, and Rooms from a terminal. It ships as a SHA-256-verified bundle for macOS, Linux, and Windows:

curl -fsSL https://cdn.b1m.ai/cli/install.sh | sh

On Windows, run the PowerShell installer instead:

irm https://cdn.b1m.ai/cli/install.ps1 | iex

A first interactive install launches beam setup, which connects your Beam account, selects an organization, names the machine, and installs shell completion. Then confirm it:

beam login
beam whoami
beam status

4. Send your first transfer

The example below copies an object between two buckets on any storage that speaks the S3 API — MinIO, Wasabi, Backblaze B2, DigitalOcean Spaces, Hippius S3, and the like — using the Python SDK. Python 3.10 or newer:

python -m pip install "beam-network-sdk[s3]"

The s3 extra installs the S3 signing library this example needs.

Set these environment variables before running it:

  • BEAM_API_KEY: the key you created in step 1.
  • S3_ENDPOINT_URL: your provider's S3 endpoint, such as https://s3.us-east-1.wasabisys.com.
  • S3_ACCESS_KEY_ID and S3_SECRET_ACCESS_KEY: a key pair that can read the source bucket and write the destination bucket.

Those credentials stay in your process. The SDK signs task-scoped access to the two objects locally, and workers receive only that — never your keys. The key pair needs read access to the source, and read, write, delete and multipart access to the destination; see IAM permissions.

Save this as first_transfer.py, replacing the bucket names and object keys with your own:

import asyncio
import os

from beam_network_sdk import (
    BeamSDK,
    S3CompatibleProviderDestination,
    S3CompatibleProviderSource,
)

# Both sides use the same store and credentials.
storage = {
    "provider": "minio",  # a free-form name: "wasabi", "backblaze", ...
    "endpoint_url": os.environ["S3_ENDPOINT_URL"],
    "access_key_id": os.environ["S3_ACCESS_KEY_ID"],
    "secret_access_key": os.environ["S3_SECRET_ACCESS_KEY"],
}


async def main() -> None:
    async with BeamSDK(api_key=os.environ["BEAM_API_KEY"]) as beam:
        transfer = await beam.transfers.create_transfer(
            sources=[
                S3CompatibleProviderSource(**storage, bucket="source-bucket", key="data/file.bin")
            ],
            destinations=[
                S3CompatibleProviderDestination(
                    **storage, bucket="destination-bucket", key="data/file.bin"
                )
            ],
            name="my-first-transfer",
        )
        print("Transfer:", transfer.transfer_id)
        # Wait up to an hour. The default, 300 seconds, is too short for large files.
        status = await beam.transfers.wait_complete(transfer.transfer_id, timeout=3600)
        print("Status:", status.status)


asyncio.run(main())

create_transfer reads the object's size itself and hands the transfer to the network straight away, so the only thing left to do is wait. wait_complete raises BeamTimeoutError if the transfer has not finished when timeout seconds have passed.

For Amazon S3, set provider="s3" with a region and drop endpoint_url. For Cloudflare R2, set provider="r2" with your account_id. Without object storage at all, the HTTP Connector moves data between plain HTTPS endpoints.

python first_transfer.py

The SDK is not Python-only — TypeScript, Go, and Rust create the same transfer. See Beam SDK. To run the same transfer without writing code, use Beam Studio.


5. Check the result

Find the printed transfer ID under Transfers in the Console. Confirm that the transfer completed and that the destination contains your file. If it failed, check your key, your organization's credits, the endpoint URL, and the bucket permissions on each side.


Next steps

Decentralized distributed bandwidth infrastructure.

On this page