Skip to main content

GetAllScratchCardsByUserId

Returns every scratch card for a user: unscratched cards first, then revealed rewards. This is what powers a "My Rewards" screen, and it is also how you recover a reward whose reveal response you lost.

Available
GET /api/GetAllScratchCardsByUserId?page=1&limit=20
EnvironmentURL
Productionhttps://rewardscenter.cheggout.com/api/GetAllScratchCardsByUserId
UAThttps://rewardscenter-uat.cheggout.com/api/GetAllScratchCardsByUserId

AuthenticationAuthorization: Bearer <token> from GetAuthToken

The user is identified by the token, so no user parameter is sent.

Request

ParameterInTypeDescription
pagequeryintegerPage number. 1-based.
limitqueryintegerItems per page

TBD Default and maximum limit are not documented. Always send both parameters explicitly rather than relying on defaults, and keep limit modest — 20 is a reasonable page size for a rewards list.

curl -X GET "https://rewardscenter-uat.cheggout.com/api/GetAllScratchCardsByUserId?page=1&limit=20" \
-H "Authorization: Bearer REPLACE_WITH_USER_TOKEN"

Response

A bare array, not an envelope

Unlike every other Rewards Center endpoint, this returns a plain JSON array — no status, no message, no total count. Your parser must expect an array at the top level.

[
{
"scratchcardId": 45150,
"rewardId": 45150,
"campaignId": "YOURCHANNEL_CAMPAIGN",
"isSeen": false,
"trackLink": ["https://tracking.cheggout.com/Tracker/Impression?REPLACE"]
},
{
"scratchcardId": 45144,
"rewardId": 45144,
"campaignId": "YOURCHANNEL_CAMPAIGN",
"isSeen": true,
"offerTitle": "Flat 20% off your next order",
"couponCode": "REPLACE-COUPON-CODE",
"couponType": "Brand",
"endDate": "2026-12-31 23:59:59.000",
"siteId": 1217,
"siteName": "Example Merchant",
"promoLink": "https://click.cheggout.com/REPLACE",
"copyClick": ["https://tracking.cheggout.com/Tracker/clicks?REPLACE"],
"redeemClick": ["https://tracking.cheggout.com/Tracker/clicks?REPLACE"]
}
]

Element types

The array contains two structurally different element types. Branch on isSeen.

Unscratched card — isSeen: false

FieldTypeDescription
scratchcardIdnumberCard identifier
rewardIdnumberCard identifier — pass to FetchRewardInfo
campaignIdTBDThe campaign this card belongs to. The field's type is not documented — examples show it as a string, but do not assume it. Read it defensively.
isSeenbooleanfalse
trackLinkarrayImpression URLs — fire when the card becomes visible

Revealed reward — isSeen: true

A superset of the above, adding the reward detail:

FieldTypeDescription
offerTitlestringHeadline
offerIdnumberOffer identifier
descriptionstringOffer description
shortDescriptionstringCondensed description
termsstringTerms, HTML list markup
entryPointstringWhere the reveal happened
couponCodestringThe redemption code
endDatestringValidity end
couponTypestring"Brand" or "points"
couponImagestringCoupon artwork URL
redeemStepsstringHTML list markup
bannerDisplayUrlstringBanner artwork URL
pointsnumberPoints awarded
siteIdnumberMerchant identifier
siteNamestringMerchant name
coverImagestringCover artwork URL
iconImagestringIcon URL
detailsstringHTML list markup
createdDateTimestringWhen the card was created
promoLinkstringRedeem destination
copyClickarrayFire on code copy
redeemClickarrayFire on redeem tap
Two identifier names for one concept

scratchcardId and rewardId both appear. Use rewardId when calling FetchRewardInfo so your code stays consistent with GetReward.

Pagination

  • 1-based. The first page is page=1, not page=0.
  • Paginated across both sets — unscratched cards come first, and a later page may contain the boundary between unscratched and revealed items.
  • No total count and no hasMore flag. Detect the end by receiving fewer items than limit.

TBD No total-count metadata is available, so you cannot render "page 3 of 12". Infinite scroll or a "load more" control fits the contract better than numbered pages. A pagination envelope is tracked in Open Items.

Uses

A "My Rewards" screen. Render unscratched cards as scratchable, revealed ones as reward tiles. Fire each unscratched card's trackLink as it scrolls into view.

Recovering a lost reveal. If a FetchRewardInfo call timed out and you don't know whether it succeeded, list the user's cards. If the card now shows isSeen: true, the reveal happened and the reward is right there — do not retry the reveal.

Reconciliation, backfill and recovery — not your primary read path. Your own store is the primary read path for a rewards list: you persist every reward at the moment you receive it, and you render from that. Use this endpoint to reconcile against the platform, to backfill state you never recorded, and to recover after a failure. Building your "My Rewards" screen directly on it makes every page view depend on a Cheggout round trip and on a token being valid. See Headless integration.

Errors

ResponseMeaning
HTTP 401Token missing, malformed, expired, or the wrong token type
Empty arrayThe user has no cards — a normal outcome

TBD No further error catalogue is published for this endpoint.

Next