# Invoice intake

Every bill starts as a document: a PDF or image a vendor sent you. Payvy keeps the **original** as the record and works from it, never from a transcription alone.

## Ways in

- **Upload** — add files to the document inbox directly.
- **Email** — each organization gets an inbound address; vendors send bills to it, or you forward them. PDF and image attachments land in the inbox, including attachments of a forwarded email. Setup is in [Bills by email](https://docs.payvy.com/guide/email-intake/).
- **API/MCP** — agents file documents with the same commands the app uses.

## Where originals live

Documents live in any S3-compatible store you configure: Cloudflare R2, Backblaze B2, AWS S3, or one you run (Garage, SeaweedFS). They are keyed by content hash per organization. A file's type is read from its contents, never the filename or a claimed content type, and the same file arriving twice is caught as a duplicate.

Self-hosters choose the store and own its access, backup and retention. See [Configuration](https://docs.payvy.com/self-hosting/configuration/) for the `PAYVY_S3_*` variables.

## What happens next

With extraction on, new inbox documents are read automatically in the background (see [Reading bills with a model](https://docs.payvy.com/guide/extraction/)): a draft is prepared, checked and matched to a vendor. A failed read is recorded on the document and retried; after three failures it waits for a person. Nothing becomes a bill until `bill.create` is called with the draft, as-is or corrected.