Home
Offers & Tracking
Tracking Fundamentals
Understanding Transaction and Conversion IDs
Understanding Transaction and Conversion IDs

SERIES:

Understanding Transaction and Conversion IDs

Every click and conversion in Everflow has its own ID. Here's what each one means, when each is generated, and why deduping on the wrong one quietly breaks your reporting.

Overview

Every click and every conversion in Everflow gets its own ID. You'll see these IDs in API responses, postback payloads, webhooks, and reports. Knowing which is which keeps your attribution accurate and your dedupe logic correct.

The two identifiers

IdentifierRepresentsGenerated whentransaction_idOne click session — a single user's visit through a tracking link.A click is recorded (redirect, SDK EF.click, or server-side /clk call).conversion_idOne conversion event — an individual conversion or post-conversion event attributed to a click.A conversion fires (SDK EF.conversion, postback URL, or /networks/reporting/conversions/create).

Both IDs are 32-character hexadecimal strings (e.g. 868c44c49aad4c8d9091b7a2a74c716c).

How they relate

One transaction_id can be associated with multiple conversion_ids. A single click can lead to:

A base conversion — the primary revenue eventPost-conversion events — upsells, secondary actions, recurring billingStatus changes — approvals, rejections, on-hold transitions

Each one generates its own conversion_id, but they all share the same transaction_id because they're attributed to the same original click.

transaction_idabc123…
← one click
conversion_iddef456
base sale
conversion_idghi789
upsell
conversion_idjkl012
renewal
conversion_idmno345
second event

An everyday example

Imagine a shopper sees an Instagram post from one of your partners, taps the link, and lands on a sneaker store. That tap creates the transaction_id — let's call it abc123. Now follow what happens next:

📱
Instagram tap — one clickgenerates transaction_id abc123
Day 0
👟
$99 base sale
conversion_iddef456
Day 0
🧳
+$12
conversion_idghi789
Day 30
✉️
+$29
conversion_idjkl012
Day 60
🔄
+$15
conversion_idmno345
They buy a pair of sneakers right away — that fires conversion_id def456 (base sale).Mid-checkout, they add a pair of laces as an upsell — conversion_id ghi789.30 days later, they get an email and buy a sneaker-care kit — conversion_id jkl012.60 days later, their care-kit subscription auto-renews — conversion_id mno345.

Four conversions, four conversion_ids, all sharing the same transaction_id abc123 — because they all trace back to that one Instagram tap. The partner who drove the original click gets attribution for every one of them. For a deeper look at how to model multi-step flows like this, see Practical Funnels Using Additional Conversion Events.

Deduplication

Dedupe on conversion_id, not transaction_idIf you ingest Everflow conversion data into your own system, conversion_id is the unique row identifier. Using transaction_id as the dedup key will collapse legitimate post-conversion events, upsells, and recurring billing rows into one — you'll silently lose data.

SQL examples

SQL — correct (dedupe on conversion_id)
-- Correct
SELECT * FROM conversions WHERE conversion_id = 'def456...';
SQL — wrong (collapses upsells & post-events)
-- Wrong — will miss upsells and post-events
SELECT DISTINCT ON (transaction_id) * FROM conversions;

Getting a transaction ID

The transaction_id is only generated by a click. You can't derive or construct it from an offer ID + affiliate ID combination, and there's no API that returns a transaction ID for a given offer/affiliate pair without a real click happening.

How to obtain one

You obtain a transaction_id in one of these ways:

Click redirect — appended to your destination URL as ?transaction_id=... when you use the {transaction_id} macro in the offer's destination URL. See Introduction to Tracking Links & Click Tracking and Choosing A Click Tracking Type.JavaScript SDK — returned from EF.click({...}).then(id => ...). See Understanding Tracking With The JavaScript SDK for the conceptual overview, or the Click Tracking SDK reference for the API.Server-side click — returned in the JSON response from GET /clk?oid=...&affid=.... See Understanding Tracking With Server To Server Postbacks and the Server-Side Click Tracking reference.EF.getTransactionId(offer_id) — retrieves the most recent transaction ID stored in the user's browser for a given offer. See Click Tracking SDK → Helper Methods.
Transaction IDs don't regenerateOnce a click is recorded, its transaction_id is the identifier for that click forever. Firing the same conversion twice with the same transaction_id + event_id combination may be rejected as a duplicate — this depends on the offer's allow_duplicate_conversion setting.

Using the transaction ID on conversions

When you fire a conversion, passing transaction_id explicitly is the most reliable form of attribution:

JavaScript SDK example

JavaScript SDK
// JavaScript SDK
EF.conversion({
  offer_id: 1,
  transaction_id: EF.getTransactionId(1),
  amount: 49.99
});

Server-side postback example

Server-side postback (curl)
# Server-side postback
curl "https://www.your-tracking-domain.com/?nid=1&transaction_id=abc123...&event_id=2"
Without a transaction_idIf you omit transaction_id, the SDK falls back to cookie-based attribution (first-party, then third-party on the tracking domain). This is less reliable, especially on browsers with ITP restrictions.

For a full conceptual overview of all three ways to fire conversions, see Introduction to Conversion Tracking Methods, Introduction to Conversion Events, and How to Set Up Conversion Events. To verify your postbacks are firing correctly, walk through How To Test Partner Postbacks.

Whitelist Everflow's server IPsIf your firewall blocks our postback servers, conversions silently fail with no error message — revenue bleeds invisibly. See Everflow Server IPs for the list to whitelist.

Looking up events for a transaction

To see every conversion and post-conversion event attached to a single transaction_id, use the lookup endpoint:

Lookup endpoint
GET /v1/networks/reporting/conversions/transactions/{transaction_id}

This returns the full tree of conversion events that share the transaction ID — useful for debugging attribution issues or auditing upsell flows.

Finding IDs in the UI

Most of the time, you'll spot a transaction_id or conversion_id in a report first, then come here to figure out what to do with it. Here's where each ID lives in Core Platform.

Investigator — trace one transaction → full event tree

Investigator is the purpose-built UI for what we just covered with the lookup endpoint: paste a transaction_id in, see every conversion and post-conversion event linked to that one click. It's the fastest way to debug an attribution question.

From the left rail, open Investigator, click Add Investigation, set the Target to Transaction ID, and paste the IDs you want to inspect into the Suspects field.

Investigator Add Investigation form with Target set to Transaction ID

The summary view lists every Click Transaction tied to your suspect IDs, with Offer, Partner, and manager context for each. From there you can click into a row to see the full breakdown:

Investigator results summary table

The detail view shows the click and every conversion event attached to it — a base sale, any upsells, and any partner postbacks that fired. Each row includes its transaction_id and conversion_id so you can cross-reference back to your own data.

Investigator detail view showing Click Transactions, Conversion Events, and Partner Postbacks for one transaction ID

Read more in How To Use Investigator.

Conversion Report — browse all conversions

Each row in Conversion Report is one conversion event — so each row has its own conversion_id plus the parent transaction_id. Filter by date, offer, partner, status, or any sub parameter to narrow down what you're looking for.

Conversion Report showing Transaction ID and Conversion ID columns side-by-side

If the Transaction ID or Conversion ID columns aren't showing, open the table-actions menu (the three dots in the top right of the table) and toggle them on under Column Customization. Read more in Conversion Report.

Click Report — browse all clicks

Click Report is the other side of the coin: each row is one click, so each row has one transaction_id. Useful when you have a partial transaction ID and need the full one, or when you're debugging which clicks fired without converting.

The Transaction ID column is hidden by default. Open the table-actions menu, choose Column Customization, and toggle Transaction ID on:

Click Report Column Customization modal with Transaction ID toggle highlighted

Once enabled, the column shows the full ID for every logged click:

Click Report with Transaction ID column visible in the table

Read more in Click Report.

Filtering by ID

Pro-Tip: search any report by IDPaste a 32-char hex ID into a report's search box to jump straight to it

Any report with a transaction_id or conversion_id column supports searching by full ID — paste the 32-char value into the table's search box. Postback Reports also include transaction_id in the URL payload, which is handy when you're debugging why a specific conversion fired (or didn't).

For a deeper look at the funnel-style flows that share a transaction_id, see Funnel Report — it visualizes how one click chains through multiple events (the same shape as the sneaker example above).

Summary

transaction_id = one click. Shared across all conversions attributed to that click.conversion_id = one conversion event. Unique per row.Dedupe on conversion_id.Transaction IDs are only generated at click time — not derivable from offer + affiliate alone.Pass transaction_id explicitly on conversions for maximum attribution reliability.

Related help desk articles

If you want the full picture on how clicks, conversions, and tracking methods fit together, these are the next reads:

Tracking fundamentals

Introduction To Tracking With Everflow — domains, links, and the basics.Step-By-Step Guide To Implement Tracking — the full implementation walkthrough.Tracking Links & Click Tracking (Redirect + Direct) — how the two link types differ.How To Enable Click-to-Conversion Time — control attribution windows to prevent late-claim fraud.Unique Session Identifier For Duplicate Clicks — managing duplicate clicks on the same session.

Conversion events & funnels

Introduction To Conversion Events — base vs additional events.Practical Funnels Using Additional Conversion Events — the multi-step modelling pattern (the same shape as the sneaker example above).How To Set Up Conversion Events — configure your base + additional events.Naming Conventions For Additional Conversion Events — keep your event names readable.

Conversion tracking methods

Introduction To Conversion Tracking Methods — S2S vs SDK vs HTML pixel side-by-side.Understanding Tracking With S2S Postbacks — cookie-free attribution via transaction IDs.Understanding Tracking With The JavaScript SDK — client-side tracking deep-dive.Introduction To Partner & Advertiser Postbacks — outbound notifications when conversions fire.Everflow Server IPs — whitelist these to prevent the silent blackout.

Technical reference

If you're building an integration that records clicks or fires conversions, head to the developer docs for full SDK references, request/response shapes, and code samples.

SDK references

Endpoint references

Endpoint references for transaction-aware conversion APIs:

Get Events Per Transaction — the lookup endpoint that returns every conversion sharing a transaction_id.Create Conversions with Transaction IDs — bulk-import conversions when you already have the click's transaction_id.Create Conversions without Transaction IDs — for conversions where the click ID isn't available (cookie-based fallback).API Quick Start — first API call in under 2 minutes.