--json, the error response includes a code field with an UPPER_SNAKE_CASE error code. Use this to handle errors programmatically.
Error response format
Error codes
Authentication
| Code | Description | Fix |
|---|---|---|
NOT_AUTHENTICATED | No stored credentials or expired API key | Run floo auth login |
DEVICE_CODE_EXPIRED | Device code expired during browser auth | Run floo auth login again |
DEVICE_AUTH_DENIED | User denied authorization in browser | Run floo auth login again |
SIGNUP_DISABLED | Sign-ups are currently disabled | Join the waitlist at https://getfloo.com |
EMAIL_TAKEN | Email already registered | Use floo auth login to sign in |
Deploy & Build
| Code | Description | Fix |
|---|---|---|
NO_CONFIG_FOUND | No floo.app.toml or floo.service.toml found | Run floo init to create config files |
CONFIG_INVALID | Preflight validation failed (invalid ports, duplicate names) | Fix errors and run floo deploy --dry-run to validate |
CONFIG_EXISTS | Config files already exist when running floo init | Use floo services add to add services instead |
NO_RUNTIME_DETECTED | No supported project files found | Add package.json, requirements.txt, go.mod, Dockerfile, or index.html |
DEPLOY_FAILED | Build or deploy process failed | Check error.message and build logs |
DEPLOY_TIMEOUT | Deploy timed out after 10 minutes | Check status with floo deploy list |
DEPLOY_NOT_FOUND | Invalid deploy ID | Check with floo deploy list |
RESTART_FAILED | App restart failed | Run floo logs for details |
Apps
| Code | Description | Fix |
|---|---|---|
APP_NOT_FOUND | No app matches the given name or UUID | Check the name with floo apps list |
MISSING_APP_NAME | App name required in non-interactive mode | Provide a name: floo init my-app |
GitHub
| Code | Description | Fix |
|---|---|---|
GITHUB_APP_NOT_INSTALLED | floo GitHub App not installed | CLI will open browser to install |
GITHUB_REPO_NOT_IN_INSTALLATION | App installed but doesn’t have access to this repo | Open installation settings to add the repo |
GITHUB_ALREADY_CONNECTED | App is already connected to a GitHub repo | Disconnect first: floo apps github disconnect |
GITHUB_REPO_NOT_ACCESSIBLE | Cannot access the specified repo | Ensure the GitHub App is installed on the repo’s org |
GITHUB_NOT_CONNECTED | App is not connected to any GitHub repo | Connect first: floo apps github connect owner/repo |
Services
| Code | Description | Fix |
|---|---|---|
SERVICE_NOT_FOUND | No service with that name | Run floo services list to see available services |
DUPLICATE_SERVICE | Service name already exists | Choose a different name or floo services rm first |
INVALID_SERVICE_NAME | Service name contains invalid characters | Use lowercase, digits, and hyphens only |
Releases
| Code | Description | Fix |
|---|---|---|
RELEASE_NOT_FOUND | No release with that ID | Check with floo releases list |
RELEASE_TAG_EXISTS | A release with that tag already exists | Use --tag with a different tag |
NO_DEV_DEPLOY | No deploy to promote | Deploy first: floo deploy |
Config & IO
| Code | Description | Fix |
|---|---|---|
INVALID_PATH | The deploy path is not a valid directory | Verify the path exists and is a directory |
INVALID_FORMAT | Input format is wrong (e.g., KEY=VALUE missing =) | Check the expected format in the command docs |
CONFIG_ERROR | Cannot read or write ~/.floo/config.json | Check file permissions (should be 0600) |
PARSE_ERROR | Unexpected API response or invalid input | May indicate CLI/API mismatch — run floo update |
FILE_ERROR | Cannot read or write a file | Check the file path and permissions |
INVALID_ROLE | Invalid org member role | Valid roles: admin, member, viewer |
INVALID_AMOUNT | Invalid spend cap amount | Use a value between 1,000,000 |
Billing
| Code | Description | Fix |
|---|---|---|
PLAN_FEATURE_PASSWORD | Feature requires a higher plan | Upgrade at https://app.getfloo.com/settings/billing |
PLAN_FEATURE_FLOO_ACCOUNTS | Feature requires a higher plan | Upgrade at https://app.getfloo.com/settings/billing |
Handling errors in agents
Exit codes
| Exit code | Meaning |
|---|---|
0 | Success |
1 | Error (check JSON error response for details) |