Troubleshooting
The failures we expect you to hit, what each one actually means, and how to collect a support bundle that does not contain your credentials.
Activation
"Activation code is not in <payload>.<signature> form" — the paste caught only part of the code. Copy it again from Settings → Self-hosted licence in your cloud account; do not retype it.
"This activation code is for '…', not Busabase Premium" — a code for a different product. There is nothing to fix on this instance.
The instance has gone read-only — the licence expired. Everything is intact and readable; paste a renewal code on the licence page and writes resume immediately. That page stays reachable while expired specifically so this is possible. See Licensing.
"Seats are full (50/50)" when inviting — you are at the seat limit. Existing members are unaffected. Remove a member to free a seat, or talk to us about raising the limit.
Start-up
The container starts and then stops — usually the database. Check the logs first:
docker compose logs app # Compose
docker logs busabase # all-in-oneA database that cannot be reached produces one clear line saying so, and the healthcheck reports unhealthy rather than the container pretending to be up.
Migrations failed — the app deliberately does not start; it stays in Created and its port never answers. docker compose logs migrate shows the failing SQL statement and the database error, though not the file it came from — grep the migrations directory for that statement to find it. Do not start the app manually to "get it running": it would be running against a schema it does not match.
Signing in returns 403 Invalid origin — APP_URL (or BETTER_AUTH_BASE_URL) does not match the browser's address bar. The sign-in endpoint validates the request's Origin header, so scheme, hostname and port all have to agree; the UI shows Invalid origin directly rather than bouncing silently.
Attachments
Everything works but every upload fails — the S3 credentials in .env and seaweed-s3.json do not match. This is what init.sh exists to prevent; if the files were edited by hand, one of them was missed.
Uploads fail at a certain size — the reverse proxy. client_max_body_size has to be at least as large as your largest attachment; the proxy rejects the request before Busabase sees it.
"Not enough storage space" — the disk is full. Everything else keeps working; only writes to object storage fail. Free space or raise SEAWEEDFS_VOLUME_LIMIT_MB.
Downloads fail with 403 against a non-AWS S3 store — some S3-compatible servers reject the checksum headers the AWS SDK adds by default. Busabase sets requestChecksumCalculation and responseChecksumValidation to WHEN_REQUIRED for exactly this reason; if you are on a proxy that adds them back, that is where to look.
Agents and streaming
Agent responses arrive all at once at the end instead of streaming — proxy_buffering off is missing from the reverse proxy config. Nothing is broken; the output is being held by the proxy until the turn completes.
Network
The instance is on an isolated network — that is fine and fully supported. Licence verification is local: nothing is sent anywhere, so an air-gapped host activates exactly like a connected one.
Collecting a support bundle
Send this with any report. It contains logs, health output and image metadata, and no credentials — the generated secrets live in /data/.credentials and are never logged.
All-in-one:
docker logs --tail 500 busabase > sb-logs.txt 2>&1
curl -s http://localhost:3000/api/health > sb-health.json
docker inspect busabase --format '{{.Config.Image}} {{.State.Status}}' > sb-meta.txt
tar czf busabase-support.tar.gz sb-logs.txt sb-health.json sb-meta.txtCompose:
./support-bundle.shThe Compose script also includes the names of your environment variables with every value replaced by <redacted>, which is often enough to spot a missing or misspelled setting without you sending us a single secret.
Send it to support@busabase.com.