GetReward
Reports that a qualifying event happened and creates temporary scratch cards for the user. No reward is assigned yet — that happens at reveal.
AvailablePOST /api/GetReward
| Environment | URL |
|---|---|
| Production | https://rewardscenter.cheggout.com/api/GetReward |
| UAT | https://rewardscenter-uat.cheggout.com/api/GetReward |
Authentication — Authorization: Bearer <referenceKey> from
getSecuredReferenceToken
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
| Field | Type | Required | Description |
|---|---|---|---|
channelName | string | Yes | Your channel identifier |
virtualId | string | Yes | Your pseudonymous user identifier |
triggerEventType | string | Yes | The predefined campaign or trigger code for this event |
extTransactionId | string | Yes | Your unique alphanumeric reference. Idempotency key. |
amount | number | See note | Transaction amount, two decimal places |
dateandtime | string | Yes | Event timestamp, documented format DDMMYYYYHHMMSS |
additionalParams | string | No | Targeting context as a JSON string |
subTriggerEventType | string | No | Finer-grained sub-category of the trigger |
deviceType | string | No | Client device type |
amount is ambiguous in the source contractIt 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 formatThe 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.
| Field | Description |
|---|---|
from, to | Journey or transaction endpoints |
state, district, city, pincode | Location context |
ipaddress | Client IP |
lat, long | Coordinates |
gender, age | Demographic context |
{ "city": "Bengaluru", "state": "Karnataka", "pincode": "560001" }
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
| Field | Type | Description |
|---|---|---|
status | boolean | true when cards were returned |
message | string | "success" or "failure" |
rewards | array | Card objects — may be empty |
clicktrack | array | Click-tracking URLs to fire when the user scratches |
rewards[] — unscratched card
| Field | Type | Description |
|---|---|---|
rewardId | number | Card identifier. Pass to FetchRewardInfo to reveal. |
isAlreadyRewarded | boolean | true when this card was already revealed |
createdDateTime | string | YYYY-MM-DD HH:mm:ss.SSS |
trackLink | array | Impression URLs — fire when the card becomes visible |
{
"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": [] }
"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:
| Event | Fire |
|---|---|
| Card becomes visible to the user | every URL in that card's trackLink |
| User scratches or taps the card | every URL in clicktrack |
A plain GET on each URL is sufficient. See
Tracking.
Errors
| Response | Meaning |
|---|---|
{"status": false, "message": "failure", "rewards": []} | Not eligible — a normal outcome |
HTTP 401 | Token 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
GetAuthToken— mint the user token you'll need to reveal.FetchRewardInfo— reveal a card.- Scratch card lifecycle