CJ Affiliate
CJ programme & coupon data - without owning the whole CJ client stack
Teams searching CJ API usually want offers, merchants, or links in product - not another bespoke OAuth + schema project. Feedico is not CJ; we are a normalization layer. Connect CJ Affiliate in the dashboard, then read firms and coupons through the same coupon API-style lists you use for Awin or Impact. Broader framing: affiliate network API, unified affiliate API.
Also unify
Who is this for?
Teams that monetize through CJ Affiliate and need the same engineering pattern as other affiliate sources.
How data flows
What you get with Feedico
Same list endpoints as every other source
Pagination and POST filters behave like your Awin or Impact jobs - no CJ-special case in your router.
Provider-aware rows
Filter by provider when a feature slice should only show CJ-derived coupons.
Less schema archaeology
Upstream field churn is mapped inside Feedico instead of scattered across your services.
Room for a native escape hatch
Keep CJ-first-party APIs for edge workflows; consume Feedico where multi-network UX wins.
Connecting CJ Affiliate: credentials, endpoints, and what syncs
Authentication: Bearer token (CJ Personal Access Token) on every request. Secrets are encrypted at rest and never returned by the API.
What you enter in the dashboard
- Requestor CID
- Your CJ company (publisher) ID.
- Website ID (PID)
- The property whose links and codes you want.
- Personal Access Token
- Created in the CJ developer portal; stored encrypted.
CJ Affiliate APIs Feedico calls
- Advertiser Lookup API v2
- Advertisers you have joined and their relationship status.
- Link Search API v3
- Links for your website ID, including promotion codes and validity dates.
| CJ Affiliate object | Feedico row |
|---|---|
| Joined advertiser | Firm (merchant) row, provider cj_affiliate |
| Link with a coupon code | Coupon row with code, title, startsAt / endsAt |
| Link click URL | offerUrl (tracked, only on your /me lists) |
- Only programmes you are approved for come back; Feedico never widens CJ access.
- Links without a promotion code stay out of the coded-coupon counts.
About CJ Affiliate
CJ (often referred to historically as Commission Junction) is one of the best-known global affiliate networks, connecting advertisers and publishers across retail, services, and travel. It traces its roots to the late 1990s U.S. performance marketing market and today sits within the Publicis Groupe media ecosystem - see the vendor’s own “About” and publisher pages for current leadership, footprint, and programme policies. www.cj.com/. CJ Affiliate is independent third-party software; trademarks belong to their owner. We summarise public positioning only - confirm policies and programme rules on the vendor site.
What we don't promise
We don't bypass CJ enrollment, network rules, or commission reporting. Feedico surfaces data your connected integration syncs - always defer to CJ's publisher documentation for programme-specific obligations.
How it works
- 1
Connect CJ Affiliate
Enter your Requestor CID, Website ID (PID) and Personal Access Token in the dashboard - only for programmes you are approved on.
- 2
Sync & normalize
Feedico calls Advertiser Lookup API v2 and Link Search API v3, then maps joined advertiser, link with a coupon code and link click url into normalized firm and coupon rows.
- 3
Call one API
Same list endpoints, pagination, and POST filters as your other connected providers.
- 4
Ship product
Websites, apps, extensions, or pipelines - one consumer path for every network.
Example row shape
Illustrative JSON - your integration uses customer OpenAPI field names. provider identifies the source (cj_affiliate).
{
"provider": "cj_affiliate",
"networkName": "Nike US",
"merchant": "Nike",
"title": "15% off your order",
"code": "SAVE15",
"offerUrl": "https://…"
}Get CJ Affiliate coupons with code
Once your CJ Affiliate account is connected, every coupon comes from one endpoint: POST /api/v1/me/coupons with "provider": "cj_affiliate". Leave providerout to get every connected network in the same format. Create a token under Account in the dashboard; each successful call counts toward your plan's monthly request quota.
curl -sS -X POST "https://api.feedico.io/api/v1/me/coupons" \
-H "Authorization: Bearer $FEEDICO_TOKEN" \
-H "Content-Type: application/json" \
-d '{"provider": "cj_affiliate", "page": 1, "pageSize": 50}'// Node 18+ (built-in fetch): every active CJ Affiliate coupon, page by page.
const token = process.env.FEEDICO_TOKEN;
async function fetchCoupons() {
const all = [];
for (let page = 1; ; page++) {
const res = await fetch("https://api.feedico.io/api/v1/me/coupons", {
method: "POST",
headers: { Authorization: `Bearer ${token}`, "Content-Type": "application/json" },
body: JSON.stringify({ provider: "cj_affiliate", page, pageSize: 200 }),
});
if (res.status === 429) throw new Error("Monthly API quota reached");
if (!res.ok) throw new Error(`HTTP ${res.status}`);
const data = await res.json();
all.push(...data.coupons);
if (page * data.pageSize >= data.recordCount) break;
}
return all;
}
fetchCoupons().then((coupons) => {
for (const c of coupons.filter((c) => c.code)) {
console.log(c.networkName, c.code, c.title, c.endsAt);
}
});# Python 3 + requests: every active CJ Affiliate coupon, page by page.
import os
import requests
URL = "https://api.feedico.io/api/v1/me/coupons"
HEADERS = {"Authorization": f"Bearer {os.environ['FEEDICO_TOKEN']}"}
def fetch_coupons():
page, rows = 1, []
while True:
r = requests.post(URL, headers=HEADERS, json={"provider": "cj_affiliate", "page": page, "pageSize": 200}, timeout=30)
r.raise_for_status()
data = r.json()
rows += data["coupons"]
if page * data["pageSize"] >= data["recordCount"]:
return rows
page += 1
for c in fetch_coupons():
if c.get("code"):
print(c["networkName"], c["code"], c["title"], c["endsAt"])<?php
// PHP 7.4+ with cURL: first page of active CJ Affiliate coupons.
$ch = curl_init("https://api.feedico.io/api/v1/me/coupons");
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => [
"Authorization: Bearer " . getenv("FEEDICO_TOKEN"),
"Content-Type: application/json",
],
CURLOPT_POSTFIELDS => json_encode(["provider" => "cj_affiliate", "page" => 1, "pageSize" => 50]),
]);
$data = json_decode(curl_exec($ch), true);
curl_close($ch);
foreach ($data["coupons"] as $c) {
if (!empty($c["code"])) {
echo "{$c["networkName"]} {$c["code"]} {$c["title"]}\n";
}
}Other filters: firmName (merchant name), q (search brand, title, or code), and includeInactive. Full schema in the API docs.
Native integration vs Feedico
| Topic | Via Feedico | One-off native client |
|---|---|---|
| Schema alongside other networks | ✅ Shared | ❌ Fork per vendor |
| Auth & secrets in your app | ✅ One Feedico token | ⚠️ Bearer token (CJ Personal Access Token) on every request. |
| CJ Affiliate APIs to integrate | Handled in the sync layer | 2 (Advertiser Lookup API v2; Link Search API v3) |
| Schema drift from vendor updates | Absorbed in mapping | ❌ Your on-call |
| When native API is still right | - | ✅ Exclusive fields / edge workflows |
Why pair CJ Affiliate with a unified layer?
CJ Affiliate alone needs 3 credentials and its own auth scheme (Bearer token (CJ Personal Access Token) on every request). Most growth teams do not stop at one flagship programme source. When CJ Affiliate is one leg of a multi-network roadmap, maintaining parallel DTOs burns velocity. Feedico lets you keep the relationships that matter while consolidating what your product consumes day to day.
Frequently asked questions
- Is Feedico the same company as CJ Affiliate?
- No. CJ Affiliate (Commission Junction) is an independent affiliate network. Feedico is a separate integration product: you connect your CJ credentials in our dashboard, and your application reads normalized rows through Feedico's API.
- Do I still need CJ programme approval?
- Yes. Feedico does not bypass CJ enrollment or publisher policies. You must be approved for the programmes you promote; we surface data from connections you legitimately authorize.
- Can I combine CJ with other networks in one codebase?
- Yes - that is the primary use case. Wire CJ alongside Awin, Impact, or other supported sources; filter by provider when a downstream system needs only CJ rows.
- When should I still use CJ's native APIs directly?
- When you need CJ-exclusive fields, deep reporting workflows, or account administration that only first-party endpoints expose. Feedico is optimized for multi-network catalogue and coupon consumption in your own product.
- How are API quotas handled?
- Successful Feedico list calls count against your plan quota (UTC calendar month). When exceeded, the API returns a documented error - design caching and backoff accordingly. See documentation and plan copy for caps.
Affiliate disclosure: some links on Feedico are affiliate links. We may earn a commission when you buy through them, at no extra cost to you. Publishers still need programme approval and compliant use at each affiliate network. Feedico provides the integration layer, not a substitute for network terms.