Partner APIs
LtvAdx provides programmatic control over CTV inventory, deal management, identity resolution, and reporting via the Partner APIs — designed for networks, publishers, and advertisers running automated operations at scale.
Authentication
All Partner API requests use Bearer token authentication with a scoped API key. Generate keys at Dashboard → Settings → API Keys. Keys inherit the permissions of the role they are assigned to — use Publisher scope for inventory APIs, Advertiser scope for campaign APIs, and Read Only scope for reporting integrations.
# All requests use this header Authorization: Bearer ltv_sk_live_xxxxxxxxxxxx # Base URL for all REST endpoints https://api.ltvadx.com/api/v1/
Channel & inventory management API
Create and manage CTV channels programmatically — useful for networks onboarding publishers via an automated flow:
# List all channels
GET /v1/channels
# Create a channel
POST /v1/channels
{
"name": "FAST News 24",
"platforms": ["ROKU", "FIRE_TV"],
"contentModel": "FAST",
"iabCategory": "IAB12", // News
"floorCpm": 5.00,
"ssaiEnabled": true,
"rtbEnabled": false
}
# Update channel config
PATCH /v1/channels/{channelId}
# Create an ad break
POST /v1/ad-breaks
{
"channelId": "chan_fast_news_01",
"breakType": "MID_ROLL",
"position": 1,
"maxDuration": 30,
"podSize": 3,
"scte35CueId": "0x1234ABCD"
}
# Get VAST tag URL for a channel
GET /v1/channels/{channelId}/vast-tag
?platform=ROKU&breakType=MID_ROLLCampaign & line item API
Create and manage campaigns, line items, and creatives programmatically for high-volume trafficking automation:
# Create a campaign
POST /v1/campaigns
{
"name": "Brand Awareness Q3",
"advertiserId": "adv_xyz",
"buyingModel": "CPM",
"totalBudget": 50000,
"dailyBudget": 2000,
"startDate": "2026-07-01",
"endDate": "2026-09-30",
"currency": "USD"
}
# Create a line item with targeting
POST /v1/line-items
{
"campaignId": "camp_abc",
"name": "Roku Q3 30s",
"dealType": "OPEN_AUCTION",
"bidCpm": 12.50,
"platforms": ["ROKU", "FIRE_TV"],
"contentModels": ["FAST", "AVOD"],
"breakTypes": ["MID_ROLL"],
"countries": ["US", "CA"],
"minDuration": 15,
"maxDuration": 30,
"freqCapImpressions": 3,
"freqCapWindowHours": 24,
"minVcrThreshold": 65
}
# Upload a creative
POST /v1/creatives
{
"name": "30s Brand Spot",
"creativeType": "VAST_WRAPPER",
"vastUrl": "https://cdn.brand.com/vast/30s.xml",
"adFormat": "STANDARD_30",
"durationSeconds": 30,
"skippable": false
}Deal management API
Create and manage PMP, Programmatic Guaranteed, and Addressable deals:
# Create a PMP deal
POST /v1/deals
{
"name": "Q3 Sports PMP",
"dealType": "PMP",
"channelIds": ["chan_sports_01", "chan_sports_02"],
"publisherId": "pub_abc",
"floorCpm": 18.00,
"startDate": "2026-07-01",
"endDate": "2026-09-30"
}
# List available deals (Ad Network buyers)
GET /v1/ssp/inventory
?dealType=PMP&minCpm=10&platform=ROKU
# Get deal delivery status
GET /v1/deals/{dealId}/deliveryIdentity resolution API
Resolve any device or user signal to a LtvAdx HouseholdID for targeting and frequency capping:
# Resolve household from any signal
POST /v1/identity/resolve
{
"uid2Hash": "sha256:a3f9b2...", // UID2 token hash
"advertisingId": "xxxxxxxx-xxxx-...", // RIDA, IFA, TIFA
"ipAddress": "104.28.42.1",
"platform": "ROKU"
}
# 200 Response
{
"householdId": "hh_a1b2c3",
"qualityScore": 92, // 0–100 confidence
"resolvedVia": "UID2",
"deviceCount": 4,
"segments": ["sports_fan", "binge_watcher"],
"consentStatus": "ALLOW_ALL"
}
# Ingest ACR viewing signal
POST /v1/identity/acr-signal
{
"householdId": "hh_a1b2c3",
"channelId": "espnplus",
"contentFingerprint": "cfp_xyz",
"tuneInAt": "2026-06-03T20:30:00Z",
"genre": "SPORTS"
}
# Look up household segments
GET /v1/identity/household/{householdId}/segmentsPublisher management API (Networks)
Network accounts can manage publisher sub-accounts programmatically:
# Create a publisher sub-account
POST /v1/publishers
{
"name": "FAST News Network",
"email": "ops@fastnews.com",
"company": "Fast News Inc."
}
# List publishers in the network
GET /v1/publishers?status=ACTIVE
# Invite publisher to dashboard
POST /v1/publishers/{publisherId}/inviteWebhook events
Subscribe to platform events via webhook to build reactive integrations. Configure at Dashboard → Settings → Webhooks:
| Event | Trigger |
|---|---|
| channel.approved | Channel approved by admin for serving |
| channel.rejected | Channel rejected with review notes |
| creative.approved | Creative approved and eligible to serve |
| creative.rejected | Creative rejected with reviewer notes |
| line_item.pacing_alert | Line item over/under pacing threshold |
| campaign.budget_depleted | Campaign total budget exhausted |
| deal.status_changed | Deal activated, paused, or expired |
| publisher.wallet_low | Publisher wallet balance below threshold |
| billing.payment_processed | Publisher payout processed |
Rate limits
Partner API endpoints are rate-limited at 120 requests per minute per API key. List endpoints return up to 100 items per page; use the cursor parameter for pagination. Burst allowance: 20 requests per second. Exceeding limits returns 429 Too Many Requests with a Retry-After header.