---
title: Connecting an offer source
description: How to connect the affiliate platform your offers come from, and configure its postback so conversions reach PostbackX.
updated: 2026-07-30
order: 2
related: [/reference/postback, /guides/missing-conversions, /concepts/vocabulary]
---

An offer source is the affiliate platform your offers come from and that pays you.
Connecting one lets PostbackX receive its conversion postbacks, and send conversion
data back to it.

> Most of the industry calls this a "network". PostbackX does not, because that word
> also names ad placements and traffic partners. See
> [vocabulary](/concepts/vocabulary).

## Connect it

Go to [Offer Source](https://app.postbackx.com/offer-source) and either pick your
platform from the list, or add a custom source with its postback URL. The page has a
**How it works** walkthrough that replays the Everflow flow step by step.

Authentication, timeouts and retry behavior can be tuned per source once it exists.

## Configure the postback on their side

This is the part that happens in *their* dashboard, and the part that usually goes
wrong.

**Setting up an offer source postback** — What you do inside your offer source, once — and what each field means.

1. **Open your offer.** In your offer source, open the offer you are going to run and find its tracking link.
2. **Append the click id.** Add your click id macro to the tracking link. Without this, no conversion can ever be matched to a click.
3. **Open postback settings.** Switch to the offer’s postback tab. This is how the offer source tells PostbackX that a conversion happened.
4. **Paste the PostbackX URL.** Paste the postback URL. The click id parameter must read back the same slot you used above.
5. **Save.** Save. Conversions now arrive at PostbackX, matched to the click that caused them.

PostbackX gives you a URL shaped like this:

```
https://postbacks.postbackx.com/postback?click_id={click_id}&payout={payout}
```

You paste it into your offer source's postback or pixel settings, replacing the
`{...}` parts with **their** macros. Every platform names them differently — copy
them from their documentation.

The critical one is the click id. Whichever parameter carried `{click_id}` in your
offer URL is the one the postback must read back:

| In your offer URL you appended | So the postback must send |
| --- | --- |
| `&sub5={click_id}` | `click_id={sub5}` |
| `&sub1={click_id}` | `click_id={sub1}` |
| `&aff_sub={click_id}` | `click_id={aff_sub}` |

Get this pair wrong and postbacks arrive with an empty click id, which PostbackX
rejects with a `400`. Nothing else about your setup will look broken.

## Also send a transaction id

Optional, and worth doing:

```
https://postbacks.postbackx.com/postback?click_id={sub5}&payout={payout}&transaction_id={transaction_id}
```

Offer sources retry. The transaction id is how PostbackX tells a retry of one
conversion apart from two genuine conversions on the same click. Without it, the
two are indistinguishable and get counted once. See
[attribution](/concepts/attribution).

## Verify it

Do not wait for real traffic.

1. Click your own tracking link, and find the click id in
   [Clicks](https://app.postbackx.com/clicks).
2. Fire a postback by hand with that id:

```bash
curl -i "https://postbacks.postbackx.com/postback?click_id=REAL_CLICK_ID&payout=1.00&event_name=lead&transaction_id=manual-test-1"
```

A `200` with a `conversion_id` means PostbackX is ready and anything still missing
is on your offer source's side. Full parameter and response reference:
[postback parameters](/reference/postback).

If conversions still do not arrive once traffic is live, work through
[conversions are missing](/guides/missing-conversions).
