Skip to main content

getCatalogue

Returns the deals catalogue — every offer available to your channel. The response is not user-specific, which makes it aggressively cacheable.

Available
GET /api/getCatalogue
EnvironmentURL
Productionhttps://hotdeals.cheggout.com/api/getCatalogue
UAThttps://onerupee-store-api-stage.azurewebsites.net/api/getCatalogue

AuthenticationAPI key, server-to-server from whitelisted IPs

Cache this, don't call it per page view

The catalogue is the same for every user. Refresh it into your own store on a schedule and serve your storefront from that cache. Only inventory needs to be fresh.

Request

Headers

HeaderRequiredValue
AuthorizationYesCheggoutAppKey <APP_KEY>:<SEC_KEY>
X-CHANNELIDYesYour channel identifier

TBD No request parameters are documented for this endpoint — no filters, no pagination. Assume the full catalogue is returned in one response, and confirm with Cheggout if your catalogue is large.

curl -X GET https://hotdeals.cheggout.com/api/getCatalogue \
-H "X-CHANNELID: YOURCHANNEL" \
-H "Authorization: CheggoutAppKey REPLACE_APP_KEY:REPLACE_SEC_KEY"

Response

FieldTypeDescription
statusnumber200 on success
messagestring"Fetched Successfully"
dataarrayOffer objects

Offer fields

FieldTypeDescription
idstringUnique offer identifier. Use as offerId elsewhere.
brand_namestringBrand name
brand_descriptionstringBrand description
product_namestringProduct or offer name
brand_logostringBrand logo URL
grey_brand_logostringGreyscale logo URL, for disabled or sold-out states
product_min_picstringSmall product image URL
product_pic_largestringLarge product image URL
offer_categorynumberCategory identifier
offer_category_namestringCategory display name
purchase_limitnumberHow many times one user may claim this offer
amountnumberCoin cost. 0 means free.
is_freeFree-offer indicator
dealRanknumberSuggested display ordering
stocknumberApproximate remaining stock — see the caution below
strip_notestringShort promotional strip text
offer_formatnumberOffer format identifier
tncstringTerms and conditions
how_to_redeemstringRedemption instructions
offer_validitystringValidity end date
tagsarrayTargeting tags — see below
CPECost per engagement
Response (synthetic)
{
"status": 200,
"message": "Fetched Successfully",
"data": [
{
"id": "517",
"brand_name": "Example Brand",
"brand_description": "A description of the brand.",
"product_name": "Sample Product Voucher",
"brand_logo": "https://assets.example.com/logo.png",
"grey_brand_logo": "https://assets.example.com/logo-grey.png",
"product_min_pic": "https://assets.example.com/product-small.png",
"product_pic_large": "https://assets.example.com/product-large.png",
"offer_category": 12,
"offer_category_name": "Food and Beverage",
"purchase_limit": 1,
"amount": 5,
"is_free": 0,
"dealRank": 3,
"stock": 1250,
"strip_note": "Limited period offer",
"offer_format": 1,
"tnc": "One redemption per customer.",
"how_to_redeem": "Present the code at checkout.",
"offer_validity": "2026-12-31T16:34:00.000Z",
"tags": ["EXAMPLE_SEGMENT_A", "EXAMPLE_CITY_FOOD"],
"CPE": 11.25
}
]
}
stock here is approximate

The catalogue's stock is a cached value and is not authoritative. Before showing a buy action, check getCatalogueInventory, which carries a 180-second TTL.

Tags and targeting

tags carries targeting labels on each offer. Applying them is the publisher's responsibility — you decide which users see which offers based on the segments you hold.

TBD No tag taxonomy is published. There is no list of valid tags, no definition of their semantics, and no documented mapping from a user to a tag set. Agree your tag vocabulary with Cheggout during campaign setup.

Note that fetchCouponCode applies its own eligibility check and can return 403 NON_ELIGIBLE — so a user may see an offer you showed them and still be refused. Handle that response gracefully.

Errors

statuserrorCodeMessageCause
401UNAUTHORIZEDInvalid AppKey/SecKey.Missing or wrong Authorization header
403FORBIDDENRequest blocked. IP not whitelisted.Calling IP not registered
400INVALID_REQUESTMalformed request
500INTERNAL_ERRORSomething went wrong.Platform-side failure
Status codes arrive in the body

Check the body's status field, not only the HTTP status line. See API conventions.

Caching strategy

Recommendations:

  • Refresh on a schedule — hourly or nightly, depending on how often your campaigns change.
  • Serve reads from your cache. Do not call Cheggout on a page view.
  • Store the full offer object, including imagery URLs and terms, so your storefront needs no further calls.
  • Handle disappearing offers. An offer can be deactivated between refreshes; treat a 404 INVALID_OFFER at delivery time as "no longer available" and refresh your cache.

TBD No recommended refresh cadence is published, and there is no change feed or ETag to detect updates cheaply. Agree a cadence with Cheggout based on your campaign velocity.

Next