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.
FieldValuesMeaning
statusactive, archived, cancelled, …Backend lifecycle.
frontend_statusDEFAULT, FLAGGED, HIDDENUX state. FLAGGED pins to the top of the list; HIDDEN archives from the user’s view.
campaign_statusRUNNING, OPEN, CLOSED, IGNOREDWave campaign roll-up.
client_campaign_statusRUNNING, PAUSEDThe user’s pause/run toggle for this event’s Wave campaigns.
campaign_optimisation_statusON, OFFWhether Future Demand’s automated optimisation is active.
ad_campaign_optimisation_statusON, OFFSame, 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

PurposeEndpoint
List with filtersGET /events/
Flagged-only listGET /events/flagged/
List of venues for a city (filter UI)GET /events/venues?city=...
Single event detailGET /events/{eid}
Statistics (KPIs)GET /events/{eid}/statistics
Tenant-wide statisticsGET /events/statistics
Demand benchmarkGET /events/{eid}/benchmark
Sales-vs-prediction graphGET /events/{eid}/sales-graph
Daily revenue / ticketsGET /daily_revenue_summary/?event_id=&currency=&start_date=&end_date=
Ticket categoriesGET /events/{eid}/tickets
Sibling events in seriesGET /events/{eid}/series
Taste clustersGET /events/{eid}/clusters
Suggested clusters at a budgetGET /events/{eid}/suggested_tcs?budget=&goal=
Default Wave campaign paramsGET /events/{eid}/default_campaigns_parameters
Existing campaignsGET /events/{eid}/campaigns
For the full filter parameter set on GET /events/ see Events list guide.

Writes

PurposeEndpoint
Toggle flag / archivePUT /events/{eid}/setup_frontend_status
Pause / resume Wave campaignsPUT /events/{eid}/client_campaign_status?...
Toggle automated optimisationPUT /events/{eid}/campaign_optimisation_status?...
Init / reset Wave setupPUT /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 seriesPOST /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:
PurposeEndpoint
Manual transaction-summary ingestPOST /ingest/transaction_summary
Excel file ingestPOST /ingest/transaction_summary/from_excel?eid={eid} (multipart)
Clear all ingested salesDELETE /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