Commerce data API · Infrastructure hub
Commerce Data API: merchant, product, and offer infrastructure in one stack
Searching for a commerce data API or commerce data infrastructure for affiliates? Feedico ties three object APIs into one story: merchants (Firms), products (SKU catalogue), and offers/coupons. One Bearer token covers account /me/* feeds and /catalog/* discovery. Catalog never returns offerUrl; account /me includes tracked links when available. Monthly API caps apply per plan.
Definition: commerce data as three objects
Commerce data here means the catalogue aggregation slice of an affiliate stack: who you can promote (merchant), what SKUs exist (product), and which promotions apply (offer). It is not a click tracker or payout ledger. Those belong in your attribution product. See the platform data model and schema normalization for entity keys and field mapping.
Three objects, one API: merchants, products, offers
- Merchants
/me/networks · /catalog/networks
Firm entity: provider, externalMerchantKey, displayName, couponCount. Account rows vs catalog display-name dedupe.
- Products
/me/products · /catalog/products
Full catalogue access: title, brand, sku, price, salePrice, images, availability. Distinct from deal merchandising.
- Offers (coupons)
/me/coupons · /catalog/coupons
Coded coupons and title-only / auto-applied offers. code null vs present, eligibility windows, offerUrl.
Production coupon listing playbooks: /coupon-api. Sale merchandising: /product-deal-feed-api. Global discovery scale: global coupon catalog.
Architecture: sync → normalize → serve
- Connect network credentials for programmes you are approved to promote.
- Sync adapters pull merchants, coupons, and optional product feeds on a schedule.
- Normalize into Firm, Coupon, and Product rows with stable camelCase fields.
- Serve /me to your apps with tracked offerUrl when available.
- Serve /catalog for cross-tenant discovery without sharing tracking links.
[ CJ / Awin / Impact / Admitad / … ]
|
sync adapters
|
+---------+---------+
| | |
Firm Coupon Product
(merchant) (offer) (SKU)
| | |
+----+----+----+----+
|
Bearer REST JSON
|
+----+----+
| |
/me/* /catalog/*
(tracked) (discovery, no offerUrl)
|
Your deal site / cashback / AI agent / ETLEndpoints at a glance
| Object | Account | Catalog |
|---|---|---|
| Merchant | /api/v1/me/networks | /api/v1/catalog/networks |
| Offer | /api/v1/me/coupons | /api/v1/catalog/coupons |
| Product | /api/v1/me/products | /api/v1/catalog/products |
Full machine-readable contract: openapi-customer.yaml. Human docs: /docs.
Example calls across the three objects
Typical ETL order: networks first (merchant parents), then coupons and products. Shared examples from the commerce data cluster:
curl -sS -X POST "https://api.feedico.io/api/v1/me/networks" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"page":1,"pageSize":50}'{
"ok": true,
"recordCount": 2,
"page": 1,
"pageSize": 50,
"networks": [
{
"id": "net_1001",
"provider": "cj_affiliate",
"displayName": "Example Outdoor Co",
"externalMerchantKey": "4210991",
"merchantWebsiteUrl": "https://www.example-outdoor.com",
"status": "active",
"couponCount": 14,
"fetchedAt": "2026-09-07T12:00:00.000Z"
},
{
"id": "net_1002",
"provider": "awin_affiliate",
"displayName": "Example Beauty EU",
"externalMerchantKey": "18822",
"merchantWebsiteUrl": "https://www.example-beauty.eu",
"status": "active",
"couponCount": 9,
"fetchedAt": "2026-09-07T11:55:00.000Z"
}
],
"availableProviders": ["cj_affiliate", "awin_affiliate"]
}curl -sS -X POST "https://api.feedico.io/api/v1/me/coupons" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"page":1,"pageSize":50,"country":"US"}'{
"ok": true,
"recordCount": 2,
"page": 1,
"pageSize": 50,
"coupons": [
{
"id": "cpn_9001",
"provider": "cj_affiliate",
"firmName": "Example Outdoor Co",
"title": "15% off sitewide",
"code": "OUTDOOR15",
"startsAt": "2026-09-01T00:00:00.000Z",
"endsAt": "2026-09-30T23:59:59.000Z",
"offerUrl": "https://www.example-outdoor.com/?sid=pub",
"status": "active"
},
{
"id": "cpn_9002",
"provider": "cj_affiliate",
"firmName": "Example Outdoor Co",
"title": "Free shipping over $75 (auto-applied)",
"code": null,
"startsAt": null,
"endsAt": "2026-09-15T23:59:59.000Z",
"offerUrl": "https://www.example-outdoor.com/shipping?sid=pub",
"status": "active"
}
],
"availableProviders": ["cj_affiliate"]
}curl -sS -X POST "https://api.feedico.io/api/v1/me/products" \
-H "Authorization: Bearer YOUR_TOKEN" \
-H "Content-Type: application/json" \
-d '{"page":1,"pageSize":50,"provider":"cj_affiliate","country":"US"}'{
"ok": true,
"recordCount": 1,
"page": 1,
"pageSize": 50,
"nextCursor": "4790020",
"products": [
{
"id": "4790020",
"provider": "cj_affiliate",
"firmName": "Example Outdoor Co",
"externalProductId": "SKU-ROPE-30",
"title": "30m climbing rope",
"brand": "ExampleBrand",
"sku": "SKU-ROPE-30",
"price": 129.0,
"salePrice": 99.0,
"discountPercentage": 23.3,
"currency": "USD",
"availability": "in stock",
"offerUrl": "https://www.example-outdoor.com/p/rope-30?sid=pub",
"images": [
{ "url": "https://cdn.example.com/rope.jpg", "sortOrder": 0, "isPrimary": true }
],
"status": "active",
"fetchedAt": "2026-09-07T10:22:20.000Z"
}
],
"availableProviders": ["cj_affiliate"]
}Merchants: account-scoped firms vs catalog display-name dedupe
/me/networks (tenant)
- One row per (provider, externalMerchantKey)
- Reflects programmes you are approved to promote
- couponCount scoped to your synced promos
- Join coupons/products with your own tracking context
/catalog/networks (global)
- Merchants merged by displayName across tenants
- providers[] may list multiple upstream sources
- No offerUrl or other publishers' tracking links
- Pair with the coupon API for discovery
Offers: code present vs code null
code present
Shopper-typed voucher. Show a copy-code control, title, and outbound offerUrl on /me.
code: null
Title-only or auto-applied offer (free shipping, sitewide sale messaging). Emphasize the title and CTA; do not invent a fake code.
Field glossary (cross-object)
| Concept | Where | Notes |
|---|---|---|
| displayName / firmName | Merchant / children | Store label for UI and joins |
| provider | All objects | Network slug filter and warehouse partition |
| externalMerchantKey | Merchant | Natural key with provider on /me |
| code / title / windows | Offer | Coded vs auto-applied; startsAt/endsAt |
| offerUrl | /me only | Tracked link; omitted on all catalog surfaces |
| title / brand / sku | Product | Catalogue identity fields |
| price / salePrice / images | Product | Merchandising and cards |
| couponCount | Merchant | Promo density for directories |
Use cases
Deal sites
Merchant directories, coded offer listings, and optional sale SKU grids from one token.
Cashback & loyalty
Store indexes from firms; attach your tracking; keep catalog for discovery research.
AI agents
Single JSON contract across networks for merchant, product, and offer answers.
ETL & warehouses
Page /me lists into Postgres or a lake; upsert on provider + external keys.
When to land here vs a sibling page
Start on this hub for architecture and buyer overview. Deep-link into object pages for implementation details. Prefer /unified-affiliate-api for product-level positioning across Feedico, and /coupon-api when you are shipping coupon listing UX tomorrow.
Commerce Data API FAQ
- What is the Commerce Data API?
- It is Feedico's hub narrative for commerce data infrastructure: merchants (Firms), products (SKU catalogue), and offers/coupons in one membership-backed REST surface. Each object has its own section on this page.
- Which endpoints power the hub?
- Account: POST /api/v1/me/networks, /me/coupons, /me/products. Catalog discovery: POST /api/v1/catalog/networks, /catalog/coupons, /catalog/products. Catalog omits offerUrl; /me includes tracked offerUrl when available.
- Who should use this page vs the object APIs?
- Use this page for architecture, ETL planning, and buyer education. Use Merchant, Product, and Offer pages when you need field glossaries and object-specific examples. Use /coupon-api for production coupon listing playbooks.
- Can deal sites and cashback apps share the same feed?
- Yes. Deal sites lean on offers and optional sale products; cashback apps often need merchant directories plus tracked links from /me. Both consume the same normalized JSON with different UI filters.
- How do AI agents fit in?
- Agents authenticate with a Bearer token, page the three object lists, and answer merchant/product/offer questions without per-network adapters. Pair with the unified affiliate API pillar for product positioning.
- What about monthly API caps?
- Every successful list call counts toward your plan's UTC monthly request cap. See /pricing. Design warehouse ETL with sensible pageSize and caching so you do not burn quota on redundant full pulls.
- Is catalog suitable for live click-out?
- No. Catalog is discovery only (no offerUrl). For tracked clicks use /me after connecting your own programme credentials, or attach your own compliant affiliate links to catalog metadata.
- Where is the OpenAPI and entity model?
- openapi-customer.yaml documents the REST contract. The affiliate marketing network data model and schema normalization guides explain Firm, Coupon, Product relationships and field mapping.
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.
Ready to try it on your own networks?
Free plan, no credit card. Or start from the ready catalog with the Partner Program.