# API Overview — Documents, Batches, Templates & Fields

> The ImageToTable.ai v1 API turns photos, scans, and PDFs of invoices, receipts, and other documents into structured JSON — this page explains the four core concepts (Document, Batch, Template, Field) and how they fit together.

ImageToTable.ai's v1 API extracts structured data from photos, scans, and PDFs of real-world documents — invoices, receipts, bank statements, purchase orders, and similar — and hands it back as JSON. This page introduces the four resources everything else in these docs is built from.

## Core concepts

Four resources cover the whole surface of the API. Every endpoint in the [Reference](/developers/reference/) section operates on one of these.

- **Document** — a single processed page. You create one by uploading an image, or a PDF page (a multi-page PDF upload produces *multiple* documents, one per page — see [Documents reference](/developers/reference/documents)). A document moves through a status lifecycle (`queued` → `processing` → `succeeded` / `failed` / `canceled`) explained in full in the [Async Task Model](/developers/guides/async-model) guide.
- **Batch** — a named group of documents that get uploaded and processed together. Every document belongs to exactly one batch, identified by its `batch_name` (a string you choose, or one the API generates for you on upload). You start processing, poll status, and fetch results at the batch level.
- **Template** — a saved, reusable set of fields you want extracted every time (for example, a "Vendor Invoice" template with `invoice_number`, `vendor_name`, and `total_amount`). Templates let you skip re-declaring the same fields on every `process` call.
- **Field** — a single named value you want pulled out of a document (an invoice number, a date, a line-item amount). Fields either live on a Template, or can be declared inline, one-off, on a single `process` call without ever creating a Template.

## How they fit together

You upload one or more files into a batch, each upload becoming a Document. You then start processing that batch, telling the API what Fields you want back — either by pointing it at a saved Template, or by listing Fields inline in the request body. If you specify neither, the API infers reasonable columns on its own. Once processing finishes, you fetch the batch's results: each Document comes back with a `line_items` array of objects keyed by field name.

## JSON is the primary format

JSON is the canonical, fully-supported response format for every endpoint. Excel (`.xlsx`) and Word (`.docx`) exports exist as a convenience download on top of the same data (see [Batches reference](/developers/reference/batches)) — they are not a separate data model, and API integrations should build against the JSON shape.

## Authentication and access

Every v1 request is authenticated with an API key sent as `Authorization: Bearer <key>` — no session cookie fallback, even if you're logged in from the same browser. The v1 API is available to paid plans (Basic and above, including teams on Growth and above); Free-plan accounts receive a `plan_required` error. See [Environment Setup](/developers/environment-setup) for where to find your key.

## Next steps

Ready to make your first call? [Quickstart](/developers/quickstart) walks through getting a key, uploading a document, starting processing, and fetching results — start to finish in about five minutes. For the full endpoint list, see [API Reference](/developers/reference/). If you're using an AI coding assistant to integrate, point it at the [OpenAPI 3.1 spec](/static/openapi/imagetotable-v1.yaml) directly — it's the same schema behind every Reference page, machine-readable end to end.

---

Source: https://imagetotable.ai/developers/
