This quickstart gets you authenticated and making real calls against the
Future Demand Client API. It’s deliberately product-agnostic — it works for
both Lookout and Wave.
What you’ll need
Credentials
Request access at support.future-demand.com
to get a service-account username/password bound to your partner
(your tenant) on staging.
A base URL
Always integrate against staging first. See Environments
for the host. The version prefix is /v3.
curl, Postman, or the [TypeScript client](/sdk/typescript-client)
Anything that can speak HTTPS and set headers.
1. Sign in and capture a token
BASE = https://client-api.stg.future-demand.com/api/v3
curl -s -X POST " $BASE /auth" \
-H "Content-Type: application/json" \
-d '{ "username": "[email protected] ", "password": "..." }'
Response (abbreviated — see Authentication for all
branches including MFA and forced password change):
{
"AccessToken" : "eyJraWQ..." ,
"IdToken" : "eyJraWQ..." ,
"RefreshToken" : "eyJjdHkiOiJKV1Q..." ,
"ExpiresIn" : 3600 ,
"TokenType" : "Bearer"
}
Stash all three tokens. Step 2 below decodes IdToken to find your
partner; without it you can’t continue.
export FD_ACCESS_TOKEN = "eyJraWQ..."
export FD_ID_TOKEN = "eyJraWQ..."
export FD_REFRESH_TOKEN = "eyJjdHkiOiJKV1Q..."
2. Find your partner_id
Decode the IdToken (it’s a standard JWT) and read cognito:groups.
Whichever entry matches partner-id-* or fd<digits> is a partner you can
act as. If you have only one, use it; if multiple, your UI should let the
user choose.
# Quick decode (jq + base64):
echo " $FD_ID_TOKEN " | cut -d. -f2 | base64 -d | jq '."cognito:groups"'
# → ["partner-id-acme", "webapp-access-group-2"]
export FD_PARTNER_ID = "partner-id-acme"
3. Make your first authenticated calls
Every authenticated request carries two headers:
Authorization : Bearer <AccessToken>
X-Preferred-Partner-Id : <partner_id>
# Health check — no auth needed
curl -s " $BASE /status/"
# Confirm your token + partner header are right
curl -s " $BASE /partners/" \
-H "Authorization: Bearer $FD_ACCESS_TOKEN " \
-H "X-Preferred-Partner-Id: $FD_PARTNER_ID "
A 200 from /partners/ returning your partner record means both your
token and your X-Preferred-Partner-Id are valid.
4. List events (Lookout)
Events are the centre of gravity in Lookout. List the upcoming ones:
curl -s " $BASE /events/?limit=5&descending=false" \
-H "Authorization: Bearer $FD_ACCESS_TOKEN " \
-H "X-Preferred-Partner-Id: $FD_PARTNER_ID "
Expected envelope (page+limit, 1-indexed). Shortened example — the real
event payload has many more fields; see Events for
the full shape:
{
"total" : 423 ,
"limit" : 5 ,
"page" : 1 ,
"pages" : 85 ,
"nextPage" : 2 ,
"prevPage" : null ,
"items" : [
{
"id" : "evt_abc123" ,
"title" : "Concert at Olympiahalle" ,
"start_date_time" : "2026-06-12T18:30:00Z" ,
"venue_name" : "Olympiahalle" ,
"hall_name" : "Main Hall" ,
"city" : "München" ,
"status" : "active" ,
"frontend_status" : "DEFAULT" ,
"category" : "concert" ,
"capacity" : 12000
}
]
}
Currency is partner-level , not event-level — read it from
GET /partners/ (currency field), not from the event payload.
See Events list for the full payload, filters,
and exactly how the reference Lookout webapp pages call this endpoint.
5. Fetch suggested taste clusters
Pick one event and ask the Client API which clusters to target. Goal
values are enum-style: UTILIZATION, ROAS, VISIBILITY, LINK_CLICKS.
EID = evt_abc123
curl -s " $BASE /events/ $EID /suggested_tcs?budget=5000&goal=UTILIZATION" \
-H "Authorization: Bearer $FD_ACCESS_TOKEN " \
-H "X-Preferred-Partner-Id: $FD_PARTNER_ID "
The response is minimal — [{ "tc": "...", "tc_run_id": "..." }]. To
preview expected outcomes for the selection, follow up with
GET /events/{eid}/campaigns_expected_value.
6. Create a campaign (Wave)
To move from insight to activation, kick off the campaign setup process:
curl -s -X POST " $BASE /setup_processes/ $EID " \
-H "Authorization: Bearer $FD_ACCESS_TOKEN " \
-H "X-Preferred-Partner-Id: $FD_PARTNER_ID " \
-H "Content-Type: application/json" \
-d '{ "goal": "UTILIZATION", "total_budget": 5000 }'
setup_processes/{eid} is the state-machine row that owns the Wave
campaign setup for a given event. See
Wave Campaigns Lifecycle for the full
state model.
Next steps
Authentication Token refresh, MFA, user provisioning, error codes.
Platform Model The partner / client / event / campaign hierarchy you need in your head.
Your First Integration A 30-minute walk-through that renders a Lookout recommendation in React.
API Reference Every endpoint, auto-generated from OpenAPI.