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_ROLL

Campaign & 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}/delivery

Identity 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}/segments

Publisher 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}/invite

Webhook events

Subscribe to platform events via webhook to build reactive integrations. Configure at Dashboard → Settings → Webhooks:

EventTrigger
channel.approvedChannel approved by admin for serving
channel.rejectedChannel rejected with review notes
creative.approvedCreative approved and eligible to serve
creative.rejectedCreative rejected with reviewer notes
line_item.pacing_alertLine item over/under pacing threshold
campaign.budget_depletedCampaign total budget exhausted
deal.status_changedDeal activated, paused, or expired
publisher.wallet_lowPublisher wallet balance below threshold
billing.payment_processedPublisher 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.