Wave is Future Demand’s campaign activation surface. Where Lookout tells you what to focus on, Wave is how partners act on it: build audience packages, configure and publish campaigns, and read attribution results.

The pages you’ll rebuild

PageWhat it showsGuide
Wave listThe Wave version of the events list — same data, campaign-state-centric framing.Wave list
Campaign detailA single event’s Wave view: stats, taste clusters, and the campaign setup wizard.Campaign detail
Campaigns lifecycleThe setup_processes/{eid} state machine — create, edit, publish, edit-running, reset.Campaigns lifecycle
Package BuilderList + create + results for audience packages.Package Builder
MessagesPer-partner notifications inbox.Messages
AttributionBackhaul evaluation + sales adjustments.Attribution
1

Wave list

Same /events/ endpoint as Lookout — your existing code is half the work.
2

Campaign detail (read-only)

Read the existing setup_process if any, the campaigns, the meta-auth status. Defer the wizard.
3

Campaigns lifecycle (the wizard)

The hardest part. Get this right and you have Wave.
4

Package Builder

Independent surface — pick this up once campaigns work end-to-end.
5

Messages + Attribution

Smaller, additive features.

What’s tricky in Wave

  • One setup_process per event. No setupId in the URL. Concurrent edits across tabs race. The reference webapp uses a module-level AbortController to drop stale PUTs — replicate or you’ll get flicker and lost edits.
  • POST /campaigns_setupPUT /setup_processes/{eid}. Different endpoints, different lifecycle stages. /campaigns_setup is for editing a published cluster’s creative + targeting; the setup_processes PUT is for draft edits.
  • Package status polling has no unmount cancellation in the reference webapp. If you copy that, gate on a mounted flag.
  • Two-host architecture. Media uploads via POST /media hit the API host without the /v3 prefix. Easy to miss.
  • Debounce autosave + abort prior PUTs. Without both, the user’s “I changed two fields quickly” becomes a race.
Each Wave guide flags the specific gotchas relevant to that page.

What you don’t need to rebuild

  • The cross-tenant /messages/partner/{partner_id} admin endpoints.
  • The /prompts/* admin endpoints (read prompts/custom_prompt only).
  • The CR-side bulk ingest pipelines unless your integration owns sales-data delivery.

How Wave depends on Lookout

Wave shares the events list, the Affinity recommendation surface, and the event detail components. If you’ve already built Lookout, you’ve already built about half of Wave. The new code is the campaign wizard (the setup_processes state machine) and the Package Builder.