An event is the unit of analysis and activation across both Lookout
and Wave. It can be a concert, a fixture, a fair, a product release — any
finite-window thing your audience can buy a ticket or admission to.
Event shape (read)
{
"id": "evt_abc123",
"title": "Concert at Olympiahalle",
"start_date_time": "2026-06-12T18:30:00Z",
"city": "München",
"venue_name": "Olympiahalle",
"hall_name": "Main Hall",
"capacity": 12000,
"category": "concert",
"currency": "EUR",
"special_ad_category": null,
"status": "active",
"frontend_status": "DEFAULT",
"campaign_status": "RUNNING",
"client_campaign_status": "RUNNING",
"campaign_optimisation_status": "ON",
"ad_campaign_optimisation_status": "ON",
"campaign_stop_time": "2026-06-12T18:30:00Z",
"has_active_campaigns": true,
"campaign_event_series": ["evt_abc124", "evt_abc125"],
"benchmark": {
"prediction": { "value": 0.78, "benchmark": 0.65 },
"state": "above"
}
}
The list endpoint (GET /events/) wraps these in the standard envelope:
{ "total": 423, "limit": 50, "page": 1, "pages": 9, "items": [ ... ] }
Statuses you’ll deal with
There are several status fields on an event. They are independent and
mean different things.
| Field | Values | Meaning |
|---|
status | active, archived, cancelled, … | Backend lifecycle. |
frontend_status | DEFAULT, FLAGGED, HIDDEN | UX state. FLAGGED pins to the top of the list; HIDDEN archives from the user’s view. |
campaign_status | RUNNING, OPEN, CLOSED, IGNORED | Wave campaign roll-up. |
client_campaign_status | RUNNING, PAUSED | The user’s pause/run toggle for this event’s Wave campaigns. |
campaign_optimisation_status | ON, OFF | Whether Future Demand’s automated optimisation is active. |
ad_campaign_optimisation_status | ON, OFF | Same, but at the per-platform ad-campaign level. |
Most UIs only need frontend_status (for the list view) and one of the
campaign-status fields (for the action menus). The rest are platform internals.
Reads you’ll actually use
| Purpose | Endpoint |
|---|
| List with filters | GET /events/ |
| Flagged-only list | GET /events/flagged/ |
| List of venues for a city (filter UI) | GET /events/venues?city=... |
| Single event detail | GET /events/{eid} |
| Statistics (KPIs) | GET /events/{eid}/statistics |
| Tenant-wide statistics | GET /events/statistics |
| Demand benchmark | GET /events/{eid}/benchmark |
| Sales-vs-prediction graph | GET /events/{eid}/sales-graph |
| Daily revenue / tickets | GET /daily_revenue_summary/?event_id=¤cy=&start_date=&end_date= |
| Ticket categories | GET /events/{eid}/tickets |
| Sibling events in series | GET /events/{eid}/series |
| Taste clusters | GET /events/{eid}/clusters |
| Suggested clusters at a budget | GET /events/{eid}/suggested_tcs?budget=&goal= |
| Default Wave campaign params | GET /events/{eid}/default_campaigns_parameters |
| Existing campaigns | GET /events/{eid}/campaigns |
For the full filter parameter set on GET /events/ see
Events list guide.
Writes
| Purpose | Endpoint |
|---|
| Toggle flag / archive | PUT /events/{eid}/setup_frontend_status |
| Pause / resume Wave campaigns | PUT /events/{eid}/client_campaign_status?... |
| Toggle automated optimisation | PUT /events/{eid}/campaign_optimisation_status?... |
| Init / reset Wave setup | PUT /events/{eid}/init_campaigns_setup, PUT /events/{eid}/reset_campaigns_setup |
| Edit event meta (CR API) | [cr_api] PUT /events/{eid}?event_type=...&partner_product=... |
| Manage event series | POST /events/{eid}/series, DELETE /events/{eid}/series |
Two-step status updates. Setting frontend_status is a two-call dance:
PUT /events/{eid}/setup_frontend_status (main API, 204) followed by
PUT [cr_api] /events/last_updated_on_fe/{eid} with { status: 'RUNNING' }.
Failing the second silently corrupts the cross-host view. See
Event detail guide.
Sales data
Two ingest paths and a clear endpoint:
| Purpose | Endpoint |
|---|
| Manual transaction-summary ingest | POST /ingest/transaction_summary |
| Excel file ingest | POST /ingest/transaction_summary/from_excel?eid={eid} (multipart) |
| Clear all ingested sales | DELETE /daily_revenue_summary?eid={eid} |
| Bulk sales-edit XLSX (download/upload) | GET/POST /daily_revenue_summary/sales_edit_export |
Event series
A series groups sibling events — multi-date tours, repeat fixtures, weekly
recurrences. GET /events/{eid}/series lists members; the available pool
for adding new members comes from GET /events/{eid}/available_events_for_series.
Mutations:
POST /events/{eid}/series?event_series=evt_x&event_series=evt_y
DELETE /events/{eid}/series?event_series=evt_x
Note these mutations send the list as repeated query params, not a
JSON body.
Lifecycle (typical flow)
ingest (CR API) ─▶ active ─▶ campaign_status: OPEN
│ │
│ user flags │ user runs Wave wizard
▼ ▼
FLAGGED client_campaign_status: RUNNING
│
│ event runtime ends
▼
campaign_status: CLOSED
│
│ attribution job
▼
attribution data on /campaign_results