Quick Start¶
Go from signup to a running server with SSH access — and see it appear in billing — in about 15 minutes.
What you'll build: one compute instance, SSH-accessible, attached to your first project.
Step 1 — Create an account¶
Open app.bnerd.cloud and complete the signup form, or use the API. The request must pin the legal document versions you are accepting, so fetch the current ones first (see Authentication for what each field means):
AGB=$(curl -s https://api.bnerd.cloud/legal/agb)
NB=$(curl -s https://api.bnerd.cloud/legal/nutzungsbedingungen)
DS=$(curl -s https://api.bnerd.cloud/legal/datenschutz)
curl -X POST https://api.bnerd.cloud/create-account \
-H "Content-Type: application/json" \
-d '{
"login": "you@example.com",
"name": "Your Name",
"password": "a-strong-password",
"password-confirm": "a-strong-password",
"organization_name": "My Org",
"legal_agb_version": '"$(echo "$AGB" | jq '.data.version')"',
"legal_agb_hash": '"$(echo "$AGB" | jq '.data.content_hash')"',
"legal_nutzungsbedingungen_version": '"$(echo "$NB" | jq '.data.version')"',
"legal_nutzungsbedingungen_hash": '"$(echo "$NB" | jq '.data.content_hash')"',
"legal_datenschutz_version": '"$(echo "$DS" | jq '.data.version')"',
"legal_datenschutz_hash": '"$(echo "$DS" | jq '.data.content_hash')"'
}'
Check your email and click the verification link before proceeding.
Step 2 — Authenticate and get a token¶
Via the dashboard¶
Log in at app.bnerd.cloud. For automation you will want a long-lived static token — self-service token management is currently in development (roadmap #20). Contact hello@bnerd.com if you need a static token before it ships.
Via the CLI (recommended for the terminal workflow)¶
The interactive prompt asks for your API URL, credentials, and organization, then writes ~/.bnerd.yaml (mode 0600). Verify it works:
Via the API directly¶
curl -si -X POST https://api.bnerd.cloud/login \
-H "Content-Type: application/json" \
-d '{"login": "you@example.com", "password": "a-strong-password"}' \
| grep -i '^authorization:'
TOKEN="<the JWT from the header>"
JWTs expire. For scripts and CI/CD use a static token (see Authentication).
Step 3 — Create a project¶
Projects group resources within your organization. Create one for this quickstart:
Go to Projects → New Project, enter a name, and click Create.
The CLI prints the new project ID. Set it as the default for subsequent commands:
Step 4 — Upload an SSH key¶
You'll need an SSH public key to log in to the server.
Go to SSH Keys → Add Key, paste your public key, and save.
Step 5 — Launch a server¶
Go to Servers → New Server. Pick a flavor, image (e.g. Ubuntu 24.04), your keypair, and click Create. The server detail page shows the build progress.
Look up available images and flavors first:
Then create the server:
The CLI returns 202 Accepted. Poll until ACTIVE:
# Get image and flavor IDs
curl "https://api.bnerd.cloud/cloud/images?project_id=$PROJECT_ID" \
-H "Authorization: Bearer $TOKEN"
curl "https://api.bnerd.cloud/cloud/flavors?project_id=$PROJECT_ID" \
-H "Authorization: Bearer $TOKEN"
# Create the server
curl -X POST "https://api.bnerd.cloud/cloud/servers?project_id=$PROJECT_ID" \
-H "Authorization: Bearer $TOKEN" \
-H "Content-Type: application/json" \
-d '{
"project_id": "'"$PROJECT_ID"'",
"name": "web-01",
"flavor_id": "<flavor-id>",
"image_id": "<image-uuid>",
"key_name": "my-key"
}'
Returns 202 Accepted. Poll GET /cloud/servers/<id>?project_id=... until status is ACTIVE.
Step 6 — Get the IP address and SSH in¶
On the server detail page, copy the IP address from the Addresses section.
SSH in using the key you uploaded:
Default user varies by image
Ubuntu images use ubuntu, Debian uses debian, Rocky Linux uses rocky. Check the image description if you're unsure.
Step 7 — See it in billing¶
The server starts accruing usage the moment it moves to ACTIVE. To verify it appears in your billing overview:
Clean up¶
To avoid ongoing charges, delete the server when you're done with it:
Troubleshooting¶
| Symptom | Likely cause | Fix |
|---|---|---|
Server stuck in BUILD > 10 min | Scheduler issue or image pull delay | Check task_state in the server detail; if error appears, delete and retry |
| SSH connection refused | Server still booting, or wrong IP | Wait for status: ACTIVE and task_state: null; verify you're using the correct address |
| SSH permission denied | Wrong key or wrong user | Confirm the keypair name was set at creation; check the default username for the image |
403 Forbidden on API calls | Token lacks openstack permissions | Check your membership permissions at Settings → Members |
Next steps¶
| I want to… | Go to |
|---|---|
| Understand organizations and roles | Concepts |
| Control inbound traffic with a firewall | Per-instance firewalling |
| Provision object storage | Provision S3 Storage |
| Manage DNS for my domain | Manage DNS |
| Manage everything as code | Infrastructure as Code with Terraform |
| Browse all API endpoints | API Reference |