Accepts inbound batches, validates them against the current schema, and writes to the staging tables.
Ingest is the only writer to the staging tables. Everything that arrives from outside — batch uploads, partner feeds, the mobile exporter — lands here first and is validated before anything downstream sees it.
The current schema is v4. Batches may pin themselves to v3 by sending the version in the envelope; those are accepted until the end of the year, after which they are rejected with a 409 rather than silently upgraded.
| Version | Status | Notes |
|---|---|---|
| v4 | Current | Adds the region field. |
| v3 | Accepted | Rejected from 2027-01-01. |
| v2 | Rejected | Removed 2026-07-30. |
A batch that fails validation is written to the rejects table whole, with the failing field noted, and is not partially applied. Reprocessing a reject is a manual step — see the runbook.
Sized for roughly 400 batches an hour. Sustained load above that queues rather than sheds; the queue is bounded at 5,000 and starts rejecting with a 503 beyond it.