> ## Documentation Index
> Fetch the complete documentation index at: https://docs.htmldrop.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Errors

> Status codes you should expect, and what to do about each.

Errors return JSON with an `error` field:

```json theme={null}
{ "error": "plan_limit", "detail": "drop limit reached for plan free" }
```

| Status | Meaning                                                                                                 | What to do                                                                                           |
| ------ | ------------------------------------------------------------------------------------------------------- | ---------------------------------------------------------------------------------------------------- |
| `400`  | Malformed request — bad JSON, missing field, unsupported file type                                      | Fix the payload. Only `.html`, `.htm`, `.md` and `.markdown` are accepted for single-file publishing |
| `401`  | Missing or invalid credentials                                                                          | Check the `Authorization` header; the token may have been revoked                                    |
| `403`  | Authenticated but not permitted — e.g. email not verified before checkout, or a feature above your plan | Verify your email, or upgrade for password protection and custom domains                             |
| `404`  | No such drop, or not yours                                                                              | Confirm the id and the account the token belongs to                                                  |
| `409`  | Conflict — e.g. the slug is taken, or the account already has an active subscription                    | Pick another slug; for billing, use the portal link returned in the body                             |
| `413`  | Upload exceeds your plan's per-upload cap                                                               | See [plans and limits](/account/plans-and-limits)                                                    |
| `429`  | Rate limited — most often anonymous publishing from one network                                         | Sign in; authenticated publishing is not governed by the anonymous caps                              |
| `5xx`  | Our fault                                                                                               | Retry with backoff. Live status is at [htmldrop.app/status](https://htmldrop.app/status)             |

## Serving errors

Requests to a drop's URL, rather than the API, return HTML rather than JSON:

* **404** — nothing published at that address
* **410** — the drop expired, or was removed by trust and safety
* **503** — the owner has not verified their email yet

Each is a branded page explaining what happened, safe to show to a visitor who
followed an old link.
