---
title: Error codes
description: The error codes Crow Nest returns from the browser library, server code and the API, what each means and what to do.
---

# Error codes

Errors from the browser library are thrown as an `Error` with a `code`. The API and server code calls answer with JSON in the same shape:

```json
{ "error": { "code": "forbidden", "message": "Only the app's owner can change this." } }
```

The `message` is written to be shown to a person as it is.

## Data, files and APIs

| Code | Meaning | What to do |
| --- | --- | --- |
| `sign_in_required` | A signed-out visitor tried something that needs sign-in | The library sends them to sign in automatically |
| `forbidden` | The rules don't allow this person to do this | Check `read` and `write` in [crow.json](/crow-json) |
| `not_found` | No such document, file or app | Check the ID |
| `bad_request` | The request doesn't match what's expected, such as a field type | Fix the input; the message says what's wrong |
| `too_large` | A document, file, body or query result is over its limit | See [Limits](/limits) |
| `limit_reached` | A quota is used up: data size, daily writes, tasks | Wait for the next day, or delete data |
| `rate_limited` | Too many calls in a short time | Slow down and retry |
| `conflict` | A `unique` value is already taken | Ask for a different value, like another slot |
| `edit_closed` | The `editFor` window for a visitor's entry has passed | The entry can't be changed any more |
| `payment_required` | Paid usage has grown with no card for 14 days | The owner adds a card in Settings |

## AI

| Code | Meaning |
| --- | --- |
| `ai_not_enabled` | The app's crow.json has no `ai` section |
| `ai_no_key` | No AI key is set up for this app |
| `ai_key_needs_ack` | The owner hasn't accepted the warning for using their own key on a shared app |

## Publishing and billing

| Code | Meaning |
| --- | --- |
| `visibility_required` | A new app needs a visibility; ask the person |
| `card_required` | This account has no card on file yet (new accounts add one at sign-up); the message links to Settings |
| `owner_only` | Only the organization's owner can do this, such as change billing |
| `functions_unavailable` | Server code can't be published right now |

## Server code

| Status | Code | Meaning |
| --- | --- | --- |
| 503 | `function_over_limit` | The request ran past its CPU or outside-request limit |
| 503 | `function_error` | The code failed to answer |
| 403 | `blocked_address` | `fetch()` to a Crow Nest address, an IP address or an internal name |

## App status

| Status | Meaning |
| --- | --- |
| 403 | The viewer can't open this app; the page offers Request access |
| 423 | The organization paused this app |
| 451 | Crow Nest suspended this app (see [Security and trust](/security)) |

## Still stuck?

Email [support@crow-nest.com](mailto:support@crow-nest.com) with the error code, the app's address and what you were doing. If Crow Nest itself failed (an internal error), the answer and the dashboard show a reference; include it and we can find the exact error.
