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

# Production checklist

> What to check before you send real traffic to Prefetch: keys, errors, retries, concurrency, timeouts, webhooks and costs.

Test three cases before you launch: a site that works, a site that can't be read, and a result with missing fields. Then work through this list.

## Keys

* [ ] Keys live on your server or in a secret store, never in browser code or a repository.
* [ ] Development and production use separate keys.
* [ ] Each key has a credit limit, so a bug can't spend your whole balance.
* [ ] Browser-side logos use the [logo CDN](https://docs.prefetch.io/company-data/logo-cdn.md) token, not your API key.

## Errors and retries

* [ ] Your code branches on `error_code`, not on the `error` message.
* [ ] You retry only when `retryable` is `true`, with exponential backoff, and you honor `Retry-After`.
* [ ] Missing fields are handled. Curated and live answers can differ, and many fields can be `null`.

See [Error handling](https://docs.prefetch.io/concepts/errors.md).

## Throughput

* [ ] Parallel requests stay at or under your plan's [concurrency limit](https://docs.prefetch.io/concepts/rate-limits.md).
* [ ] Lists of more than a few dozen URLs go through a [batch](https://docs.prefetch.io/jobs/batches.md), not a loop.
* [ ] Your HTTP client allows at least 60 seconds per request. Most endpoints finish within 55.

## Webhooks

* [ ] Your handler verifies `X-Prefetch-Signature` against the raw body.
* [ ] It answers `2xx` within 10 seconds and does slow work afterward.
* [ ] It skips deliveries it has already handled.

See [Webhooks](https://docs.prefetch.io/concepts/webhooks.md).

## Costs

* [ ] You store brand and company data instead of fetching it on every page view. See [Caching](https://docs.prefetch.io/concepts/caching.md).
* [ ] Each monitor's `estimated_credits_per_month` fits your budget, and monitors you don't need are paused.
* [ ] Crawls have a sensible `limit` and `include_paths`.

## Content from the web

* [ ] If page text reaches a language model, treat it as untrusted. Turn on `check_prompt_injection` for pages you don't control. See [Security](https://docs.prefetch.io/concepts/security.md).

## Observability

* [ ] You log `meta.requestId`, the status and the `error_code` for every failed call.
* [ ] Someone watches the [changelog](https://docs.prefetch.io/changelog.md), and your on-call team subscribes to the [status page](https://prefetch.betteruptime.com/).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.