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.
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.string
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.string
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.
string
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).object
Third-party services available. Keys are service identifiers; values are
direct, indirect, or verified. null if none.Provider link states
For each merchant we work down three options and stop at the first one that yields something:- 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.
- 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 theoutclickfill it at click time. - 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.
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 onstatus— a provider showingavailableorpendingcan still return a usableurl, and anapprovedone can returnnullif no tracking link was stored. Readurl, notstatus, to decide whether you have a ready-made link. Note that a populatedurlis not always a finished link: Shopnomix bakes incampaign_idbut leavessource={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 atemplatewhen the merchant has a home URL. For AdMedia merchants,templateis also withheld from accounts without the AdMedia grant.outclick— nothing to wrap (urlandtemplatebothnull); 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.
- Outclick disabled on your account — every
outclickon 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 keepsurl at null:
- 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. - The network has sent us a working link for this merchant. Check
urlitself, notstatus— the two don’t always move together.
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.
Outclick links
Each provider carries anoutclick — 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 anoutclick. Those names only appear on the directurl/templatelinks: -
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 storedcommissionable_urlkeeps@@@— only the merchants response was renamed. -
Reporting. Merchant outclicks appear under the
merchantoffer type:GET /v1/reports/outclick?offer_type=merchant(the report defaults toproduct). -
Deep links are not tracked here. The
deeplinkbuilder produces a provider redirect (not anoutclick), so deep-linked clicks don’t appear in the outclick report — only the homepage-leveloutclickdoes.