Feedico
CJ Affiliate (favicon)

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.
How CJ Affiliate data maps to Feedico rows
CJ Affiliate objectFeedico row
Joined advertiserFirm (merchant) row, provider cj_affiliate
Link with a coupon codeCoupon row with code, title, startsAt / endsAt
Link click URLofferUrl (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. 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. 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. 3

    Call one API

    Same list endpoints, pagination, and POST filters as your other connected providers.

  4. 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
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.js
// 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
# 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
// 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

CJ Affiliate data: Feedico vs bespoke per-network client
TopicVia FeedicoOne-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 integrateHandled in the sync layer2 (Advertiser Lookup API v2; Link Search API v3)
Schema drift from vendor updatesAbsorbed 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.

Related pages

Concept & comparisons