Skip to main content
Affiliate Discovery is a searchable catalog of products and merchants sourced from affiliate networks. It lets you programmatically find products by natural language query, apply structured filters, and browse merchants — all without needing to integrate directly with individual affiliate networks.
All affiliate discovery endpoints require an API key passed in the x-api-key header.

Products

Search for affiliate products using a combination of free-text queries and structured criteria. Results include full product details: pricing, merchant info, availability status, imagery, and affiliate-tracked URLs.

Searching Products

POST https://rewardsbot-prod.liquidrewardsapi.com/v1/discovery/products/search
x-api-key: YOUR_API_KEY
Content-Type: application/json
{
  "query": "running shoes",
  "criteria": [
    { "field": "on_sale", "operator": "=", "value": true },
    { "field": "in_stock", "operator": "=", "value": true },
    { "field": "final_price", "operator": "<=", "value": 100.00 }
  ],
  "per_page": 25
}
query
string
A free-text search string describing the product you’re looking for. Supports natural language (e.g., "women's trail running shoes").
criteria
array
An array of structured filter predicates applied to product fields. Each criterion has a field, operator, and value. See Criteria Filters for the full list of available fields and operators.
criteria_set_ids
array
An array of saved criteria set IDs to apply to the search. Criteria sets are reusable filter bundles you define once and reference by ID. See Criteria Filters for how to create them.
exclude_query
string
A negative text filter. Products whose name or description match this string are excluded from results. Useful for removing irrelevant categories (e.g., exclude "cleats" when searching for "athletic shoes").
per_page
integer
Number of results to return per page. Accepted range: 1100. Defaults to 25.
cursor
string
A pagination cursor returned from a previous search response. Pass this value to retrieve the next page of results. Omit on the first request.

Search Response

{
  "query": "running shoes",
  "page_index": 0,
  "page_size": 25,
  "items": [
    {
      "type": "product",
      "slug": "nike-air-zoom-pegasus-41-abc123",
      "id": "prod-001",
      "name": "Nike Air Zoom Pegasus 41",
      "image_url": "https://example.com/pegasus.jpg",
      "product_url": "https://example.com/product",
      "merchant_url": "https://nike.com",
      "price": {
        "display": "$89.99",
        "value": 89.99,
        "currency": "USD",
        "regular_value": 120.00,
        "on_sale": true,
        "sale_discount": 0.25
      },
      "merchant": { "id": "nike-001", "name": "Nike", "logo_url": null },
      "brand": "Nike",
      "category": "Running Shoes",
      "availability": "in_stock"
    }
  ],
  "next_cursor": "eyJwYWdlIjoxfQ==",
  "expires_at": "2024-01-15T11:30:00Z"
}
query
string
The search query string from the request.
page_index
integer
The current page index (0-based).
page_size
integer
Number of items returned on this page.
items
AffiliateDiscoverySearchItem[]
Array of matching affiliate product objects. Each item includes slug, id, name, image_url, product_url, merchant_url, price, merchant, brand, category, and availability.
next_cursor
string | null
An opaque cursor string for fetching the next page. null when no further results exist. See Pagination below.
expires_at
string | null
ISO 8601 timestamp after which the next_cursor is no longer valid. Fetch subsequent pages before this time.

Merchants

Browse and search the full catalog of affiliate merchants available in the Liquid Rewards network.

List All Merchants

Returns all available affiliate merchants.
GET https://rewardsbot-prod.liquidrewardsapi.com/v1/discovery/merchants
x-api-key: YOUR_API_KEY

Search Merchants by Name

Find merchants matching a name query.
GET https://rewardsbot-prod.liquidrewardsapi.com/v1/discovery/merchants/search?query=nike
x-api-key: YOUR_API_KEY
query
string
A partial or full merchant name to search for. Min length: 1 character. The search is case-insensitive.

Merchant Record Fields

Each merchant object in the response includes:
name
string
The merchant’s display name (e.g., "Nike").
logo_url
string | null
URL of the merchant’s logo image.
domain
string
The merchant’s primary web domain (e.g., "nike.com").
product_count
integer
Total number of affiliate products available from this merchant.
network_names
string[]
Affiliate networks this merchant’s products are tracked through (e.g., ["CJ Affiliate", "Impact"]).
countries
array
Countries in which the merchant operates and ships to.
categories
array
Product categories carried by this merchant.
brands
array
Brands stocked by this merchant.

Product Details

Retrieve the full detail record for a specific product by its slug. The slug is returned in every search result.
GET https://rewardsbot-prod.liquidrewardsapi.com/v1/discovery/products/{slug}
x-api-key: YOUR_API_KEY
slug
string
required
The product’s unique slug identifier, as returned in the slug field of a search result.
The response returns a single product object with the same fields as a search result entry, plus any additional extended attributes available for that product.
Slugs are stable identifiers but may be retired if a product is removed from the affiliate network. Always handle 404 responses gracefully when fetching product details.

Pagination

Product search uses cursor-based pagination. Unlike page-number pagination, cursors remain stable even if the underlying product catalog changes between requests.
1

Make the initial search request

Send a POST /v1/discovery/products/search request without a cursor. The response includes your first page of results, a next_cursor, and an expires_at timestamp.
2

Check for more results

If next_cursor is non-null, more results are available. If it is null, you have reached the last page.
3

Fetch the next page

Send a new search request with only the cursor field — the cursor encodes all previous query context, so you do not need to repeat the query, criteria, or other parameters:
{ "cursor": "eyJwYWdlIjoxfQ==" }
4

Respect the expiry

Each cursor is valid only until its expires_at time. If you need to continue paginating after that point, restart from the first page without a cursor.
Cursors are not reusable across different query or criteria combinations. If you change query, criteria, or exclude_query, start a new search from the beginning without a cursor.