Quickstart
Everything in Waveband: campaigns, line items, creatives, targeting, conversion events, reports, webhooks: is available over a REST API with the same permissions model as the console. This page gets you from zero to a live campaign.
1. Create an API key
In the console, go to Settings → API keys and create a key with the scopes you need (for example campaigns:write, creatives:write, reports:read). The key is shown once: store it in a secret manager.
export WAVEBAND_API_KEY="wbk_..."
2. Find your workspace
curl -s https://waveband-staging.adwave.com/api/v1/workspaces \ -H "Authorization: Bearer $WAVEBAND_API_KEY"
3. Create a campaign
curl -s -X POST https://waveband-staging.adwave.com/api/v1/campaigns \
-H "Authorization: Bearer $WAVEBAND_API_KEY" \
-H "Content-Type: application/json" \
-H "Idempotency-Key: my-first-campaign" \
-d '{
"workspaceId": "<workspace-id>",
"name": "Spring CTV Launch",
"channel": "ctv",
"startDate": "2026-08-01",
"budgetUsdMinor": 500000,
"goalType": "impressions"
}'Budgets are integer USD minor units (cents): 500000 = $5,000. All ids are Waveband UUIDs. POST endpoints accept an Idempotency-Key header so retries are safe.
4. Watch it go live
Trafficking changes sync to delivery asynchronously. Subscribe a webhook to sync.succeeded.v1 / sync.failed.v1 (see Webhooks & events) or poll GET /api/v1/events.
5. Pull results
curl -s "https://waveband-staging.adwave.com/api/v1/reports?workspaceId=<id>&from=2026-08-01&to=2026-08-07&groupBy=campaign" \ -H "Authorization: Bearer $WAVEBAND_API_KEY"
TypeScript SDK
import { WavebandClient } from "@waveband/sdk";
const waveband = new WavebandClient({
apiKey: process.env.WAVEBAND_API_KEY!,
baseUrl: "https://waveband-staging.adwave.com",
});
const campaigns = await waveband.campaigns.list({ workspaceId });The full REST surface is described by the OpenAPI 3.1 spec and browsable in the API reference.
Console creatives worth knowing
For display attention formats, generate Waveforms in Creative Studio (documented in Waveforms). For audio-led CTV/OLV video, see Soundframe. Both land as ordinary creatives on the same API.