Experimental

Ads Platform

Launch and manage ad campaigns, pull cross-platform attribution, and fire pixel events without leaving Callix.

In progress

Launch and manage ad campaigns without leaving Callix. This is under active development — request/response shapes are likely to change before it's finalized.

Endpoints

POST/experimental/campaignsLaunch a new ad campaign
GET/experimental/campaignsList campaigns
GET/experimental/campaigns/:idFetch a single campaign, with live stats
PATCH/experimental/campaigns/:idUpdate budget or pause/resume/archive a campaign
GET/experimental/attributionAggregated spend/lead/revenue report across campaigns
GET/experimental/attribution/:prospectIdFull attribution path for a single prospect
POST/experimental/pixel-eventsFire a pixel event to all connected ad destinations
GET/experimental/pixel-eventsList recently fired pixel events

Campaigns

Launch and manage ad campaigns on connected platforms (Meta, Google, TikTok) directly from Callix, targeting audiences built from your own Callix segments and conversion data instead of hand-building audiences in each ad platform.

POST /experimental/campaigns

json
{
  "name": "Q3 Retargeting — Warm Leads",
  "platform": "meta",
  "adAccountId": "act_123456789",
  "objective": "conversions",
  "dailyBudget": 150,
  "audience": {
    "source": "callix_segment",
    "segmentId": "k9a...",
    "lookalikePercent": 3
  },
  "conversionEventId": "k17...",
  "creative": {
    "headline": "Stop losing warm leads",
    "primaryText": "You booked a call. Here's why you should show up.",
    "destinationUrl": "https://yoursite.com/book-a-call"
  },
  "status": "paused"
}
namestringCampaign name
platformstringmeta, google, or tiktok
adAccountIdstringThe connected ad account to launch under
objectivestringconversions, traffic, leads, or awareness
dailyBudgetnumberDollars/day
audienceobjectSee Audience below
conversionEventIdstring?A Conversion Event config id to optimize delivery toward
creativeobjectheadline, primaryText, destinationUrl
statusstring?active or paused at creation — defaults to paused

Returns 201 with the created campaign, including its Callix id and (once synced to the platform) a platformCampaignId.

Audience

  • source (string, required) — callix_segment (built from your Prospects/Events data) or custom_audience (uploaded list)
  • segmentId (string?) — required when source is callix_segment
  • lookalikePercent (number?) — 1-10, expands the segment into a lookalike audience on the destination platform
  • customAudienceId (string?) — required when source is custom_audience

GET /experimental/campaigns

Query params: platform, status (active | paused | archived). Returns a paginated list of campaigns for your account.

GET /experimental/campaigns/:id

Returns the campaign config plus live stats synced from the platform: spend, impressions, clicks, conversions, cpa.

json
{
  "data": {
    "_id": "k88...",
    "name": "Q3 Retargeting — Warm Leads",
    "platform": "meta",
    "status": "active",
    "dailyBudget": 150,
    "stats": { "spend": 842.13, "impressions": 118422, "clicks": 1904, "conversions": 37, "cpa": 22.76 }
  }
}

PATCH /experimental/campaigns/:id

Partial update — change dailyBudget, or transition status between active, paused, and archived.

json
{ "status": "paused" }

Attribution

Attribute prospects, calls, and revenue back to the campaign, ad, and platform that produced them — stitched from click ids (gclid/fbclid/ttclid) and UTM params captured on your Prospects, joined against Conversion Events fired for that prospect.

GET /experimental/attribution

Query params: campaignId, platform, from, to, groupBy (campaign | platform | day, defaults to campaign). Returns aggregated performance and revenue per group.

json
{
  "data": [
    {
      "campaignId": "k88...",
      "campaignName": "Q3 Retargeting — Warm Leads",
      "platform": "meta",
      "spend": 842.13,
      "leads": 61,
      "callsBooked": 24,
      "callsShowed": 19,
      "revenue": 3800,
      "roas": 4.51
    }
  ]
}

GET /experimental/attribution/:prospectId

Returns the full attribution path for one prospect: first-touch and last-touch campaigns, every touchpoint in between, and any revenue ultimately tied to them.

json
{
  "data": {
    "prospectId": "k57...",
    "firstTouch": { "platform": "meta", "campaignId": "k88...", "timestamp": 1745200000000 },
    "lastTouch": { "platform": "google", "campaignId": "k91...", "timestamp": 1745800000000 },
    "touchpoints": [
      { "platform": "meta", "campaignId": "k88...", "clickId": "fb.1.169...", "timestamp": 1745200000000 },
      { "platform": "google", "campaignId": "k91...", "clickId": "Cj0KCQ...", "timestamp": 1745800000000 }
    ],
    "revenue": 250
  }
}

Pixel Events

A single server-side pixel — fire one event to Callix and it fans out to every ad destination connected to your account (Meta CAPI, Google Enhanced Conversions, TikTok Events API), instead of wiring up each platform's pixel separately.

POST /experimental/pixel-events

json
{
  "event": "Lead",
  "prospectId": "k57...",
  "email": "jane@acme.co",
  "clickIds": { "fbclid": "fb.1.169...", "gclid": "Cj0KCQ..." },
  "value": 49,
  "currency": "USD",
  "sourceUrl": "https://yoursite.com/book-a-call"
}
eventstringPageView, Lead, Schedule, Purchase, or CompleteRegistration
prospectIdstring?Links the event to an existing prospect for attribution
emailstring?Used to match/create a prospect when prospectId is omitted
phonestring?Used to match/create a prospect when prospectId is omitted
clickIdsobject?fbclid, gclid, ttclid — captured from the visitor's landing URL
valuenumber?Required for Purchase
currencystring?Required for Purchase
sourceUrlstring?Page the event fired from

Response

json
{ "data": { "eventId": "k12...", "dispatchedTo": ["meta", "google"] } }

dispatchedTo lists which connected destinations the event was forwarded to; a destination is skipped if it isn't connected or the event type isn't relevant to it.

GET /experimental/pixel-events

Query params: prospectId, event, from, to. Returns recently fired pixel events with per-destination dispatch status.

json
{
  "data": [
    { "eventId": "k12...", "event": "Lead", "prospectId": "k57...", "dispatchedTo": ["meta", "google"], "timestamp": 1745800000000 }
  ]
}