Skip to main content

GetReward

Reports that a qualifying event happened and creates temporary scratch cards for the user. No reward is assigned yet — that happens at reveal.

Available
POST /api/GetReward
EnvironmentURL
Productionhttps://rewardscenter.cheggout.com/api/GetReward
UAThttps://rewardscenter-uat.cheggout.com/api/GetReward

AuthenticationAuthorization: Bearer <referenceKey> from getSecuredReferenceToken

This endpoint takes the reference token

Not the user token. The user is identified by the virtualId in the request body, not by the token. Sending a user token here, or a reference token to the reveal endpoint, is the most common integration error. See Tokens.

This is a plain JSON body — no signed envelope.

Request

FieldTypeRequiredDescription
channelNamestringYesYour channel identifier
virtualIdstringYesYour pseudonymous user identifier
triggerEventTypestringYesThe predefined campaign or trigger code for this event
extTransactionIdstringYesYour unique alphanumeric reference. Idempotency key.
amountnumberSee noteTransaction amount, two decimal places
dateandtimestringYesEvent timestamp, documented format DDMMYYYYHHMMSS
additionalParamsstringNoTargeting context as a JSON string
subTriggerEventTypestringNoFiner-grained sub-category of the trigger
deviceTypestringNoClient device type
amount is ambiguous in the source contract

It is marked mandatory in one place and described as optional in another. Send it whenever you have it — reward decisioning may depend on transaction value. Behaviour when it is omitted is TBD.

dateandtime format

The documented format is DDMMYYYYHHMMSS. Other formats appear in circulated examples, and the platform's tolerance is TBD. Send the documented format, and treat downstream reporting on this field as unverified until confirmed.

additionalParams

A JSON-encoded string, not a nested object. All inner fields are optional and are stored at creation, then applied to targeting when the card is revealed.

FieldDescription
from, toJourney or transaction endpoints
state, district, city, pincodeLocation context
ipaddressClient IP
lat, longCoordinates
gender, ageDemographic context
additionalParams, before stringifying
{ "city": "Bengaluru", "state": "Karnataka", "pincode": "560001" }
Stringify it

additionalParams is typed as a string. Send "additionalParams": "{\"city\":\"Bengaluru\"}", not a nested JSON object. Sending an object may cause the request to fail.

Example

curl -X POST https://rewardscenter-uat.cheggout.com/api/GetReward \
-H "Authorization: Bearer REPLACE_WITH_REFERENCE_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"channelName": "YOURCHANNEL",
"virtualId": "pub_8f14e45fceea167a",
"triggerEventType": "YOURCHANNEL_CAMPAIGN",
"extTransactionId": "PUB_TXN_20260731_000117",
"amount": 499.00,
"dateandtime": "31072026141530",
"subTriggerEventType": "",
"additionalParams": "{\"city\":\"Bengaluru\"}"
}'

Response

FieldTypeDescription
statusbooleantrue when cards were returned
messagestring"success" or "failure"
rewardsarrayCard objects — may be empty
clicktrackarrayClick-tracking URLs to fire when the user scratches

rewards[] — unscratched card

FieldTypeDescription
rewardIdnumberCard identifier. Pass to FetchRewardInfo to reveal.
isAlreadyRewardedbooleantrue when this card was already revealed
createdDateTimestringYYYY-MM-DD HH:mm:ss.SSS
trackLinkarrayImpression URLs — fire when the card becomes visible
Success
{
"status": true,
"message": "success",
"rewards": [
{
"rewardId": 45144,
"isAlreadyRewarded": false,
"createdDateTime": "2026-07-31 14:15:31.000",
"trackLink": ["https://tracking.cheggout.com/Tracker/Impression?REPLACE"]
}
],
"clicktrack": ["https://tracking.cheggout.com/Tracker/clicks?REPLACE"]
}

Already-revealed cards

If a card in the set has already been scratched, its entry carries the full reward detail: offerTitle, description, terms, couponCode, endDate, couponType, isSeen, couponImage, redeemSteps, bannerDisplayUrl, iconImage, details, siteId, siteName, coverImage, promoLink, bgColor.

Unscratched cards are returned first, then scratched ones.

No reward

{ "status": false, "message": "failure", "rewards": [] }
This is a normal outcome

"rewards": [] means the user is not eligible right now — a frequency cap, an inactive campaign, or targeting rules. Render nothing and move on. Do not retry, alert, or refresh your token.

Idempotency

extTransactionId is the idempotency key. Replaying the same value returns the same cards rather than creating new ones, which makes it safe to retry after a network failure.

TBD Idempotency has edge cases. Replay behaviour is not fully specified for every reward type or after a card's offer has expired. Keep your own ledger keyed on extTransactionId and reconcile rather than relying on platform idempotency alone.

Tracking

Fire the URLs, or attribution and reporting will not work:

EventFire
Card becomes visible to the userevery URL in that card's trackLink
User scratches or taps the cardevery URL in clicktrack

A plain GET on each URL is sufficient. See Tracking.

Errors

ResponseMeaning
{"status": false, "message": "failure", "rewards": []}Not eligible — a normal outcome
HTTP 401Token missing, malformed, expired, or the wrong token type

TBD No further error catalogue is published for this endpoint. Treat any unrecognised non-success body as a generic failure and log it with your extTransactionId.

Next