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:
- Create your account — sign-up is self-serve.
- Add credits and create an API key in the Console — everything else authenticates against your organization.
- Install Beam Studio — the application you design and operate data movement in.
- Install the Beam CLI — the terminal client for your account, your machines, and Rooms.
- Send your first transfer — here, with the Python SDK.
- 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:
| Step | Where |
|---|---|
| Add credits | Settings → Billing |
| API key | API Keys |
| Send your first transfer | This 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 shThen 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 | shOn Windows, run the PowerShell installer instead:
irm https://cdn.b1m.ai/cli/install.ps1 | iexA 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 status4. 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 ashttps://s3.us-east-1.wasabisys.com.S3_ACCESS_KEY_IDandS3_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.pyThe 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
- Your First Studio Workflow — Run the same kind of transfer from Studio.
- Beam Studio — Build the pipeline around the transfer.
- Beam CLI — Your account, machines, and Rooms from a terminal.
- Beam SDK — The same transfer in TypeScript, Go, or Rust.
- Connectors — Configure your storage provider.
- API Reference — Read your transfers over HTTP.
- Billing & Payments — Manage the credits transfers consume.