# Postbacks

> Record conversions from your offer sources with your postback URL, test it, and forward conversions to other tools.

This page shows you how to get conversions into Proferex with a postback: a call your offer source makes to your postback URL whenever one of your visitors converts.

It works in two steps. When Proferex sends a visitor to an offer, it adds the visitor's click ID to the Offer URL. When that visitor converts, your offer source calls your postback URL with the same click ID, and Proferex records the conversion against the right campaign, lander, and offer.

---

## Copy your postback URL

Go to **Tracker → Tracker Settings** and find the **Global Postback URL** card on the **General Settings** tab. Pick a domain in **Select Tracking Domain** and copy the **Postback URL**.

![The Global Postback URL card with track.yourbrand.com selected, the postback URL with its copy button, and the table of parameters from clickid to count](/images/docs/postbacks-parameters.jpg "Your postback URL and every parameter it accepts")

You have one postback URL for your whole account. It works for every offer and every offer source, so you set it up once per offer source. It looks like this:

```
https://track.mydomain.com/u/YOUR-ALIAS?clickid={clickid}&payout={payout}&currency={currency}&tid={tid}&kind={kind}&offerid={offerid}&s1={s1}&s2={s2}&s3={s3}&s4={s4}&s5={s5}
```

The two extra parameters at the bottom of the table, `send` and `count`, are not in the URL you copy. Add them only when you need them. See [Upsells and Rebills](/docs/tracker/upsells-and-rebills/index.md).

---

## Send the click ID to your offer source

Your offer source can only send the click ID back if it receives it first. Put `{clickid}` in your Offer URL, in the parameter your offer source uses for sub IDs:

```
https://trk.rewardhubs.com/c?offer_id=4821&aff_id=10937&aff_sub={clickid}
```

Proferex replaces `{clickid}` with the visitor's click ID when it sends them to the offer. See [Offer URL](/docs/tracker/offers/index.md#offer-url).

---

## Add the postback URL to your offer source

In your offer source's postback settings, paste your postback URL. Then replace each value in curly braces with your offer source's matching macro. For an offer source that sends the sub ID back as `{aff_sub}`, the payout as `{payout}`, and its transaction ID as `{transaction_id}`, the postback URL becomes:

```
https://track.mydomain.com/u/YOUR-ALIAS?clickid={aff_sub}&payout={payout}&tid={transaction_id}
```

Every offer source names its macros a little differently. These are the names you will usually find:

| What you need | Macro names offer sources often use |
|---|---|
| The click ID, for `clickid` | `{aff_sub}`, `{sub1}`, `{subid}`, `{s2}`, `{clickid}` |
| The payout, for `payout` | `{payout}`, `{sum}`, `{amount}`, `{commission}` |
| The currency, for `currency` | `{currency}` |
| The transaction ID, for `tid` | `{transaction_id}`, `{txid}`, `{order_id}`, `{conversion_id}` |

Use the macro your offer source lists for the same sub ID parameter you put `{clickid}` in. If you sent the click ID in `aff_sub`, the macro that sends it back is the one for `aff_sub`.

Only `clickid` is required. You can delete parameters your offer source cannot fill. A value your offer source leaves as `{something}` is ignored, so leaving one in does no harm.

Your offer source calls the postback URL as a normal web request (GET). Ask your affiliate manager if you cannot find the setting.

For what every parameter does, its default, and an example, see [Postback Parameters](/docs/tracker/postback-parameters/index.md).

---

## Test a postback

1. Open your campaign link yourself and click through to the offer, so a real click is recorded.
2. Go to **Tracker → Tracker Settings**, open **Click/Conversion Log**, and choose **Clicks**. Copy the **Click ID** of your test click.
3. Paste your postback URL into your browser with that click ID and a test payout, and open it:

```
https://track.mydomain.com/u/YOUR-ALIAS?clickid=YOUR-TEST-CLICK-ID&payout=0
```

A working postback shows `{"success":true}`. Switch the log to **Conversions** to see it straight away. It reaches your reports within a minute.

> **Tip:** A test conversion is a real conversion. Use `payout=0` so it doesn't add revenue, and test on a campaign you are not reporting on yet.

---

## What the postback answers

Your postback URL always answers, so you can see in your browser, or in your offer source's postback log, what happened to each call.

| Answer | What it means |
|---|---|
| `{"success":true}` | The conversion is recorded. |
| `Click ID is required` | The URL has no `clickid`, or your offer source left it as `{clickid}`. |
| `Invalid click ID` | The click ID is not one of your clicks. Check that your offer source sends back the value it received in the Offer URL. |
| `Transaction ID already processed for this click` | A conversion with this `tid` and this `kind` was already recorded for this click. The repeat is ignored. |
| `Conversion already processed for this click` | This click already has a conversion of this `kind`, and the postback has no `tid`. The repeat is ignored. |
| `Negative payouts are not accepted` | The payout is below zero, such as a chargeback. Nothing is recorded. |
| `Invalid postback endpoint` | The part after `/u/` is wrong. Copy the postback URL again. |

A repeat answer is not an error to fix. Offer sources retry postbacks, and the answer tells you Proferex already has that conversion.

---

## Check a postback in the logs

Two logs on **Tracker → Tracker Settings** show what happened to your conversions.

![The Click/Conversion Log tab with Conversions selected, and the Conversions Log listing conversions with their time, conversion ID, click ID, and offer](/images/docs/tracker-settings-conversions-log.jpg "Every conversion Proferex records appears here")

- **Click/Conversion Log**, with **Conversions** selected, lists every conversion your offer sources sent and Proferex recorded, newest first. **Event Type** shows whether it was a first conversion, an upsell, or a rebill. Click **View** on a row to see the payout, the currency it arrived in, the transaction ID, and the `s1` to `s5` values.
- **Postback Log** lists every postback Proferex sends out: to your traffic sources and to your piggyback URLs. Each row shows the URL that was called, its status, and the response code. Click **Retry** on a row to send it again.

If your offer source shows a conversion that never reached Proferex, add it by hand. See [Manual Conversions](/docs/tracker/manual-conversions/index.md).

---

## Forward conversions with piggyback postbacks

A piggyback postback sends each conversion on to another URL, such as another tracker or a partner who needs to know about your sales. Add one in the **Piggyback Postbacks** card on the **General Settings** tab of **Tracker Settings**. Click **Add Postback**.

![The Add Piggyback Postback dialog with the name Partner Postback, a postback URL using clickid, payout, and campid_short, the token buttons, Fire Timing set to After Conversion Registration, and Active turned on](/images/docs/postbacks-piggyback.jpg "Forward conversions to another URL")

| Field | What it does |
|---|---|
| **Name** | How the postback appears in your list. |
| **Postback URL** | The URL to call. Click a token button to add a value from the conversion. |
| **Fire Timing** | **After Conversion Registration** calls the URL only when Proferex records the conversion. **Before Conversion Registration** calls it for every postback your offer sources send, even ones Proferex does not record, such as duplicates. |
| **Active** | Turn it off to stop the postback without deleting it. |

The tokens you can use are `{clickid}`, `{payout}`, `{currency}`, `{tid}`, `{offerid}`, `{s1}` to `{s5}`, and the campaign's `{campid_short}` and `{campaign_slug}`. They carry the values from the incoming postback, with the offer's payout and currency filled in if the postback had none.

Piggyback postbacks fire for every conversion that arrives at your postback URL, from any offer source. Each one is tried once and not retried automatically.

To send conversions back to the traffic source the visitor came from, use the traffic source's own **Postback URL** instead. See [Postback URL](/docs/tracker/traffic-sources/index.md#postback-url).

---

## Next step

Add your postback URL to each offer source you work with, then send one test conversion before you start paying for traffic.
