Skip to main content
The GET /v1/merchants endpoint returns a paginated list of merchants from across all affiliate networks. A single brand may appear on multiple rows when it is carried by more than one network — each row represents that merchant through a specific network.
Five networks require additional credentials before their products will sync: Adservice, Belboon, Effiliation, Partnerize, and The Affiliate Gateway. Without these credentials, the API returns 422 and products remain unavailable. Configure them under Pools → Sources on the relevant pool.

Endpoint

Query parameters

Pass extended=1 on every request. Whether the extended fields come back by default depends on your account, so don’t assume they will. extended=1 is what returns providers, canonical, categories, countries, currencies, supports, supports_deeplinking, cookie_duration, home_url, object_id, and slug — and it’s harmless if your account already returns them. If a response is missing providers or commissionable links, add the flag.

Base parameters

integer
Set to 1 to return the extended merchant object — providers, canonical, categories, countries, currencies, supports, supports_deeplinking, cookie_duration, home_url, object_id, and slug. Use the integer 1, not true. Some accounts return these fields by default; passing the flag guarantees it. Several filters (relationship_status, credential_id) require it, and the set of values accepted by fields differs between the standard and extended responses.
string
Comma-separated list of fields to include in each merchant object. Omit to return all fields.
integer
Page number. Defaults to 1.
integer
Results per page. Defaults to 100.
Search by merchant name (e.g. Walmart) or merchant ID in nmer_ format (e.g. nmer_01kmrf...).
string
Comma-separated numeric network IDs to filter results.
string
Comma-separated origin IDs from the source network.
string
Record types to filter by (array form, e.g. type[]=service&type[]=products). Values: products, service, promotions (alias coupons), plus special values all, both, none. A merchant matches if it has any of them.
string
Comma-separated country codes to filter by.
integer
Return only merchants with at least this many products.
integer
Return only merchants with at most this many products.

Filter parameters

string
Filter by the workspace’s relationship status with the merchant. Values: approved, pending, rejected, terminated, available, unavailable, unknown. Requires extended=1 and a valid API key.
relationship_status reads from merchant sync — the process that refreshes your approval records from your connected network credentials. With sync enabled, results reflect an update from within the last 24 hours. Without it, the filter returns an empty set rather than an error.
string
Network credential ULID. When combined with relationship_status, restricts the approval lookup to that specific credential. Requires extended=1.
string
Comma-separated canonical merchant IDs (mer_ ULID format).
string
Comma-separated category IDs (cat_ ULID format).
string
Filter by category name. Max 255 characters.
string
Comma-separated ISO 3166-1 alpha-2 country codes the merchant operates in.
string
Comma-separated country codes for the merchant’s origin country.
string
Comma-separated country codes for the merchant’s market countries.
string
Comma-separated ISO 4217 currency codes (3-character).
string
Comma-separated ISO 639-1 language codes (2-character).
string
Comma-separated merchant types. Values: standard, asn.
Filter by Shopnomix availability. Values: direct, indirect, verified, any, none.
integer
Return only merchants with at least this many promotions.
integer
Return only merchants with at most this many promotions.
integer
Set to 1 to return only merchants that have a commissionable link (a provider with a url or template).

Example request

cURL

Response

Response fields

meta object

integer
Total matching merchants.
integer
Index of the first result on this page.
integer
Index of the last result on this page.
integer
Current page number.
integer
Total pages available.
integer
Results per page.
array
Fields included in each merchant object.
string
Request trace ID for support use.

Merchant object

integer
Numeric merchant ID (legacy). Use object_id for new integrations.
string
Unique identifier in nmer_ULID format. Represents this merchant on a specific network.
string
Short-form identifier (e.g. nmer_as46gj2g).
string
The merchant’s ID in the originating network. May be null.
string
Merchant display name.
string
Merchant description. May be null.
array
Canonical domain(s) for the merchant.
string
Merchant homepage URL.
string
Merchant icon URL.
string
Merchant logo URL.
integer
Products available from this merchant.
integer
Promotions available from this merchant.
boolean
Whether the merchant has any associated content.
Cookie window as ISO 8601 duration (e.g. P1M2D). null if not reported.
boolean
Whether the merchant supports deep linking. null if unknown.
array
Product categories. Each item has id, breadcrumb, name, shopify_id, google_id.
array
ISO 3166-1 alpha-2 country codes where this merchant operates.
array
ISO 4217 currency codes supported.
object
What the merchant monetizes: products, services, promotions (booleans).
array
The ways you can earn commission on this merchant — one entry per network/subnetwork. May be empty. See Outclick links for how the tracked outclick link works.
object
The affiliate network for this merchant.
object
The deduplicated canonical merchant record. null if none exists.
array
Merchant classification. Values: standard, asn (Amazon Seller Network).
Third-party services available. Keys are service identifiers; values are direct, indirect, or verified. null if none.
For each merchant we work down three options and stop at the first one that yields something:
  1. A link built for you. Some networks build a link for one named publisher and hand it to us with your ID already in it. No slots left to fill — publish it as-is. This is the common case.
  2. A shared template. More often for some networks, we hold one link for the merchant that everyone shares, with a slot where the ID goes. You fill {AFF_ID} (and optionally {SUB_ID}) before publishing, or let the outclick fill it at click time.
  3. No link. The merchant still comes back with its name, logo and everything else we know — just nothing to link with. That’s an answer, not a failure: the merchant exists and isn’t monetizable by you yet.
The case that looks like a template but isn’t. Sometimes the link we hold already has a real ID in the slot, and it belongs to someone else. That is not a template, whatever it looks like, and we never pass it on — every click would pay the wrong publisher. Those merchants fall to option 3 and return no link, even though the database plainly holds a URL for them. This is the usual explanation when a merchant you’d expect to be linkable comes back empty.
Which lands you in one of three states: When each field is null:
  • url — no built tracking link. It’s populated whenever your approval record carries one (Shopnomix builds it from a resolved campaign id instead). It is not gated on status — a provider showing available or pending can still return a usable url, and an approved one can return null if no tracking link was stored. Read url, not status, to decide whether you have a ready-made link. Note that a populated url is not always a finished link: Shopnomix bakes in campaign_id but leaves source={SUB_ID} for you to fill.
  • template — the network stored no shareable placeholder form for this merchant, or the only stored link has a real publisher ID baked into it and so can’t be shared (see the note above). Shopnomix always has a template when the merchant has a home URL. For AdMedia merchants, template is also withheld from accounts without the AdMedia grant.
  • outclick — nothing to wrap (url and template both null); or the merchant is priced per click (CPC); or the provider’s link is built from your own login credentials, which a merchant-level link has nowhere to carry. That last case is detected per merchant, not taken from a fixed list — every link is tested before it’s offered and quietly dropped if a slot comes back unfilled, since a broken link is worse than no link. Adservice, Belboon and Partnerize commonly land here.
Two account-level switches withhold links everywhere rather than per merchant:
  • Outclick disabled on your account — every outclick on every merchant is withheld until it’s switched back on.
  • No team context — requests that resolve no team (queued exports, for example) mint no outclick links at all.

Getting from “Shareable” to “Built for you”

A provider stays in the Shareable state until two separate things are both true. Missing either one keeps url at null:
  1. You’re connected. The provider is configured as a source on the pool your request resolves to — Pools → Sources. Nothing configured there means no url, regardless of anything else.
  2. The network has sent us a working link for this merchant. Check url itself, not status — the two don’t always move together.
Shopnomix has no separate approval step. A Shopnomix source with a campaign ID is sufficient on its own — url builds as soon as that’s configured. Configuration is per pool, so check the right one. If your request carries a pool_id, that pool’s own sources are what count — a provider configured on a different pool won’t help. Omit pool_id and the request resolves to your account’s default pool instead, which needs its own configuration. A source configured on one pool never applies to another. Each provider carries an outclick — a link routed through Affiliate.com’s redirector (outclick.co) rather than sent straight to the network. When a visitor follows it, Affiliate.com records the click, then forwards them to the provider with your credentials, so the click lands in your report. The url and template links, by contrast, go straight to the network and are not recorded by us — both carry your credentials to the same destination; the difference is only whether we record the click. Every outclick also carries the merchant’s plain home page inside it, so you can request the ordinary uncommissioned link instead of the affiliate one without building anything yourself. AdMedia links are the exception — they’re format-locked and always resolve to the AdMedia redirect.
AdMedia replaces the network entry rather than adding to it. For a merchant reaching us through AdMedia, the url, template and outclick on the network provider are AdMedia’s own — there is no separate admedia entry in providers. Only accounts granted AdMedia access see them; to everyone else the merchant looks like it has no link. Shopnomix, by contrast, runs alongside the network provider, so a merchant can carry both.
  • Fill the slots. A shared outclick ends with ?affiliate_id={AFF_ID}&sub_id={SUB_ID} — replace {AFF_ID} with your affiliate/campaign ID and {SUB_ID} with your sub-ID.
  • The outclick param is always affiliate_id / sub_id — for every provider. Affiliate.com’s redirector maps them to each provider’s native parameter on the way through, so you never use the provider-specific name on an outclick. Those names only appear on the direct url / template links:
  • Merchants-only naming. These {AFF_ID}/{SUB_ID} tokens are how the merchants response spells the slots. The Products and Promotions endpoints still use @@@/###, and the merchant’s stored commissionable_url keeps @@@ — only the merchants response was renamed.
  • Reporting. Merchant outclicks appear under the merchant offer type: GET /v1/reports/outclick?offer_type=merchant (the report defaults to product).
  • Deep links are not tracked here. The deeplink builder produces a provider redirect (not an outclick), so deep-linked clicks don’t appear in the outclick report — only the homepage-level outclick does.

Error responses