Skip to main content

getUserCoupons

Returns the coupons a user has already received, together with the offer detail needed to render a "My Coupons" entry.

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

AuthenticationAPI key

Your own store should be the primary source

You already persist every coupon at delivery time. Use this endpoint for reconciliation and recovery rather than as the backing store for your "My Coupons" screen — it is scoped to a single offer, so building a full list from it means one call per offer.

Request

Headers

HeaderRequiredValue
Content-TypeYesapplication/json
X-CHANNELIDYesYour channel identifier
AuthorizationYesCheggoutAppKey <APP_KEY>:<SEC_KEY>

Body

FieldTypeRequiredDescription
offerIdstringYesThe offer to query
virtualIdstringYesThe user
channelNamestringYesYour channel name
curl -X POST https://hotdeals.cheggout.com/api/getUserCoupons \
-H "Content-Type: application/json" \
-H "X-CHANNELID: YOURCHANNEL" \
-H "Authorization: CheggoutAppKey REPLACE_APP_KEY:REPLACE_SEC_KEY" \
-d '{
"offerId": "517",
"virtualId": "pub_8f14e45fceea167a",
"channelName": "YOURCHANNEL"
}'

TBD offerId appears to be required, which means there is no documented way to list all of a user's coupons in one call. If you need a complete list without iterating your catalogue, ask Cheggout — an all-offers variant is not published.

Response

FieldTypeDescription
statusnumber200 on success
messagestring"Fetched Successfully"
dataobjectOffer detail plus the user's coupons

data

FieldTypeDescription
idstringOffer identifier
brand_namestringBrand name
brand_descriptionstringBrand description
product_namestringProduct or offer name
offer_validitystringOffer validity end date
tncstringTerms and conditions
how_to_redeemstringRedemption instructions
urlstringCheggout redirect URL for the offer
couponsarrayThe user's delivered coupons for this offer

coupons[]

FieldTypeDescription
coupon_codestringThe redemption code
extTransactionIdstringYour reference from the delivery call
purchase_timestringWhen it was delivered, ISO 8601
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",
"offer_validity": "2026-12-31T16:34:00.000Z",
"tnc": "One redemption per customer.",
"how_to_redeem": "Present the code at checkout.",
"url": "https://click.cheggout.com/REPLACE",
"coupons": [
{
"coupon_code": "REPLACE-COUPON-CODE",
"extTransactionId": "PUB_OFFERBUY_20260731_000045",
"purchase_time": "2026-07-31T14:15:31.000Z"
}
]
}
}
coupons[] carries no status

Each entry has a code, your reference and a timestamp — but no per-coupon expiry, no used/unused flag, and no invalidation state. Coupon-level validity comes from the offer's offer_validity, and invalidations arrive through the coupon status webhook. Track redemption state yourself if you need it. TBD

Errors

statuserrorCodeCause
400INVALID_REQUESTMalformed request
401UNAUTHORIZEDMissing or wrong Authorization header
500INTERNAL_ERRORPlatform-side failure

Status codes arrive in the body — see API conventions.

Reconciliation

The most valuable use of this endpoint is settling uncertainty after a failed delivery.

Because extTransactionId is echoed on each coupon, you can match a delivery attempt to its outcome exactly. Run this as a periodic reconciliation job over any deliveries your ledger recorded as uncertain.

Next