Skip to main content
The Offers API lets you register affiliate product presentments as reward offers in your loyalty program. You can build individual offers, batch multiple offers in one request, or create carousel-style offer experiences.
The offers endpoints do not require an API key. Include all required product_click fields — program, email, convo_id, presentation_id, click_id, and click_datetime — to ensure proper attribution.

The OfferMessage Structure

Every offer is built from an OfferMessage containing a ProductClick (who clicked what) and ProductInfo (the product details):
{
  "product_click": {
    "program":         "my-loyalty-program",
    "email":           "user@example.com",
    "convo_id":        "session-abc123",
    "presentation_id": "pres-001",
    "click_id":        "click-001",
    "click_datetime":  "2024-01-15T10:30:00Z"
  },
  "product_info": {
    "name":           "Nike Air Zoom Pegasus 41",
    "direct_link":    "https://affiliate.net/track?id=001",
    "detail_link":    "https://nike.com/products/pegasus",
    "image_url":      "https://cdn.example.com/pegasus.jpg",
    "value":          120.00,
    "price":          "$120.00",
    "description":    "Lightweight running shoe for marathon training",
    "rebate_pct":     5.0,
    "presentment_id": "pres-001",
    "merchant":       { "id": 1, "name": "Nike" },
    "brand":          "Nike",
    "category":       "Athletic Footwear",
    "currency":       "USD",
    "on_sale":        false
  }
}

ProductClick Fields

program
string
required
Your loyalty program identifier.
email
string
required
The user’s email address.
convo_id
string
required
The conversation/session ID generated at the start of the user’s chat session.
presentation_id
string
required
The ID of the offer presentment shown to the user.
click_id
string
required
A unique identifier for this click event.
click_datetime
string
required
ISO 8601 timestamp of when the click occurred (e.g., "2024-01-15T10:30:00Z").

ProductInfo Fields

name
string
required
Display name of the product.
The affiliate tracking URL users are redirected to on click.
The canonical product page URL on the merchant’s site.
image_url
string
URL of the product image for display in the offer UI.
value
number
required
Numeric product price used for reward calculations.
price
string
Human-readable formatted price string (e.g., "$120.00").
description
string
Short product description shown in the offer card.
rebate_pct
number
Affiliate rebate percentage to be awarded to the user upon purchase.
presentment_id
string
required
Must match the presentation_id in the accompanying ProductClick.
merchant
object
Object containing id (integer) and name (string) for the affiliate merchant.
brand
string
Brand name of the product.
category
string
Product category (e.g., "Athletic Footwear").
currency
string
ISO 4217 currency code (e.g., "USD").
on_sale
boolean
Whether the product is currently on sale.

Building a Single Offer

POST a single OfferMessage to /offers/single. Returns an OfferReference with the offer’s integer ID, or a MessageAck for async processing.
curl -X POST https://rewardsbot-prod.liquidrewardsapi.com/offers/single \
  -H "Content-Type: application/json" \
  -d '{
    "product_click": {
      "program": "my-loyalty-program",
      "email": "user@example.com",
      "convo_id": "session-abc123",
      "presentation_id": "pres-001",
      "click_id": "click-001",
      "click_datetime": "2024-01-15T10:30:00Z"
    },
    "product_info": {
      "name": "Nike Air Zoom Pegasus 41",
      "direct_link": "https://affiliate.net/track?id=001",
      "value": 120.00,
      "price": "$120.00",
      "rebate_pct": 5.0,
      "presentment_id": "pres-001",
      "currency": "USD",
      "on_sale": false
    }
  }'

Building Multiple Offers

Send an array of OfferMessage objects to /offers/multi to build multiple offers in a single request. Returns an array of OfferReference objects.
curl -X POST https://rewardsbot-prod.liquidrewardsapi.com/offers/multi \
  -H "Content-Type: application/json" \
  -d '[
    {
      "product_click": { "program": "my-loyalty-program", "email": "user@example.com", "convo_id": "session-abc123", "presentation_id": "pres-001", "click_id": "click-001", "click_datetime": "2024-01-15T10:30:00Z" },
      "product_info":  { "name": "Nike Air Zoom Pegasus 41", "direct_link": "https://affiliate.net/track?id=001", "value": 120.00, "price": "$120.00", "rebate_pct": 5.0, "presentment_id": "pres-001", "currency": "USD", "on_sale": false }
    },
    {
      "product_click": { "program": "my-loyalty-program", "email": "user@example.com", "convo_id": "session-abc123", "presentation_id": "pres-002", "click_id": "click-002", "click_datetime": "2024-01-15T10:31:00Z" },
      "product_info":  { "name": "Adidas Ultraboost 24", "direct_link": "https://affiliate.net/track?id=002", "value": 190.00, "price": "$190.00", "rebate_pct": 4.5, "presentment_id": "pres-002", "currency": "USD", "on_sale": true }
    }
  ]'
The carousel endpoint formats the offer for display in a product carousel UI. POST a single OfferMessage to /offers/carousel:
curl -X POST https://rewardsbot-prod.liquidrewardsapi.com/offers/carousel \
  -H "Content-Type: application/json" \
  -d '{
    "product_click": {
      "program": "my-loyalty-program",
      "email": "user@example.com",
      "convo_id": "session-abc123",
      "presentation_id": "pres-001",
      "click_id": "click-001",
      "click_datetime": "2024-01-15T10:30:00Z"
    },
    "product_info": {
      "name": "Nike Air Zoom Pegasus 41",
      "direct_link": "https://affiliate.net/track?id=001",
      "image_url": "https://cdn.example.com/pegasus.jpg",
      "value": 120.00,
      "price": "$120.00",
      "rebate_pct": 5.0,
      "presentment_id": "pres-001",
      "currency": "USD",
      "on_sale": false
    }
  }'

Retrying Failed Offers

If an offer presentation fails or needs to be retried, use the retry endpoint with the session and presentment identifiers:
curl "https://rewardsbot-prod.liquidrewardsapi.com/offers/retry/SESSION_ID/PRESENTMENT_ID?email=user@example.com&program=my-loyalty-program&click_id=click-001&click_datetime=2024-01-15T10%3A30%3A00Z"
Query ParameterDescription
emailUser’s email address
programLoyalty program identifier
click_idThe original click ID to retry
click_datetimeISO 8601 timestamp of the original click event