apiURL + /v3), not the CR host.
Flow 1 — Per-event “Add sales”
Triggered from the Event detail page’s action menu. Route modes are snake_case:sales_summary and document_upload. There is also a
drawer-based variant reachable via update-sales=... query params.
Manual mode (/events/{eid}/update-sales/sales_summary)
200 is
success. It does not render row-level validation codes; non-200
responses surface a generic failure message.
File-upload mode (/events/{eid}/update-sales/document_upload)
/v3/ingest/...), unlike the unversioned
POST /media.
Reference implementation
Flow 2 — Sales-edit export / import
The sales-edit sheet is dual-purpose on the same path (main API):Clearing previously-ingested sales
From the Event detail’s “Clear sales” menu item, with a confirm modal (main API):Gotchas
Main API host, not CR
Main API host, not CR
All sales endpoints —
transaction_summary, from_excel,
sales_edit_export, and the clear DELETE — are on the main API
(apiURL + /v3), not the CR host.Route modes are snake_case
Route modes are snake_case
sales_summary and document_upload, plus a drawer variant via
update-sales=... query params.Manual ingest: status-only handling
Manual ingest: status-only handling
The FE keys off HTTP status (
200 = success) and shows a generic
failure otherwise; it does not parse row-level validation codes for
transaction_summary.Clear sales expects 200, not 204
Clear sales expects 200, not 204
Only
200 is treated as success.Related
- Event detail — where the per-event flows are launched.
- Bulk event upload — adjacent flow (CR API).
- File uploads cookbook.