Link cloaks
Clean /go/:slug URLs on your own domain that 302 to the affiliate destination. Better deliverability than raw affiliate links, and you can swap destinations without touching published content. Plan-gated: link_cloaking.
| Method | Endpoint | Description |
| GET | /sites/:id/cloaks | List cloaks with click counts |
| POST | /sites/:id/cloaks | Create cloak |
| POST | /sites/:id/cloaks/from-offers | One call → a cloak per offer, using each offer's affiliate URL |
| DELETE | /cloaks/:cid | Delete cloak |
| Field | Type | Description |
slug required | string | Public path: https://your-site.com/go/:slug. |
destination_url required | string | Where the redirect lands. |
offer_id | uuid | Link to an offer for per-offer click attribution. |
Outbound postbacks
Server-to-server calls to your tracker when events happen. URLs support macros that we expand per click. Plan-gated: postbacks.
| Method | Endpoint | Description |
| GET | /sites/:id/postbacks | List postbacks |
| POST | /sites/:id/postbacks | Create postback |
| DELETE | /postbacks/:pid | Delete |
| Field | Type | Description |
event required | string | Trigger — currently click (every tracked outbound click). |
url required | string | Endpoint we call. Macros: {clickid}, {offer}, {site}. |
method | string | GET (default) | POST. |
Forward clicks to a Voluum-style tracker
curl -X POST $API/sites/$SITE_ID/postbacks \
-H "Authorization: Bearer $KEY" -H 'Content-Type: application/json' \
-d '{"event":"click","url":"https://tracker.example.com/click?clickid={clickid}&offer={offer}"}'
Tracking pixels
Snippet injection into every public page — the DB-backed sibling of settings JavaScript injection. Use whichever fits your workflow; both render.
| Method | Endpoint | Description |
| GET | /sites/:id/pixels | List pixels |
| POST | /sites/:id/pixels | Add pixel |
| DELETE | /sites/:id/pixels/:pid | Remove pixel |
| Field | Type | Description |
placement required | string | header | body | footer — where the snippet lands. |
code required | string | The snippet, injected verbatim (that's its job). |
Comparison tables
Side-by-side offer comparisons — the highest-converting format in the industry — rendered at /compare/:slug/. Plan-gated: comparison_tables.
| Method | Endpoint | Description |
| GET | /sites/:id/compare | List tables |
| POST | /sites/:id/compare | Create table |
| PATCH | /compare/:cid | Update |
| DELETE | /compare/:cid | Delete |
| Field | Type | Description |
name required | string | Table name, e.g. "Best VPNs 2026 — compared". |
slug | string | Empty → generated from name. |
intro | string (HTML) | Lead-in paragraph above the table. |
offer_ids | uuid[] | Compared offers, in display order. |
Search-query pages
Programmatic SEO: landing pages targeting specific search phrases ("best vpn for netflix"), each with its own intro copy and hand-picked offers, at /q/:slug/.
| Method | Endpoint | Description |
| GET | /sites/:id/search-queries | List query pages |
| POST | /sites/:id/search-queries | Create |
| PATCH | /search-queries/:qid | Update |
| DELETE | /search-queries/:qid | Delete |
| Field | Type | Description |
title required | string | Page title — the search phrase, natural-language style. |
slug | string | Empty → generated from title. |
description | string (HTML) | Intro copy above the offer list. |
offer_ids | uuid[] | Offers featured on the page. |