Conversion Events
Create, read, and update Conversion Event configs — the same trigger → event type → logic/value → destination configuration built from the Conversion Event Builder in the Callix dashboard (Settings → Conversions).
A Conversion Event config is evaluated and sent by Callix's dispatcher whenever one of its triggers fires (a call gets analyzed, a payment lands, a Callix Event matches, or an inbound webhook/API call arrives) — or you can fire one directly with POST /conversion-events/:id/fire below, useful if you're running your own scoring/logic outside Callix and just want Callix to evaluate the rule and send. Destination support: Google Ads is live; Meta, Whop, and Custom webhook destinations are still being built and currently no-op (the fire attempt is logged as skipped, never silently dropped).
Endpoints
| POST | /conversion-events | Create a conversion event config |
| GET | /conversion-events/:id | Fetch a single conversion event config |
| PATCH | /conversion-events/:id | Partially update a conversion event config |
| POST | /conversion-events/:id/fire | Manually fire a conversion event with your own context data |
POST /conversion-events
Creates a new conversion event config. Returns 201 with the created record.
Request body
{
"name": "High-Intent Lead",
"description": "Fires when a call scores high and the payment clears $200+",
"triggers": ["call_analyzed", "payment_received"],
"eventType": "purchase",
"rules": [
{ "field": "lead_quality", "comparator": "gt", "threshold": 70, "value": 50 },
{ "field": "payment_amount", "comparator": "gt", "threshold": 200, "value": 100 }
],
"destinationPlatform": "meta",
"destinationMetaPixels": [
{ "integrationId": "k17...", "adAccountId": "act_123456789", "pixelId": "123456789012345" }
]
}namestringConversion event namedescriptionstring?Optional descriptiontriggersstring[]call_analyzed, payment_received, webhook, or event_<callixEventTypeId> — fires on ANY selected triggereventTypestringschedule, purchase, lead, subscribe_start_trial, or customcustomEventTypeNamestring?Required when eventType is customrulesarrayAt least one if/then rule — see Rules belowdestinationPlatformstringmeta, google, whop, or customdestinationMetaPixelsarray?Required when destinationPlatform is meta — see Destination belowdestinationGoogleAdAccountIdstring?Used when destinationPlatform is googledestinationWhopBusinessIdsstring[]?Used when destinationPlatform is whopdestinationCustomUrlstring?Used when destinationPlatform is customRules
Each rule is an if/then — the first rule that matches at send time sets the conversion's reported value.
fieldstringlead_quality, call_outcome, payment_amount, payment_processor, payment_product, or alwayscomparatorstring?gt or lt — used with lead_quality / payment_amountthresholdnumber?Percentage (lead_quality) or dollar amount (payment_amount) compared againstoutcomeValuestring?Call stage slug — used with call_outcomepaymentMatchValuestring?Processor name (stripe, whop, ...) or product id/name — used with payment_processor / payment_productvalueModestring?fixed (default) or payment_formulavalueMultipliernumber?payment_formula mode — reported value = payment amount × multiplier + adjustmentvalueAdjustmentnumber?payment_formula mode — flat dollar amount added/subtractedvaluenumberFixed dollar value reported when this rule matches (ignored in payment_formula mode)lead_quality/call_outcome only make sense when call_analyzed is one of your triggers; payment_amount/payment_processor/payment_product only make sense when payment_received is one of your triggers — same restriction the dashboard builder enforces.
Destination
Exactly one destination platform per config:
meta—destinationMetaPixels: array of{ integrationId, adAccountId, pixelId }. Multi-select — a config can report to more than one pixel.google—destinationGoogleAdAccountId: string (no per-ad-account/pixel concept yet — reports via your account-wide feed).whop—destinationWhopBusinessIds: string array of connected Whop business ids. Multi-select.custom—destinationCustomUrl: a webhook URL.
GET /conversion-events/:id
Returns the full stored config for the given id, scoped to your account. 404 if it doesn't exist or belongs to another account.
PATCH /conversion-events/:id
Partial update — only include the fields you want to change. Under the hood this reads the existing config and merges your fields on top of it before saving, so omitted fields are left untouched.
{
"destinationMetaPixels": [
{ "integrationId": "k17...", "adAccountId": "act_987654321", "pixelId": "999999999999999" }
]
}POST /conversion-events/:id/fire
Manually fires a specific conversion event: evaluates its rules against the context you provide, computes a value if a rule matches, and sends to its configured destination — the same pipeline the 4 automatic triggers use, but invoked directly by you instead of one of Callix's own trigger points. Useful when you're running your own lead-scoring or payment processing outside Callix and just want Callix to evaluate the rule and report the conversion.
Request body
{
"prospectId": "k57...",
"paymentAmount": 250,
"paymentProcessor": "stripe",
"paymentProduct": "pro-plan"
}prospectIdstring?Required for Google Ads destinations — attribution is resolved from the prospect's stored gclid. Ignored for rule matching itself.emailstring?Not currently matched against any rule field — reserved for future usephonestring?Not currently matched against any rule field — reserved for future useleadQualityScorenumber?Matched against lead_quality rulescallOutcomestring?Matched against call_outcome rulespaymentAmountnumber?Matched against payment_amount rules; also the base value in payment_formula valueModepaymentProcessorstring?Matched against payment_processor rulespaymentProductstring?Matched against payment_product rulesResponse
{ "data": { "status": "sent", "value": 100 } }status is one of sent, failed, or skipped. skipped covers both "no rule matched your provided context" and "destination not yet implemented" (Meta/Whop/Custom today) — check message for which. value is only present when a rule matched.
