# Errors

Every error from the CLI and the API says what happened, why, and what to do. Clients branch on the code, never on the message.

| Code | HTTP | Meaning |
| --- | --- | --- |
| [`validation.invalid`](https://lobsite.com/docs/errors/validation.invalid) | 400 | Invalid request |
| [`config.invalid`](https://lobsite.com/docs/errors/config.invalid) | 400 | Invalid lobsite.toml |
| [`auth.required`](https://lobsite.com/docs/errors/auth.required) | 401 | Not logged in |
| [`auth.invalid_token`](https://lobsite.com/docs/errors/auth.invalid_token) | 401 | Invalid token |
| [`auth.email_unverified`](https://lobsite.com/docs/errors/auth.email_unverified) | 403 | Email not confirmed |
| [`auth.forbidden`](https://lobsite.com/docs/errors/auth.forbidden) | 403 | No access to this site |
| [`auth.reauth_required`](https://lobsite.com/docs/errors/auth.reauth_required) | 403 | Sign in again to continue |
| [`site.not_found`](https://lobsite.com/docs/errors/site.not_found) | 404 | Site not found |
| [`site.expired`](https://lobsite.com/docs/errors/site.expired) | 410 | Temporary site expired |
| [`site.suspended`](https://lobsite.com/docs/errors/site.suspended) | 403 | Site suspended |
| [`site.disabled`](https://lobsite.com/docs/errors/site.disabled) | 403 | Site paused |
| [`site.name_invalid`](https://lobsite.com/docs/errors/site.name_invalid) | 400 | Invalid site name |
| [`site.name_taken`](https://lobsite.com/docs/errors/site.name_taken) | 409 | Name taken |
| [`site.name_system`](https://lobsite.com/docs/errors/site.name_system) | 403 | System name |
| [`site.name_reserved`](https://lobsite.com/docs/errors/site.name_reserved) | 403 | Reserved name |
| [`deploy.not_found`](https://lobsite.com/docs/errors/deploy.not_found) | 404 | Deploy not found |
| [`deploy.blobs_missing`](https://lobsite.com/docs/errors/deploy.blobs_missing) | 409 | Uploads missing |
| [`deploy.not_ready`](https://lobsite.com/docs/errors/deploy.not_ready) | 409 | Deploy not ready |
| [`deploy.not_uploading`](https://lobsite.com/docs/errors/deploy.not_uploading) | 409 | Deploy already finalized |
| [`deploy.no_previous`](https://lobsite.com/docs/errors/deploy.no_previous) | 409 | No earlier deploy |
| [`content.reserved_path`](https://lobsite.com/docs/errors/content.reserved_path) | 422 | Reserved path |
| [`content.secret_file`](https://lobsite.com/docs/errors/content.secret_file) | 422 | Secret file |
| [`content.blocked_type`](https://lobsite.com/docs/errors/content.blocked_type) | 422 | Blocked file type |
| [`content.sensitive_form`](https://lobsite.com/docs/errors/content.sensitive_form) | 422 | Sensitive form fields |
| [`content.held_for_review`](https://lobsite.com/docs/errors/content.held_for_review) | 202 | Held for review |
| [`limit.files`](https://lobsite.com/docs/errors/limit.files) | 422 | Too many files |
| [`limit.file_size`](https://lobsite.com/docs/errors/limit.file_size) | 422 | File too large |
| [`limit.site_size`](https://lobsite.com/docs/errors/limit.site_size) | 422 | Deploy too large |
| [`limit.storage`](https://lobsite.com/docs/errors/limit.storage) | 422 | Storage full |
| [`limit.sites`](https://lobsite.com/docs/errors/limit.sites) | 422 | Too many sites |
| [`limit.domains`](https://lobsite.com/docs/errors/limit.domains) | 422 | Too many domains |
| [`limit.deploy_rate`](https://lobsite.com/docs/errors/limit.deploy_rate) | 429 | Too many deploys |
| [`limit.submissions`](https://lobsite.com/docs/errors/limit.submissions) | 429 | Submission quota used up |
| [`domain.invalid`](https://lobsite.com/docs/errors/domain.invalid) | 400 | Invalid domain |
| [`domain.taken`](https://lobsite.com/docs/errors/domain.taken) | 409 | Domain on another site |
| [`domain.not_found`](https://lobsite.com/docs/errors/domain.not_found) | 404 | Domain not found |
| [`domain.apex_unsupported`](https://lobsite.com/docs/errors/domain.apex_unsupported) | 422 | Apex domain unsupported |
| [`form.not_found`](https://lobsite.com/docs/errors/form.not_found) | 404 | Form not found |
| [`session.not_found`](https://lobsite.com/docs/errors/session.not_found) | 404 | Session not found |
| [`feature.coming_soon`](https://lobsite.com/docs/errors/feature.coming_soon) | 403 | Coming soon |
| [`feature.plan_required`](https://lobsite.com/docs/errors/feature.plan_required) | 403 | Needs a higher plan |
| [`billing.unavailable`](https://lobsite.com/docs/errors/billing.unavailable) | 503 | Billing unavailable |
| [`billing.already_subscribed`](https://lobsite.com/docs/errors/billing.already_subscribed) | 409 | Already subscribed |
| [`billing.no_subscription`](https://lobsite.com/docs/errors/billing.no_subscription) | 404 | No subscription |
| [`member.not_found`](https://lobsite.com/docs/errors/member.not_found) | 404 | Member not found |
| [`invite.invalid`](https://lobsite.com/docs/errors/invite.invalid) | 404 | Invitation not valid |
| [`token.not_found`](https://lobsite.com/docs/errors/token.not_found) | 404 | Token not found |
| [`integration.resend_refused`](https://lobsite.com/docs/errors/integration.resend_refused) | 422 | Resend refused |
| [`integration.not_connected`](https://lobsite.com/docs/errors/integration.not_connected) | 409 | Integration not connected |
| [`address.not_found`](https://lobsite.com/docs/errors/address.not_found) | 404 | Address not found |
| [`upload.hash_mismatch`](https://lobsite.com/docs/errors/upload.hash_mismatch) | 400 | Hash mismatch |
| [`upload.token_invalid`](https://lobsite.com/docs/errors/upload.token_invalid) | 401 | Invalid upload token |
| [`upload.token_expired`](https://lobsite.com/docs/errors/upload.token_expired) | 401 | Upload token expired |
| [`upload.too_large`](https://lobsite.com/docs/errors/upload.too_large) | 413 | Upload too large |
| [`rate_limited`](https://lobsite.com/docs/errors/rate_limited) | 429 | Too many requests |
| [`route.not_found`](https://lobsite.com/docs/errors/route.not_found) | 404 | No such endpoint |
| [`cli.outdated`](https://lobsite.com/docs/errors/cli.outdated) | 426 | CLI outdated |
| [`internal`](https://lobsite.com/docs/errors/internal) | 500 | Unexpected error |

