Conversion tracking & creator attribution
How a sale gets attributed back to the creator who drove it — on Shopify, on WooCommerce, on a custom cart, or on a checkout you don't control at all.
Four ways to attribute a sale
You can use any one of these on its own, or combine them. When more than one signal is present on the same order, the most specific one wins.
Click ID
Every click on a creator's tracking link gets a unique if_click id. Capture it on your landing page and send it back with the order. Identifies the exact click, not just the creator.
Tracking link
Each creator gets a short link. We record the click and pass if_ref through to your site, so the referral survives the hop even when no cookie of ours can.
Discount code
Mint a unique code per creator from the collaboration page. Any order carrying that code pays that creator. Needs no script, no cookie and no platform integration.
UTM parameters
If all you have are UTMs, we'll match them to a creator's link where we can. Least precise, so it sits last.
Server-to-server conversion API
For any checkout you can't put a script on — hosted ticketing, a booking system, an invoicing flow, a native app. Your server POSTs the order to us within seconds of the purchase. This is the most reliable option available, because nothing depends on the customer's browser.
curl -X POST https://influenceflow.io/analytics/api/webhook/conversion/ \
-H "Authorization: Bearer $INFLUENCEFLOW_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"campaign_id": 123,
"platform": "eventbrite",
"order": {
"id": "EB-88213",
"click_id": "9f2a4c61-8d3e-4a17-9b52-1c7f0e5d3a44",
"total": "46.60",
"subtotal": "43.00",
"currency": "USD",
"status": "completed",
"discount_codes": ["WILL20"],
"email": "customer@example.com"
}
}'
Order fields
| Field | Required | Notes |
|---|---|---|
id | Yes | Your order id. Used to de-duplicate, so resending the same order is safe. |
total | Yes | Gross amount the customer paid. This is what revenue and GMV report. |
click_id | No | The if_click value from the tracking link. Strongest attribution signal. |
if_ref | No | The tracking link's short code, if you captured that instead. |
subtotal | No | Amount before booking fees, tax and shipping. Set your campaign's commission basis to net product revenue and creators are paid on this rather than on the gross. |
currency | No | ISO code. Defaults to USD. Amounts are stored as sent and never converted. |
discount_codes | No | Array. An exact match against a creator's code attributes the sale. |
status | No | completed, pending, refunded, chargeback or cancelled. |
email | No | Customer email, for de-duplication and reporting. |
Refunds
POST the same order id again with a refund flag. The commission is clawed back automatically, and a redelivered refund never claws back twice.
{
"campaign_id": 123,
"order": {
"id": "EB-88213",
"total": "46.60",
"refunded": true
}
}
For a partial refund, send refund_amount and your own refund_id instead. For a chargeback, set refund_kind to chargeback — that always reverses the full sale.
Platform integrations
If you're on a supported platform, orders and refunds flow in on their own with no code to write.
| Platform | How |
|---|---|
| Shopify | Connect your store; orders, refunds and per-creator discount codes sync automatically. |
| WooCommerce | Point a WooCommerce order webhook at our endpoint; we normalise the payload for you. |
| Anything else | The server-to-server API above, or the JavaScript pixel if you can add a script to your confirmation page. |
What happens after a conversion lands
The sale is attributed to a creator, commission is calculated against your campaign's rate and basis, and it becomes payable through the same payout rails as the rest of the campaign. Refunds reverse the commission. Everything is visible on the campaign's analytics page, and exportable as CSV.
Want help wiring this up?
Tell us what your checkout is and we'll tell you exactly which of the four methods to use.
Talk to us