Engineering · Platform entity schema
Affiliate platform data model: entity map and ERD
Updated September 14, 2026 · ~14 min read · Reference guide
A practical entity map for affiliate network platforms: what belongs in a click tracker versus a catalogue API. Covers merchants, coupons, product feeds, webhooks, payouts, and creatives, plus the Feedico Firm/Coupon schema with ERD, JSON examples, and OpenAPI. Deep dives: product feed & creative library · webhook & postback model.
Two valid platform data models (pick the section you need)
Model A · Click-tracking & finance
Affiliate, Click, Conversion, Commission, Payout. Used by trackers and network reporting APIs.
Tracking links, conversions & payouts →Model B · Catalogue aggregation (Feedico)
Account, Integration, Firm, Coupon, Product feed rows. One JSON contract across CJ, Awin, Impact.
Feedico entity catalog & JSON →Most production stacks use both: a catalogue API for merchants and promos, plus a tracker for clicks and payouts. Jump to webhooks & postbacks, product feeds & creatives, or the full entity map.
Need conversion, payout, or creative tables?
See tracking, conversions & payouts and the full platform entity map.
Building a multi-network coupon or deals API?
Jump to Feedico entity catalog, JSON examples, and OpenAPI.
Full affiliate platform entity checklist
- Account, Integration, Provider (network connection)
- Firm / partner merchant programme
- Coupon, promo offer, tracked link
- Product feed, SKU catalog, deep-link product lists
- Webhook delivery, conversion postback events
- Tracking link, click id, attribution
- Payout, settlement, commission ledger
- Creative library, banner assets, promotional media
- Sync snapshots and normalized JSON (Feedico catalogue layer)
Full affiliate platform entity map
Use this table when you need a full affiliate platform entity checklist: webhooks, product feeds, tracking links, payouts, and creative libraries. The Feedico column shows what this API normalizes for catalogue and sync workloads.
| Entity | Feedico | Typical tracker | Network native | Notes |
|---|---|---|---|---|
| Account / publisher identity | Yes | Yes | Yes | Tenant, API token, plan quotas |
| Partner / merchant programme | Yes | Metadata | Yes | First-class Firm row in Feedico |
| Integration / network connection | Yes | Partial | N/A | Credentials and sync state per provider |
| Coupon / promo offer | Yes | As campaign | Partial | Normalized catalogue row with offerUrl |
| Product feed / SKU catalog | Optional | Rare | Yes | Optional Product rows when feeds sync |
| Product list / deep-link rules | Yes | Rare | Partial | Customer-defined catalog filters |
| Webhook / delta events | Yes | Sometimes | Sometimes | affiliate.delta outbound deliveries |
| Conversion / postback | No | Yes | Yes | Owned by your tracker or network reporting |
| Click / tracking link ledger | No | Yes | Yes | Immutable click events, not in catalogue API |
| Payout / settlement | No | Yes | Yes | Financial commission batches |
| Creative / banner library | No | Yes | Yes | Network promotional asset catalogs |
| Sync snapshot cache | Yes | No | Internal | Programme metadata between sync passes |
Core entity relationships (catalogue aggregation)
Webhook, conversion postback & delta event entities
Architects often conflate inbound conversion postbacks with outbound catalogue webhooks. Trackers ingest commission callbacks; catalogue platforms emit change notifications when merchant or promo rows update. Full guide: webhook & conversion postback data model.
| Entity | Typical tracker / network | Feedico |
|---|---|---|
| Inbound conversion postback | HTTP callback with click id + order id | Not stored (use tracker) |
| Outbound webhook / delta | Optional network hooks | affiliate.delta on catalogue changes |
| Webhook subscription | Per advertiser URL config | Dashboard webhook settings |
| Event payload | transaction_id, commission, status | upserted/inactivated firm & coupon ids |
Implementation guide: Webhook delta sync.
Tracking links, conversions & payout entities
Queries mentioning partners tracking links conversions payouts map to the click-tracking schema. These tables sit in affiliate trackers (Post Affiliate Pro, Everflow) or network reporting APIs, not in a catalogue aggregation API.
| Entity | Primary fields | Feedico catalogue API |
|---|---|---|
| Tracking link / offer URL | sub_id, campaign_id, destination URL | offerUrl on tenant coupons only |
| Click event | click_id, ip, timestamp, referrer | Not modeled |
| Conversion | order_value, commission, status | Not modeled |
| Partner / affiliate | publisher_id, tier, payment details | Account (tenant) only |
| Payout / settlement | batch_id, amount, currency, period | Not modeled |
Product feed, SKU, deep linking & creative asset entities
Product feed rows (SKU, price, deep link) and creative libraries (banner sizes, asset URLs) are separate tables in most networks. Feedico normalizes optional product rows; banner creatives stay in the network UI. Deep dive: product feed, SKU deep links & banner sizes.
| Entity | Network / tracker | Feedico |
|---|---|---|
| Product feed / SKU row | sku, gtin, price, image_url, deep_link | Product + images[] (optional sync) |
| Product list / filter | category, brand, price band rules | Customer catalog list filters |
| Creative / banner asset | width, height, asset_url, landing page | Not modeled (network UI) |
| Deep link rule | product_id → tracked URL template | merchantUrl + tenant offerUrl |
Product API fields: REST API product page · Global catalogue API.
Catalogue aggregation vs click-tracking schemas
Both are valid “affiliate platform” data models. They solve different problems. Tracking platforms record referral traffic and commission math; aggregation platforms normalize merchant programmes and promotions from CJ, Awin, Impact, and peers into one JSON contract your product consumes.
| Entity | Click-tracking platform | Feedico (catalogue API) |
|---|---|---|
| Affiliate / Publisher | Core identity | Account (tenant) |
| Campaign / Offer | Tracked link config | Coupon + Firm |
| Click | Immutable event | Not modeled (your product owns attribution) |
| Conversion | Commission trigger | Not modeled |
| Payout / Settlement | Financial ledger | Not modeled |
| Merchant programme | Metadata on offer | Firm (first-class row) |
| Network integration | Postback URL config | Integration + Provider |
If you operate both surfaces, a deals site plus internal attribution, treat Feedico as the catalogue source of truth and keep clicks and conversions in your tracker or network reporting. See the unified affiliate API pillar for product positioning.
Feedico entity catalog
These are the platform entities exposed (directly or indirectly) through customer APIs and dashboard integrations. Internal admin tables are omitted. This is the publisher-facing ontology for the catalogue layer highlighted in the entity map above.
| Entity | Role | Natural key | Surface |
|---|---|---|---|
| Account (tenant) | Publisher customer, API token, plan quotas, connected integrations | appUserId | Implicit via Bearer token on /api/v1/me/* |
| Integration | Authorized connection to one affiliate network (credentials + sync state) | (accountId, provider) | Dashboard → Integrations |
| Provider | Upstream network slug attached to every normalized row | provider slug | cj_affiliate, awin_affiliate, impact_com, … |
| Firm | Merchant / programme you are approved to promote | (provider, externalMerchantKey) | POST /api/v1/me/networks |
| Coupon | Coded promo, percentage title, or tracked link offer | (provider, externalCouponId) | POST /api/v1/me/coupons |
| Product | Optional SKU/catalog rows when product feeds are synced | (provider, externalProductId) | Catalog / product list APIs |
| Product list | Customer-defined filter over synced products for a property | listId | Dashboard catalog lists |
| Sync snapshot | Point-in-time upstream entity cache (e.g. Awin programme snapshots) | provider + entity type + snapshot id | Internal sync layer |
| Webhook delivery | Outbound affiliate.delta (or related) event to your endpoint | eventId / delivery id | Webhook subscription settings |
Relationships & entity diagram (ERD)
An Account owns many Integrations (one per connected network). Each Integration writes Firms and Coupons into tenant-scoped tables during sync. Coupons always reference a parent Firm via networkId. Product rows and Product lists are optional when catalog feeds are enabled. Webhook subscriptions emit delta events when eligible plans expose them.
erDiagram
ACCOUNT ||--o{ INTEGRATION : owns
INTEGRATION }o--|| PROVIDER : connects
INTEGRATION ||--o{ FIRM : syncs
FIRM ||--o{ COUPON : exposes
FIRM ||--o{ PRODUCT : optional
INTEGRATION ||--o{ WEBHOOK_DELIVERY : emits
ACCOUNT {
string appUserId
}
FIRM {
string provider
string externalMerchantKey
}
COUPON {
string networkId
string externalCouponId
string code
}Firm & coupon JSON shapes
Customer list endpoints return these normalized objects regardless of upstream network. Field-by-field CJ / Awin / Impact mapping lives in the schema normalization deep dive.
{
"id": "88341",
"displayName": "Example Retailer EU",
"provider": "awin_affiliate",
"externalMerchantKey": "12345",
"merchantWebsiteUrl": "https://example-retailer.eu",
"status": "active",
"couponCount": 12,
"lastSyncedAt": "2026-08-10T18:04:00.000Z",
"extra": { /* upstream programme fields */ }
}{
"id": "1849201",
"networkId": "88341",
"networkName": "Example Retailer EU",
"provider": "awin_affiliate",
"externalMerchantKey": "12345",
"externalCouponId": "promo-998877",
"code": "SPRING15",
"title": "15% off sitewide",
"startsAt": "2026-03-01T00:00:00.000Z",
"endsAt": "2026-06-30T23:59:59.000Z",
"offerUrl": "https://…/tracked-offer",
"status": "active",
"extra": { /* voucher type, region flags, native enums */ }
}Dedup keys & lifecycle
- Firms: upsert on
(provider, externalMerchantKey) - Coupons: upsert on
(provider, externalCouponId)within the tenant - Join:
coupon.networkId → firm.id - Soft delete: rows missing from the latest sync pass flip to
status: inactive. Warehouses archive instead of hard-deleting history - Provider filter: every list request can scope to one upstream network via the
providerslug
Sync pipeline & webhooks
Scheduled sync jobs pull advertiser programmes and promotions using dashboard credentials. Adapters map upstream payloads into Firm and Coupon rows. Some networks (notably Awin) also maintain entity snapshots for programme metadata between full sync passes. For near-real-time updates, pair batch ETL with webhook delta sync when your plan exposes affiliate.delta events. Reference worker patterns are in the coupon warehouse ETL guide.
Object APIs for Firm, Product, and Offer
This page is the platform entity map. When you need endpoint tables, curl samples, and field glossaries for the catalogue objects Feedico serves over REST, open the object landings:
- Merchant data API for Firm / programme directories (
/me/networks,/catalog/networks). - Product data API for SKU catalogue access (
/me/products,/catalog/products). - Offer data API for coded and title-only promotions, alongside the production Coupon API listing contract.
- Commerce data API for the infrastructure story that ties merchant + product + offer together.
Field mapping from CJ, Awin, and Impact into these shapes is covered in schema normalization.
OpenAPI & machine-readable schema
The entity model above maps to the customer REST contract documented in openapi-customer.yaml and the interactive explorer linked from REST API (product). Import the spec into Postman or codegen tools to generate typed clients against Firm and Coupon list endpoints.
Frequently asked questions
- What entities does an affiliate marketing network platform need?
- A full-stack affiliate platform spans catalogue rows (merchants, coupons, product feeds), event surfaces (webhooks, conversion postbacks, tracking links), finance (payouts), and creative assets (banners). Use the platform entity map on this page for the complete checklist. Feedico implements the catalogue aggregation slice: Account, Integration, Provider, Firm, Coupon, optional Product rows, Sync snapshots, and Webhook deliveries.
- What is the affiliate marketing webhook, conversion postback, and product feed data model?
- Industry trackers model Webhook/postback as inbound conversion events tied to click ids; product feeds as SKU catalogs with deep links; creative assets as banner libraries. Feedico models outbound affiliate.delta webhooks when catalogue rows change, optional Product feed rows from CJ and peers, and does not store inbound conversion postbacks (those stay in your tracker or network reporting). See the webhook/postback and product feed sections on this page.
- How are affiliate tracking links, conversions, and payouts modeled?
- Click-tracking platforms use Click (immutable event), Conversion (commission trigger), and Payout/settlement ledger tables. Affiliate networks expose similar reporting APIs. Feedico does not duplicate those ledgers: it supplies normalized Firm and Coupon catalogue rows so your tracker or storefront can attach tracking links and postbacks separately.
- How do Firm and Coupon relate in Feedico's schema?
- Every Coupon references a Firm via networkId (the internal firm row id). Firms deduplicate on (provider, externalMerchantKey); coupons on (provider, externalCouponId). One firm can expose many coupons; coupons inherit networkName and merchant context from the parent firm row.
- Is this the same as an affiliate tracking data model?
- No. Generic affiliate tracker schemas center on referral links, click ids, conversion postbacks, and payout batches. Feedico is a multi-network aggregation layer: sync upstream programme and promotion catalogues, normalize field names, and expose one REST contract. Your product still owns attribution and checkout if you run a tracker separately.
- Where do network-native fields live?
- Top-level customer API fields are stable camelCase (provider, externalMerchantKey, code, startsAt, etc.). Upstream-only enums, regional flags, and vendor-specific metadata are preserved in an extra JSON object on each row so warehouses can promote fields later without re-syncing history.
- What are the primary keys for warehouse upserts?
- Use composite natural keys: (provider, externalMerchantKey) for firms and (provider, externalCouponId) for coupons, scoped to your tenant. Feedico id is a stable internal numeric string for CMS foreign keys; external keys track upstream identity across sync runs.
- Where should I read field-by-field CJ/Awin/Impact mapping?
- This page is the platform entity overview. For per-network column mapping, provider tags, pagination normalization, and the extra JSON escape hatch, read the schema normalization deep dive linked below.
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
Ready to try it on your own networks?
Free plan, no credit card. Or start from the ready catalog with the Partner Program.