@encorekit/web-sdk 2.2.1 → 2.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +66 -1
- package/dist/cjs/index.cjs +1 -1
- package/dist/cjs/index.cjs.map +1 -1
- package/dist/cjs/preview.cjs +2 -0
- package/dist/cjs/preview.cjs.map +1 -0
- package/dist/cjs/react.cjs +1 -1
- package/dist/cjs/react.cjs.map +1 -1
- package/dist/esm/chunks/ClaimReminder-DFyrm5bJ.js +2 -0
- package/dist/esm/chunks/ClaimReminder-DFyrm5bJ.js.map +1 -0
- package/dist/esm/chunks/GiftsButton-B0lVB463.js +2 -0
- package/dist/esm/chunks/GiftsButton-B0lVB463.js.map +1 -0
- package/dist/esm/chunks/TriggerHost-CNTiNrTH.js +2 -0
- package/dist/esm/chunks/TriggerHost-CNTiNrTH.js.map +1 -0
- package/dist/esm/chunks/autoPops-CngtK_R0.js +2 -0
- package/dist/esm/chunks/autoPops-CngtK_R0.js.map +1 -0
- package/dist/esm/chunks/customClaim-B4uj-aOc.js +2 -0
- package/dist/esm/chunks/customClaim-B4uj-aOc.js.map +1 -0
- package/dist/esm/chunks/eligibility-BY7fL8Ve.js +2 -0
- package/dist/esm/chunks/eligibility-BY7fL8Ve.js.map +1 -0
- package/dist/esm/chunks/index-CaBSqauy.js +2 -0
- package/dist/esm/chunks/index-CaBSqauy.js.map +1 -0
- package/dist/esm/chunks/lookValues-B9z2VWpH.js +2 -0
- package/dist/esm/chunks/lookValues-B9z2VWpH.js.map +1 -0
- package/dist/esm/chunks/sduiView-Ds7QtFId.js +2 -0
- package/dist/esm/chunks/sduiView-Ds7QtFId.js.map +1 -0
- package/dist/esm/chunks/spot-DkKMLpB-.js +2 -0
- package/dist/esm/chunks/spot-DkKMLpB-.js.map +1 -0
- package/dist/esm/chunks/template-B9p4CbPD.js +2 -0
- package/dist/esm/chunks/template-B9p4CbPD.js.map +1 -0
- package/dist/esm/chunks/textSlots-BnwxUg9V.js +2 -0
- package/dist/esm/chunks/textSlots-BnwxUg9V.js.map +1 -0
- package/dist/esm/chunks/timers-Bva4yoGM.js +2 -0
- package/dist/esm/chunks/timers-Bva4yoGM.js.map +1 -0
- package/dist/esm/index.js +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/preview.js +2 -0
- package/dist/esm/preview.js.map +1 -0
- package/dist/esm/react.js +1 -1
- package/dist/esm/react.js.map +1 -1
- package/dist/umd/encore.min.js +1 -1
- package/dist/umd/encore.min.js.map +1 -1
- package/package.json +9 -1
- package/types/analytics/DiagnosticsOutbox.d.ts +1 -0
- package/types/analytics/DiagnosticsOutbox.d.ts.map +1 -1
- package/types/analytics/events.d.ts +108 -8
- package/types/analytics/events.d.ts.map +1 -1
- package/types/analytics/models.d.ts +2 -0
- package/types/analytics/models.d.ts.map +1 -1
- package/types/analytics/transport.d.ts +6 -0
- package/types/analytics/transport.d.ts.map +1 -1
- package/types/api/APIClient.d.ts +70 -33
- package/types/api/APIClient.d.ts.map +1 -1
- package/types/api/contract.d.ts +4 -1
- package/types/api/contract.d.ts.map +1 -1
- package/types/api/generated/types.d.ts +994 -17
- package/types/api/generated/types.d.ts.map +1 -1
- package/types/api/models.d.ts +29 -8
- package/types/api/models.d.ts.map +1 -1
- package/types/api/offerBuilder.d.ts +51 -0
- package/types/api/offerBuilder.d.ts.map +1 -0
- package/types/core/Configuration.d.ts +9 -0
- package/types/core/Configuration.d.ts.map +1 -1
- package/types/core/Encore.d.ts +145 -3
- package/types/core/Encore.d.ts.map +1 -1
- package/types/core/OfferManager.d.ts +27 -5
- package/types/core/OfferManager.d.ts.map +1 -1
- package/types/core/PlacementBuilder.d.ts +6 -1
- package/types/core/PlacementBuilder.d.ts.map +1 -1
- package/types/core/SignalManager.d.ts.map +1 -1
- package/types/core/StorageManager.d.ts +3 -2
- package/types/core/StorageManager.d.ts.map +1 -1
- package/types/core/StrictUnlockReconciler.d.ts +1 -1
- package/types/core/StrictUnlockReconciler.d.ts.map +1 -1
- package/types/core/claimHandle.d.ts +44 -0
- package/types/core/claimHandle.d.ts.map +1 -0
- package/types/core/claimLog.d.ts +102 -0
- package/types/core/claimLog.d.ts.map +1 -0
- package/types/core/claimRefusal.d.ts +3 -0
- package/types/core/claimRefusal.d.ts.map +1 -0
- package/types/core/claimScreenVariant.d.ts +3 -0
- package/types/core/claimScreenVariant.d.ts.map +1 -0
- package/types/core/claimStatusCheck.d.ts +62 -0
- package/types/core/claimStatusCheck.d.ts.map +1 -0
- package/types/core/giftVariant.d.ts +5 -0
- package/types/core/giftVariant.d.ts.map +1 -1
- package/types/core/hostDisplay.d.ts +9 -2
- package/types/core/hostDisplay.d.ts.map +1 -1
- package/types/core/sduiVariables.d.ts +20 -0
- package/types/core/sduiVariables.d.ts.map +1 -0
- package/types/core/strings.d.ts +114 -0
- package/types/core/strings.d.ts.map +1 -0
- package/types/core/unlockCode.d.ts +12 -2
- package/types/core/unlockCode.d.ts.map +1 -1
- package/types/core/userKeys.d.ts +7 -0
- package/types/core/userKeys.d.ts.map +1 -0
- package/types/core/version.d.ts +1 -1
- package/types/experiments/ExposureOutbox.d.ts +1 -0
- package/types/experiments/ExposureOutbox.d.ts.map +1 -1
- package/types/preview.d.ts +51 -0
- package/types/preview.d.ts.map +1 -0
- package/types/react.d.ts +53 -1
- package/types/react.d.ts.map +1 -1
- package/types/sdui/actions.d.ts +93 -0
- package/types/sdui/actions.d.ts.map +1 -0
- package/types/sdui/bindings.d.ts +63 -0
- package/types/sdui/bindings.d.ts.map +1 -0
- package/types/sdui/compile.d.ts +88 -0
- package/types/sdui/compile.d.ts.map +1 -0
- package/types/sdui/conditions.d.ts +22 -0
- package/types/sdui/conditions.d.ts.map +1 -0
- package/types/sdui/context.d.ts +132 -0
- package/types/sdui/context.d.ts.map +1 -0
- package/types/sdui/countdown.d.ts +31 -0
- package/types/sdui/countdown.d.ts.map +1 -0
- package/types/sdui/decode.d.ts +35 -0
- package/types/sdui/decode.d.ts.map +1 -0
- package/types/sdui/deps.d.ts +43 -0
- package/types/sdui/deps.d.ts.map +1 -0
- package/types/sdui/dominantColor.d.ts +24 -0
- package/types/sdui/dominantColor.d.ts.map +1 -0
- package/types/sdui/elements/confetti.d.ts +38 -0
- package/types/sdui/elements/confetti.d.ts.map +1 -0
- package/types/sdui/elements/content.d.ts +27 -0
- package/types/sdui/elements/content.d.ts.map +1 -0
- package/types/sdui/elements/interactive.d.ts +48 -0
- package/types/sdui/elements/interactive.d.ts.map +1 -0
- package/types/sdui/elements/layout.d.ts +41 -0
- package/types/sdui/elements/layout.d.ts.map +1 -0
- package/types/sdui/elements/marquee.d.ts +17 -0
- package/types/sdui/elements/marquee.d.ts.map +1 -0
- package/types/sdui/elements/progress.d.ts +10 -0
- package/types/sdui/elements/progress.d.ts.map +1 -0
- package/types/sdui/elements/shared.d.ts +138 -0
- package/types/sdui/elements/shared.d.ts.map +1 -0
- package/types/sdui/elements/symbols.d.ts +22 -0
- package/types/sdui/elements/symbols.d.ts.map +1 -0
- package/types/sdui/elements/triggerText.d.ts +55 -0
- package/types/sdui/elements/triggerText.d.ts.map +1 -0
- package/types/sdui/host.d.ts +274 -0
- package/types/sdui/host.d.ts.map +1 -0
- package/types/sdui/inlineMarkup.d.ts +22 -0
- package/types/sdui/inlineMarkup.d.ts.map +1 -0
- package/types/sdui/lookValues.d.ts +50 -0
- package/types/sdui/lookValues.d.ts.map +1 -0
- package/types/sdui/model.d.ts +130 -0
- package/types/sdui/model.d.ts.map +1 -0
- package/types/sdui/motion.d.ts +37 -0
- package/types/sdui/motion.d.ts.map +1 -0
- package/types/sdui/precheck.d.ts +94 -0
- package/types/sdui/precheck.d.ts.map +1 -0
- package/types/sdui/scrollMath.d.ts +32 -0
- package/types/sdui/scrollMath.d.ts.map +1 -0
- package/types/sdui/style.d.ts +99 -0
- package/types/sdui/style.d.ts.map +1 -0
- package/types/sdui/triggerKit.d.ts +24 -0
- package/types/sdui/triggerKit.d.ts.map +1 -0
- package/types/sdui/unrunnable.d.ts +11 -0
- package/types/sdui/unrunnable.d.ts.map +1 -0
- package/types/sdui/vocabulary.d.ts +119 -0
- package/types/sdui/vocabulary.d.ts.map +1 -0
- package/types/triggers/claimReminder/ClaimReminder.d.ts +65 -0
- package/types/triggers/claimReminder/ClaimReminder.d.ts.map +1 -0
- package/types/triggers/claimReminder/bindings.d.ts +40 -0
- package/types/triggers/claimReminder/bindings.d.ts.map +1 -0
- package/types/triggers/claimReminder/config.d.ts +56 -0
- package/types/triggers/claimReminder/config.d.ts.map +1 -0
- package/types/triggers/claimReminder/eligibility.d.ts +37 -0
- package/types/triggers/claimReminder/eligibility.d.ts.map +1 -0
- package/types/triggers/claimReminder/servedWindow.d.ts +15 -0
- package/types/triggers/claimReminder/servedWindow.d.ts.map +1 -0
- package/types/triggers/claimReminder/source.d.ts +29 -0
- package/types/triggers/claimReminder/source.d.ts.map +1 -0
- package/types/triggers/giftsButton/GiftsButton.d.ts +60 -0
- package/types/triggers/giftsButton/GiftsButton.d.ts.map +1 -0
- package/types/triggers/giftsButton/config.d.ts +53 -0
- package/types/triggers/giftsButton/config.d.ts.map +1 -0
- package/types/triggers/giftsButton/spot.d.ts +54 -0
- package/types/triggers/giftsButton/spot.d.ts.map +1 -0
- package/types/triggers/host/TriggerHost.d.ts +127 -0
- package/types/triggers/host/TriggerHost.d.ts.map +1 -0
- package/types/triggers/host/autoPops.d.ts +16 -0
- package/types/triggers/host/autoPops.d.ts.map +1 -0
- package/types/triggers/host/configCache.d.ts +29 -0
- package/types/triggers/host/configCache.d.ts.map +1 -0
- package/types/triggers/host/customClaim.d.ts +85 -0
- package/types/triggers/host/customClaim.d.ts.map +1 -0
- package/types/triggers/host/dismissStore.d.ts +37 -0
- package/types/triggers/host/dismissStore.d.ts.map +1 -0
- package/types/triggers/host/readThrottle.d.ts +15 -0
- package/types/triggers/host/readThrottle.d.ts.map +1 -0
- package/types/triggers/host/registry.d.ts +17 -0
- package/types/triggers/host/registry.d.ts.map +1 -0
- package/types/triggers/host/sduiView.d.ts +31 -0
- package/types/triggers/host/sduiView.d.ts.map +1 -0
- package/types/triggers/host/template.d.ts +28 -0
- package/types/triggers/host/template.d.ts.map +1 -0
- package/types/triggers/host/textSlots.d.ts +35 -0
- package/types/triggers/host/textSlots.d.ts.map +1 -0
- package/types/triggers/host/theme.d.ts +87 -0
- package/types/triggers/host/theme.d.ts.map +1 -0
- package/types/triggers/host/timers.d.ts +11 -0
- package/types/triggers/host/timers.d.ts.map +1 -0
- package/types/triggers/host/types.d.ts +278 -0
- package/types/triggers/host/types.d.ts.map +1 -0
- package/types/triggers/host/wire.d.ts +55 -0
- package/types/triggers/host/wire.d.ts.map +1 -0
- package/types/triggers/preview.d.ts +78 -0
- package/types/triggers/preview.d.ts.map +1 -0
- package/types/triggers/request.d.ts +53 -0
- package/types/triggers/request.d.ts.map +1 -0
- package/types/types.d.ts +420 -4
- package/types/types.d.ts.map +1 -1
- package/types/ui/ClaimScreen.d.ts +62 -0
- package/types/ui/ClaimScreen.d.ts.map +1 -0
- package/types/ui/CodeUnlock.d.ts +26 -2
- package/types/ui/CodeUnlock.d.ts.map +1 -1
- package/types/ui/GiftHero.d.ts.map +1 -1
- package/types/ui/GiftList.d.ts.map +1 -1
- package/types/ui/GiftPicker.d.ts.map +1 -1
- package/types/ui/GiftPickerHero.d.ts.map +1 -1
- package/types/ui/GiftReveal.d.ts.map +1 -1
- package/types/ui/GiftSheet.d.ts +5 -5
- package/types/ui/GiftSheet.d.ts.map +1 -1
- package/types/ui/GiftUnwrap.d.ts.map +1 -1
- package/types/ui/OfferCard.d.ts.map +1 -1
- package/types/ui/OfferCarousel.d.ts.map +1 -1
- package/types/ui/OfferModal.d.ts +31 -6
- package/types/ui/OfferModal.d.ts.map +1 -1
- package/types/ui/PrimerScreen.d.ts +2 -0
- package/types/ui/PrimerScreen.d.ts.map +1 -1
- package/types/ui/RedemptionScreen.d.ts +5 -0
- package/types/ui/RedemptionScreen.d.ts.map +1 -1
- package/types/ui/RewardActions.d.ts.map +1 -1
- package/types/ui/RewardCard.d.ts.map +1 -1
- package/types/ui/SduiRewardSurface.d.ts +145 -0
- package/types/ui/SduiRewardSurface.d.ts.map +1 -0
- package/types/ui/Tooltip.d.ts.map +1 -1
- package/types/ui/brandComponents.d.ts.map +1 -1
- package/types/ui/brandTint.d.ts.map +1 -1
- package/types/ui/colorScheme.d.ts +15 -0
- package/types/ui/colorScheme.d.ts.map +1 -0
- package/types/ui/covered.d.ts +12 -0
- package/types/ui/covered.d.ts.map +1 -0
- package/types/ui/giftCategoryGroups.d.ts +13 -0
- package/types/ui/giftCategoryGroups.d.ts.map +1 -1
- package/types/ui/giftCopy.d.ts +14 -9
- package/types/ui/giftCopy.d.ts.map +1 -1
- package/types/ui/giftUnwrapCopy.d.ts.map +1 -1
- package/types/ui/imageURL.d.ts +44 -0
- package/types/ui/imageURL.d.ts.map +1 -0
- package/types/ui/impressionGate.d.ts +9 -0
- package/types/ui/impressionGate.d.ts.map +1 -1
- package/types/ui/offerBadge.d.ts.map +1 -1
- package/types/ui/rewardSurface.d.ts +11 -1
- package/types/ui/rewardSurface.d.ts.map +1 -1
- package/types/ui/sduiTheme.d.ts +48 -0
- package/types/ui/sduiTheme.d.ts.map +1 -0
- package/types/ui/sheetDetents.d.ts +28 -0
- package/types/ui/sheetDetents.d.ts.map +1 -0
- package/types/ui/styles.d.ts +11 -8
- package/types/ui/styles.d.ts.map +1 -1
- package/types/ui/termsLine.d.ts +3 -3
- package/types/ui/termsLine.d.ts.map +1 -1
- package/types/ui/toast.d.ts +11 -0
- package/types/ui/toast.d.ts.map +1 -0
- package/types/utils/logger.d.ts +10 -0
- package/types/utils/logger.d.ts.map +1 -1
- package/types/utils/text.d.ts +17 -0
- package/types/utils/text.d.ts.map +1 -1
|
@@ -104,6 +104,10 @@ export interface paths {
|
|
|
104
104
|
heroImageUrl?: string | null;
|
|
105
105
|
/** @description https link to the advertiser offer terms. Null or absent: render terms copy as plain text. */
|
|
106
106
|
termsUrl?: string | null;
|
|
107
|
+
/** @description Display-only strings a variant renders by key, e.g. {"eligibilityNote":"New subscribers only"}. Values are strings; the type is free-form so one unexpected value cannot fail a client decode. Absent or empty: the variant draws none of those lines. */
|
|
108
|
+
displayProperties?: {
|
|
109
|
+
[key: string]: unknown;
|
|
110
|
+
};
|
|
107
111
|
/** Format: date-time */
|
|
108
112
|
createdAt: string;
|
|
109
113
|
/** Format: date-time */
|
|
@@ -139,9 +143,10 @@ export interface paths {
|
|
|
139
143
|
ctaText: string;
|
|
140
144
|
/**
|
|
141
145
|
* Format: uri
|
|
142
|
-
* @description
|
|
146
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
143
147
|
*/
|
|
144
148
|
destinationUrl: string | null;
|
|
149
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
145
150
|
trackingParameters: {
|
|
146
151
|
[key: string]: unknown;
|
|
147
152
|
} | null;
|
|
@@ -152,6 +157,8 @@ export interface paths {
|
|
|
152
157
|
title: string;
|
|
153
158
|
subtitle: string;
|
|
154
159
|
ctaButtonText?: string;
|
|
160
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
161
|
+
imageUrl?: string;
|
|
155
162
|
}[] | null;
|
|
156
163
|
/** @description Short, actionable phrases (max 1-3) that guide users. Examples: "sign up, create registry", "add to cart" */
|
|
157
164
|
quickInstructions: string | null;
|
|
@@ -231,6 +238,8 @@ export interface paths {
|
|
|
231
238
|
"application/json": {
|
|
232
239
|
error: string;
|
|
233
240
|
details?: unknown;
|
|
241
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
242
|
+
code?: string;
|
|
234
243
|
};
|
|
235
244
|
};
|
|
236
245
|
};
|
|
@@ -283,8 +292,12 @@ export interface paths {
|
|
|
283
292
|
latitude?: string;
|
|
284
293
|
/** @description Decimal degrees as string (e.g., "-122.4194") */
|
|
285
294
|
longitude?: string;
|
|
295
|
+
/** @description Whole years, as an integer. If you hold only a RANGE, send its LOWEST end: "13-17" is sent as 13. Under 18 restricts this request to offers rated for that age, with no per-user personalisation. Used for this request only and never stored. Lower than an age stored through /users/attributes, it wins; higher, the stored one does. A fraction is rounded down, also as a decimal string ("17.9" is 17), a whole-number string is read as its number, and a range string as its lowest end ("13-17" is 13, "65+" is 65); any other value is ignored, never a 400. */
|
|
296
|
+
age?: number;
|
|
297
|
+
/** @description Deprecated: send age instead. A YYYY-MM-DD date, or an ISO 8601 date-time with a zone, is turned into an age for this request only, then discarded; never stored or logged. If age is also sent, the younger of the two is used. An unreadable date is ignored, never a 400. */
|
|
286
298
|
dateOfBirth?: string;
|
|
287
299
|
gender?: string;
|
|
300
|
+
/** @description BCP 47 language tag; only the language subtag is used for creative locale resolution, and only when the app has that language enabled. Falls back to Accept-Language, then the app default locale. */
|
|
288
301
|
language?: string;
|
|
289
302
|
subscriptionTier?: string;
|
|
290
303
|
monthsSubscribed?: string;
|
|
@@ -325,8 +338,17 @@ export interface paths {
|
|
|
325
338
|
variantId?: string;
|
|
326
339
|
/** @description Publisher-defined surface label for where the offer is shown (e.g. 'paywall', 'onboarding', 'settings'). Stamped onto the sdk_offer_requested event so publisher analytics can break the funnel out by placement. An Encore admin can also configure a per-placement offer rule for an app, in which case this label SELECTS and ORDERS the offers returned for that placement; with no rule configured, which is the default for every app, it stays analytics-only and changes nothing about what is served. Max 64 chars. SDKs may send their own auto-generated `placement_<8 hex>` id when the publisher supplied none — that is expected and is folded into the '(unlabeled)' bucket at read time; do NOT substitute '(unlabeled)' or an empty string yourself. */
|
|
327
340
|
placementId?: string;
|
|
341
|
+
/**
|
|
342
|
+
* @description Which Encore surface is being filled. Ignored while OFFERS_SEARCH_RESOLVES_SURFACE is off. With it on and no variantId, the server resolves the variant for this use case (and the placementId pin) as GET /config does; a sent variantId always wins. Absent or unrecognised: today's behaviour (churn-intervention). Never a 400.
|
|
343
|
+
* @enum {string}
|
|
344
|
+
*/
|
|
345
|
+
useCase?: "churn-intervention" | "post-action-reward";
|
|
328
346
|
/** @description Strict unlock mode: only include campaigns whose postback latency is less than or equal to this value (in milliseconds). Omit for no filtering. Bounded 1000..120000. */
|
|
329
347
|
maxPostbackTimeMs?: number;
|
|
348
|
+
/** @description Send only when this placement carries the app's own prize for a reward-for-trying Yes: the app's daily prize limit from its SDK configuration (PublisherRewardPolicy), clamped server-side to 1..10. The response then carries publisherRewardPromise. Omit it and nothing changes. */
|
|
349
|
+
publisherRewardDailyLimit?: number;
|
|
350
|
+
/** @description Why the client is searching. `purpose: "prefetch"` marks a search the SDK runs before any sheet is shown (a GiftsButton or ClaimReminder checking that offers exist). Its result may later back the sheet the user opens with a tap, so it is a served request like any other, not an impression. It is stamped as purpose on sdk_offer_requested so a report can split these out. Any other value is ignored, never a 400. Serving is identical either way. */
|
|
351
|
+
purpose?: string;
|
|
330
352
|
/** @description Request-scoped serving context. Unknown keys are ignored. */
|
|
331
353
|
context?: {
|
|
332
354
|
/** @description Request-scoped activity the user is engaged in at serve time (what the surface is being used for, not a persisted user property). Recognized values: laundry, vending, car_wash, air_vacuum, amusement. Any other value is accepted and recorded on serve analytics, so unrecognized activities show up in reporting rather than failing the request. Does not change which offers are served today. */
|
|
@@ -409,6 +431,10 @@ export interface paths {
|
|
|
409
431
|
heroImageUrl?: string | null;
|
|
410
432
|
/** @description https link to the advertiser offer terms. Null or absent: render terms copy as plain text. */
|
|
411
433
|
termsUrl?: string | null;
|
|
434
|
+
/** @description Display-only strings a variant renders by key, e.g. {"eligibilityNote":"New subscribers only"}. Values are strings; the type is free-form so one unexpected value cannot fail a client decode. Absent or empty: the variant draws none of those lines. */
|
|
435
|
+
displayProperties?: {
|
|
436
|
+
[key: string]: unknown;
|
|
437
|
+
};
|
|
412
438
|
/** Format: date-time */
|
|
413
439
|
createdAt: string;
|
|
414
440
|
/** Format: date-time */
|
|
@@ -444,9 +470,10 @@ export interface paths {
|
|
|
444
470
|
ctaText: string;
|
|
445
471
|
/**
|
|
446
472
|
* Format: uri
|
|
447
|
-
* @description
|
|
473
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
448
474
|
*/
|
|
449
475
|
destinationUrl: string | null;
|
|
476
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
450
477
|
trackingParameters: {
|
|
451
478
|
[key: string]: unknown;
|
|
452
479
|
} | null;
|
|
@@ -457,6 +484,8 @@ export interface paths {
|
|
|
457
484
|
title: string;
|
|
458
485
|
subtitle: string;
|
|
459
486
|
ctaButtonText?: string;
|
|
487
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
488
|
+
imageUrl?: string;
|
|
460
489
|
}[] | null;
|
|
461
490
|
/** @description Short, actionable phrases (max 1-3) that guide users. Examples: "sign up, create registry", "add to cart" */
|
|
462
491
|
quickInstructions: string | null;
|
|
@@ -523,11 +552,48 @@ export interface paths {
|
|
|
523
552
|
category?: string | null;
|
|
524
553
|
/** @description The gift-sheet group this campaign files under: "Watch & listen", "Money" or "Everyday". Derived from `category` by the server so a native chip strip shows what web tabs show without holding the taxonomy map. Always set: an absent, blank or unmapped category files under "Everyday", so every offer sits in some group. Whether a strip is worth drawing is the client's call, because only it knows which offers its sheet lists. /offers/search only: web-sdk holds its own copy of the map and groups `category` itself. */
|
|
525
554
|
categoryGroup?: string | null;
|
|
555
|
+
/** @description `category` in the response locale, for display only. Group and filter on `category`, which stays English. Null when `category` is null. /offers/search only. */
|
|
556
|
+
categoryDisplayName?: string | null;
|
|
557
|
+
/** @description `categoryGroup` in the response locale, for display only. Group on `categoryGroup`, which stays English. /offers/search only. */
|
|
558
|
+
categoryGroupDisplayName?: string | null;
|
|
526
559
|
/** @description Estimated time from the user tapping this offer to the reward being confirmed, from recent real conversions (on demo offers, from the demo advertiser's configured behavior instead). Half confirm within medianSeconds, 9 in 10 within p90Seconds. Not a guarantee: to show a wait, use p90Seconds. Null when there is no current estimate (too few recent conversions, data more than 7 days old, or an offer that does not confirm through the advertiser); say nothing about timing then. */
|
|
527
560
|
rewardConfirmationTime?: {
|
|
528
561
|
medianSeconds: number;
|
|
529
562
|
p90Seconds: number;
|
|
530
563
|
} | null;
|
|
564
|
+
/** @description This offer's per-offer reward. Present only for an app with reward settings; null when the offer carries no value: in on_yes show the placement's flat prize, in on_verified show no prize (a null value is never paid). Absent: the app has no per-offer rewards. /offers/search only. */
|
|
565
|
+
publisherRewardValue?: {
|
|
566
|
+
/** @description Tokens this offer is worth in the app's own unit. The offer_completed webhook's reward.amount carries the value frozen when the user claimed. */
|
|
567
|
+
amount: number;
|
|
568
|
+
/** @description Ready-to-render card text, e.g. "1,500 tokens". Show it in place of the flat PublisherReward title. */
|
|
569
|
+
label: string;
|
|
570
|
+
} | null;
|
|
571
|
+
/** @description Campaign claim-URL query parameters, keys verbatim (e.g. {"af_rid":"TRANSACTION_ID"}); equals the served creative's whenever one exists. Always pair it with the offer's destinationUrl, never with a creative's, and never build a claim URL from an absent or empty value. Absent from servers that predate it; null means the campaign has none. */
|
|
572
|
+
trackingParameters?: {
|
|
573
|
+
[key: string]: unknown;
|
|
574
|
+
} | null;
|
|
575
|
+
/** @description Campaign call-to-action text. Absent from servers that predate it; null means the campaign has none. */
|
|
576
|
+
ctaText?: string | null;
|
|
577
|
+
/** @description Campaign description, localized like creatives. Absent from servers that predate it; null means the campaign has none. */
|
|
578
|
+
description?: string | null;
|
|
579
|
+
/** @description Campaign step-by-step instructions, same shape as a creative's. Absent from servers that predate it; null means the campaign has none. */
|
|
580
|
+
instructions?: {
|
|
581
|
+
title: string;
|
|
582
|
+
subtitle: string;
|
|
583
|
+
ctaButtonText?: string;
|
|
584
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
585
|
+
imageUrl?: string;
|
|
586
|
+
}[] | null;
|
|
587
|
+
/** @description Campaign one-line instructions. Absent from servers that predate it; null means the campaign has none. */
|
|
588
|
+
quickInstructions?: string | null;
|
|
589
|
+
/** @description Campaign logo override; null means use organization.logoUrl. Plain string, not format: uri, so one bad value cannot fail a whole Android decode. Absent from servers that predate it; null means the campaign has none. */
|
|
590
|
+
logoUrl?: string | null;
|
|
591
|
+
/** @description Campaign card title. Absent from servers that predate it; null means the campaign has none. */
|
|
592
|
+
title?: string | null;
|
|
593
|
+
/** @description Campaign card subtitle. Absent from servers that predate it; null means the campaign has none. */
|
|
594
|
+
subtitle?: string | null;
|
|
595
|
+
/** @description Campaign tooltip text. Absent from servers that predate it; null means the campaign has none. */
|
|
596
|
+
tooltipText?: string | null;
|
|
531
597
|
}[];
|
|
532
598
|
metadata: {
|
|
533
599
|
/** @description Total offers available */
|
|
@@ -545,6 +611,13 @@ export interface paths {
|
|
|
545
611
|
};
|
|
546
612
|
/** @description Resolved locale served in this response (language-only, e.g. 'es'). Absent on pre-localization responses. */
|
|
547
613
|
locale?: string;
|
|
614
|
+
/** @description Whether this user is still under the app's daily prize limit (publisherRewardDailyLimit, rolling 24 hours). What counts depends on publisherRewardMode. on_yes (or no mode): prizes granted on a reward-for-trying Yes. on_verified: this user's verified completions that carried a reward, by when they verified; a Yes never grants and never counts, and the reward arrives on the offer_completed webhook. Present only when the request sent publisherRewardDailyLimit. Offers this user already completed or said Yes to are never served, so this answers the daily limit only. Absent (an older backend, or no limit sent) means no promise. Not a grant: in on_yes the self-report's granted answer is final. */
|
|
615
|
+
publisherRewardPromise?: boolean;
|
|
616
|
+
/**
|
|
617
|
+
* @description How this app pays its prize. on_yes: a reward-for-trying Yes can grant it (self-report granted). on_verified: a Yes never grants; each offer's publisherRewardValue arrives on the offer_completed webhook when the brand confirms. Present only for an app with reward settings (and always when the promise was counted under on_verified). Decode as a string and treat an unknown value as on_yes.
|
|
618
|
+
* @enum {string}
|
|
619
|
+
*/
|
|
620
|
+
publisherRewardMode?: "on_yes" | "on_verified";
|
|
548
621
|
error?: string | null;
|
|
549
622
|
};
|
|
550
623
|
};
|
|
@@ -558,6 +631,8 @@ export interface paths {
|
|
|
558
631
|
"application/json": {
|
|
559
632
|
error: string;
|
|
560
633
|
details?: unknown;
|
|
634
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
635
|
+
code?: string;
|
|
561
636
|
};
|
|
562
637
|
};
|
|
563
638
|
};
|
|
@@ -570,6 +645,8 @@ export interface paths {
|
|
|
570
645
|
"application/json": {
|
|
571
646
|
error: string;
|
|
572
647
|
details?: unknown;
|
|
648
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
649
|
+
code?: string;
|
|
573
650
|
};
|
|
574
651
|
};
|
|
575
652
|
};
|
|
@@ -582,6 +659,8 @@ export interface paths {
|
|
|
582
659
|
"application/json": {
|
|
583
660
|
error: string;
|
|
584
661
|
details?: unknown;
|
|
662
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
663
|
+
code?: string;
|
|
585
664
|
};
|
|
586
665
|
};
|
|
587
666
|
};
|
|
@@ -594,6 +673,8 @@ export interface paths {
|
|
|
594
673
|
"application/json": {
|
|
595
674
|
error: string;
|
|
596
675
|
details?: unknown;
|
|
676
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
677
|
+
code?: string;
|
|
597
678
|
};
|
|
598
679
|
};
|
|
599
680
|
};
|
|
@@ -614,7 +695,7 @@ export interface paths {
|
|
|
614
695
|
};
|
|
615
696
|
get?: never;
|
|
616
697
|
put?: never;
|
|
617
|
-
/** @description Rebrokering catalog: the full set of offers your app may serve to a given end user, to render on your own surface. Two hard, server-enforced filters always apply: entitlement (your app's opt-outs + whitelist) and geo (offers not redeemable in the end user's country are dropped: non-redeemable offers are never returned). Serve path requires `userId` (a stable end-user identifier) and geo (`countryCode`, or the end user's IP forwarded via X-Forwarded-For); missing either is a 400. Each returned creative carries a tokenized `clickUrl`: route the end user there on tap and it records an attributed transaction (bound to your app, the offer, the creative, and the userId) then 302s to the advertiser. Filter to your curated offer IDs and order CLIENT-SIDE, falling back to other returned offers so your surface is never empty (the server does not narrow to your picks). Set `includeAllRegions: true` for config-time discovery of your full addressable inventory (skips geo, needs no userId, returns no clickUrls; each offer carries targetCountries); not for display. Authentication: publishable key (X-API-Key: pk_live_* / pk_test_*). */
|
|
698
|
+
/** @description Rebrokering catalog: the full set of offers your app may serve to a given end user, to render on your own surface. Two hard, server-enforced filters always apply: entitlement (your app's opt-outs + whitelist) and geo (offers not redeemable in the end user's country are dropped: non-redeemable offers are never returned). Serve path requires `userId` (a stable end-user identifier) and geo (`countryCode`, or the end user's IP forwarded via X-Forwarded-For); missing either is a 400. On the serve path, offers this end user already completed (a confirmed conversion, or a Yes they reported through an Encore SDK) are left out. Each returned creative carries a tokenized `clickUrl`: route the end user there on tap and it records an attributed transaction (bound to your app, the offer, the creative, and the userId) then 302s to the advertiser. Filter to your curated offer IDs and order CLIENT-SIDE, falling back to other returned offers so your surface is never empty (the server does not narrow to your picks). Set `includeAllRegions: true` for config-time discovery of your full addressable inventory (skips geo, needs no userId, returns no clickUrls; each offer carries targetCountries); not for display. Authentication: publishable key (X-API-Key: pk_live_* / pk_test_*). */
|
|
618
699
|
post: {
|
|
619
700
|
parameters: {
|
|
620
701
|
query?: never;
|
|
@@ -625,7 +706,7 @@ export interface paths {
|
|
|
625
706
|
requestBody?: {
|
|
626
707
|
content: {
|
|
627
708
|
"application/json": {
|
|
628
|
-
/** @description Stable identifier for the END USER you are rendering offers to (any opaque string; does not need to be PII). REQUIRED on the serve path — it is bound into each offer's clickUrl so a click records a transaction attributed to (your app, the offer, the creative, this user),
|
|
709
|
+
/** @description Stable identifier for the END USER you are rendering offers to (any opaque string; does not need to be PII). REQUIRED on the serve path — it is bound into each offer's clickUrl so a click records a transaction attributed to (your app, the offer, the creative, this user), it drives per-user fraud controls (trial caps, retake blocking) at click time, and on the serve path it leaves out offers this user already completed. Use the same value across renders for the same user. Not required when includeAllRegions is set (config mode returns no clickUrls). */
|
|
629
710
|
userId?: string;
|
|
630
711
|
/** @description Optional identifier for the operator/sub-publisher on whose behalf offers are shown. Carried through as an analytics dimension. Defaults to userId when omitted. */
|
|
631
712
|
clientId?: string;
|
|
@@ -638,6 +719,8 @@ export interface paths {
|
|
|
638
719
|
platform?: "android" | "ios" | "web";
|
|
639
720
|
/** @description Optional publisher-defined label for the surface this offer is shown on (e.g. 'cancel_flow', 'home_feed', 'post_purchase'). Stamped onto the impression AND onto the click it produces, so publisher analytics can break the funnel out by placement. Normalised server-side: a blank value is treated as absent, anything longer than 64 characters is TRUNCATED rather than rejected, and the stored label NEVER carries leading or trailing whitespace, including after truncation, so ' my label ' and 'my label' are always one placement and can never show up as two rows. Case IS significant: 'Cancel_Flow' and 'cancel_flow' are different placements. Omit it and this traffic groups under '(unlabeled)', the same bucket as an SDK integration that supplies no placement. A per-placement offer rule NEVER applies here. `/offers/catalog` returns inventory rather than a served set, so a rule configured for this label does not select or order what comes back. Scope an inventory pull on your own filters, never on a rule. */
|
|
640
721
|
placementId?: string;
|
|
722
|
+
/** @description Optional BCP 47 language tag (e.g. "es", "pt-BR"), from the host's language override. Wins over Accept-Language; only the language subtag is used (nb is served as no; iw, in, ji, jw as he, id, yi, jv), and only when the app has it enabled, else Accept-Language, then the app default. A tag the SDKs would refuse (malformed, underscores, or an extended language subtag such as zh-yue-HK) is 400 with details.code INVALID_LANGUAGE. */
|
|
723
|
+
language?: string;
|
|
641
724
|
/** @description CONFIG-TIME ONLY. When true, skips geo-filtering and returns the full addressable inventory for your app (entitlement still applies), with each offer's targetCountries — use this to build your curation. Do NOT use for offers displayed to an end user; those must come from a geo-scoped request (countryCode or forwarded IP). When true, no geography signal is required and countryCode is ignored. */
|
|
642
725
|
includeAllRegions?: boolean;
|
|
643
726
|
/** @description Optional page size (1..100). OMIT to return ALL eligible offers (the default) — catalogs are small enough that you normally take the whole set and curate client-side. Provide only if you want to page (with offset). */
|
|
@@ -680,6 +763,10 @@ export interface paths {
|
|
|
680
763
|
isDemo?: boolean;
|
|
681
764
|
/** @description https link to the advertiser offer terms. Null or absent: render terms copy as plain text. */
|
|
682
765
|
termsUrl?: string | null;
|
|
766
|
+
/** @description Display-only strings a variant renders by key, e.g. {"eligibilityNote":"New subscribers only"}. Values are strings; the type is free-form so one unexpected value cannot fail a client decode. Absent or empty: the variant draws none of those lines. */
|
|
767
|
+
displayProperties?: {
|
|
768
|
+
[key: string]: unknown;
|
|
769
|
+
};
|
|
683
770
|
/** @description Estimated time from the user tapping this offer to the reward being confirmed, from recent real conversions (on demo offers, from the demo advertiser's configured behavior instead). Half confirm within medianSeconds, 9 in 10 within p90Seconds. Not a guarantee: to show a wait, use p90Seconds. Null when there is no current estimate (too few recent conversions, data more than 7 days old, or an offer that does not confirm through the advertiser); say nothing about timing then. */
|
|
684
771
|
rewardConfirmationTime?: {
|
|
685
772
|
medianSeconds: number;
|
|
@@ -712,6 +799,8 @@ export interface paths {
|
|
|
712
799
|
title: string;
|
|
713
800
|
subtitle: string;
|
|
714
801
|
ctaButtonText?: string;
|
|
802
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
803
|
+
imageUrl?: string;
|
|
715
804
|
}[] | null;
|
|
716
805
|
/** @description A short one line version of the instructions, e.g. "sign up, complete one survey". Null or absent: the creative has none. */
|
|
717
806
|
quickInstructions?: string | null;
|
|
@@ -744,6 +833,8 @@ export interface paths {
|
|
|
744
833
|
"application/json": {
|
|
745
834
|
error: string;
|
|
746
835
|
details?: unknown;
|
|
836
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
837
|
+
code?: string;
|
|
747
838
|
};
|
|
748
839
|
};
|
|
749
840
|
};
|
|
@@ -756,6 +847,8 @@ export interface paths {
|
|
|
756
847
|
"application/json": {
|
|
757
848
|
error: string;
|
|
758
849
|
details?: unknown;
|
|
850
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
851
|
+
code?: string;
|
|
759
852
|
};
|
|
760
853
|
};
|
|
761
854
|
};
|
|
@@ -768,6 +861,8 @@ export interface paths {
|
|
|
768
861
|
"application/json": {
|
|
769
862
|
error: string;
|
|
770
863
|
details?: unknown;
|
|
864
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
865
|
+
code?: string;
|
|
771
866
|
};
|
|
772
867
|
};
|
|
773
868
|
};
|
|
@@ -807,13 +902,35 @@ export interface paths {
|
|
|
807
902
|
attributes: {
|
|
808
903
|
/** @description ISO 3166-1 alpha-2 country code (e.g., "US", "GB", "CA"). */
|
|
809
904
|
countryCode: string;
|
|
810
|
-
/** @description BCP 47 language tag
|
|
905
|
+
/** @description BCP 47 language tag; only the language subtag is used for creative locale resolution, and only when the app has that language enabled. Falls back to Accept-Language, then the app default locale. */
|
|
811
906
|
language: string;
|
|
812
907
|
/**
|
|
813
908
|
* @description Recipient's device platform — drives creative compatibility filtering. Optional: omit for a platform='api' app to receive all eligible offers untrimmed; device-SDK apps always send it. 'api' is not a valid value here.
|
|
814
909
|
* @enum {string}
|
|
815
910
|
*/
|
|
816
911
|
platform?: "android" | "ios" | "web";
|
|
912
|
+
/** @description Device OS version, e.g. '14' or '17.5.1'. Optional; a malformed value is ignored. */
|
|
913
|
+
osVersion?: string | null;
|
|
914
|
+
/** @description The END DEVICE's user agent, not the caller's. On the API lane the publisher's server calls us, so the header we see is theirs. Optional; a malformed value is ignored. */
|
|
915
|
+
userAgent?: string | null;
|
|
916
|
+
/** @description Device advertising id, unhashed: IDFA on iOS, GAID/GPID on Android. Optional, and accepted only from an app whose `deviceIdentifiersMode` is enabled and which is not declared for children or likely used by them; ignored otherwise. Must be a UUID; an all-zero id reads as absent. */
|
|
917
|
+
advertisingId?: string | null;
|
|
918
|
+
/** @description True when the user has limited ad tracking. Accepts OpenRTB's 0/1 integer too. A consent signal, not a device attribute. Optional; a malformed value counts as true. */
|
|
919
|
+
limitAdTracking?: (boolean | null) | 0 | 1;
|
|
920
|
+
/** @description OpenRTB `device.dnt`. A consent signal like `limitAdTracking`, and equally underivable. Accepts 0/1 too. Optional; a malformed value counts as true. */
|
|
921
|
+
doNotTrack?: (boolean | null) | 0 | 1;
|
|
922
|
+
/** @description Public IPv4 or IPv6 address of the END DEVICE, never your server's. Same gate as `advertisingId`. Optional; a malformed, private or reserved address is ignored. */
|
|
923
|
+
deviceIp?: string | null;
|
|
924
|
+
/** @description OpenRTB `regs.gdpr`: true when GDPR applies to this user. Accepts 0/1 too. Optional; a malformed value counts as true. */
|
|
925
|
+
gdprApplies?: (boolean | null) | 0 | 1;
|
|
926
|
+
/** @description IAB TCF consent string from your consent tool, forwarded as `user.consent`. Optional; a malformed value is ignored. */
|
|
927
|
+
consentString?: string | null;
|
|
928
|
+
/** @description IAB Global Privacy Platform string, forwarded as `regs.gpp`. Optional; a malformed value counts as an opt-out. */
|
|
929
|
+
gpp?: string | null;
|
|
930
|
+
/** @description GPP section ids in force, forwarded as `regs.gpp_sid`. Optional; a malformed value counts as an opt-out. */
|
|
931
|
+
gppSid?: number[] | null;
|
|
932
|
+
/** @description IAB US Privacy string, e.g. '1YNN', forwarded as `regs.us_privacy`. Optional; a malformed value counts as an opt-out. */
|
|
933
|
+
usPrivacy?: string | null;
|
|
817
934
|
};
|
|
818
935
|
/** @description Optional publisher-defined label for the surface this offer is shown on (e.g. 'cancel_flow', 'home_feed', 'post_purchase'). Stamped onto the impression AND onto the click it produces, so publisher analytics can break the funnel out by placement. Normalised server-side: a blank value is treated as absent, anything longer than 64 characters is TRUNCATED rather than rejected, and the stored label NEVER carries leading or trailing whitespace, including after truncation, so ' my label ' and 'my label' are always one placement and can never show up as two rows. Case IS significant: 'Cancel_Flow' and 'cancel_flow' are different placements. Omit it and this traffic groups under '(unlabeled)', the same bucket as an SDK integration that supplies no placement. An Encore admin can also configure a per-placement offer rule for an app, in which case this label SELECTS and ORDERS the offers returned for that placement; with no rule configured, which is the default for every app, it stays analytics-only and changes nothing about what is served. */
|
|
819
936
|
placementId?: string;
|
|
@@ -875,6 +992,8 @@ export interface paths {
|
|
|
875
992
|
"application/json": {
|
|
876
993
|
error: string;
|
|
877
994
|
details?: unknown;
|
|
995
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
996
|
+
code?: string;
|
|
878
997
|
};
|
|
879
998
|
};
|
|
880
999
|
};
|
|
@@ -887,6 +1006,8 @@ export interface paths {
|
|
|
887
1006
|
"application/json": {
|
|
888
1007
|
error: string;
|
|
889
1008
|
details?: unknown;
|
|
1009
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1010
|
+
code?: string;
|
|
890
1011
|
};
|
|
891
1012
|
};
|
|
892
1013
|
};
|
|
@@ -899,6 +1020,8 @@ export interface paths {
|
|
|
899
1020
|
"application/json": {
|
|
900
1021
|
error: string;
|
|
901
1022
|
details?: unknown;
|
|
1023
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1024
|
+
code?: string;
|
|
902
1025
|
};
|
|
903
1026
|
};
|
|
904
1027
|
};
|
|
@@ -938,13 +1061,35 @@ export interface paths {
|
|
|
938
1061
|
attributes: {
|
|
939
1062
|
/** @description ISO 3166-1 alpha-2 country code (e.g., "US", "GB", "CA"). */
|
|
940
1063
|
countryCode: string;
|
|
941
|
-
/** @description BCP 47 language tag
|
|
1064
|
+
/** @description BCP 47 language tag; only the language subtag is used for creative locale resolution, and only when the app has that language enabled. Falls back to Accept-Language, then the app default locale. */
|
|
942
1065
|
language: string;
|
|
943
1066
|
/**
|
|
944
1067
|
* @description Recipient's device platform — drives creative compatibility filtering. Optional: omit for a platform='api' app to receive all eligible offers untrimmed; device-SDK apps always send it. 'api' is not a valid value here.
|
|
945
1068
|
* @enum {string}
|
|
946
1069
|
*/
|
|
947
1070
|
platform?: "android" | "ios" | "web";
|
|
1071
|
+
/** @description Device OS version, e.g. '14' or '17.5.1'. Optional; a malformed value is ignored. */
|
|
1072
|
+
osVersion?: string | null;
|
|
1073
|
+
/** @description The END DEVICE's user agent, not the caller's. On the API lane the publisher's server calls us, so the header we see is theirs. Optional; a malformed value is ignored. */
|
|
1074
|
+
userAgent?: string | null;
|
|
1075
|
+
/** @description Device advertising id, unhashed: IDFA on iOS, GAID/GPID on Android. Optional, and accepted only from an app whose `deviceIdentifiersMode` is enabled and which is not declared for children or likely used by them; ignored otherwise. Must be a UUID; an all-zero id reads as absent. */
|
|
1076
|
+
advertisingId?: string | null;
|
|
1077
|
+
/** @description True when the user has limited ad tracking. Accepts OpenRTB's 0/1 integer too. A consent signal, not a device attribute. Optional; a malformed value counts as true. */
|
|
1078
|
+
limitAdTracking?: (boolean | null) | 0 | 1;
|
|
1079
|
+
/** @description OpenRTB `device.dnt`. A consent signal like `limitAdTracking`, and equally underivable. Accepts 0/1 too. Optional; a malformed value counts as true. */
|
|
1080
|
+
doNotTrack?: (boolean | null) | 0 | 1;
|
|
1081
|
+
/** @description Public IPv4 or IPv6 address of the END DEVICE, never your server's. Same gate as `advertisingId`. Optional; a malformed, private or reserved address is ignored. */
|
|
1082
|
+
deviceIp?: string | null;
|
|
1083
|
+
/** @description OpenRTB `regs.gdpr`: true when GDPR applies to this user. Accepts 0/1 too. Optional; a malformed value counts as true. */
|
|
1084
|
+
gdprApplies?: (boolean | null) | 0 | 1;
|
|
1085
|
+
/** @description IAB TCF consent string from your consent tool, forwarded as `user.consent`. Optional; a malformed value is ignored. */
|
|
1086
|
+
consentString?: string | null;
|
|
1087
|
+
/** @description IAB Global Privacy Platform string, forwarded as `regs.gpp`. Optional; a malformed value counts as an opt-out. */
|
|
1088
|
+
gpp?: string | null;
|
|
1089
|
+
/** @description GPP section ids in force, forwarded as `regs.gpp_sid`. Optional; a malformed value counts as an opt-out. */
|
|
1090
|
+
gppSid?: number[] | null;
|
|
1091
|
+
/** @description IAB US Privacy string, e.g. '1YNN', forwarded as `regs.us_privacy`. Optional; a malformed value counts as an opt-out. */
|
|
1092
|
+
usPrivacy?: string | null;
|
|
948
1093
|
};
|
|
949
1094
|
/**
|
|
950
1095
|
* @description Maximum number of offers to return (1–25, default 10). The client controls display order and cycles through them one at a time.
|
|
@@ -1014,6 +1159,10 @@ export interface paths {
|
|
|
1014
1159
|
heroImageUrl?: string | null;
|
|
1015
1160
|
/** @description https link to the advertiser offer terms. Null or absent: render terms copy as plain text. */
|
|
1016
1161
|
termsUrl?: string | null;
|
|
1162
|
+
/** @description Display-only strings a variant renders by key, e.g. {"eligibilityNote":"New subscribers only"}. Values are strings; the type is free-form so one unexpected value cannot fail a client decode. Absent or empty: the variant draws none of those lines. */
|
|
1163
|
+
displayProperties?: {
|
|
1164
|
+
[key: string]: unknown;
|
|
1165
|
+
};
|
|
1017
1166
|
/** @description Display name of the campaign category, e.g. "Music and Audio". Free string: the taxonomy is admin-editable, so accept any value. */
|
|
1018
1167
|
category?: string | null;
|
|
1019
1168
|
/** @description Step by step instructions from the creative, translated like the title. Null or absent: the creative has none. */
|
|
@@ -1021,6 +1170,8 @@ export interface paths {
|
|
|
1021
1170
|
title: string;
|
|
1022
1171
|
subtitle: string;
|
|
1023
1172
|
ctaButtonText?: string;
|
|
1173
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
1174
|
+
imageUrl?: string;
|
|
1024
1175
|
}[] | null;
|
|
1025
1176
|
/** @description A short one line version of the instructions, e.g. "sign up, complete one survey". Null or absent: the creative has none. */
|
|
1026
1177
|
quickInstructions?: string | null;
|
|
@@ -1042,6 +1193,8 @@ export interface paths {
|
|
|
1042
1193
|
"application/json": {
|
|
1043
1194
|
error: string;
|
|
1044
1195
|
details?: unknown;
|
|
1196
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1197
|
+
code?: string;
|
|
1045
1198
|
};
|
|
1046
1199
|
};
|
|
1047
1200
|
};
|
|
@@ -1054,6 +1207,8 @@ export interface paths {
|
|
|
1054
1207
|
"application/json": {
|
|
1055
1208
|
error: string;
|
|
1056
1209
|
details?: unknown;
|
|
1210
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1211
|
+
code?: string;
|
|
1057
1212
|
};
|
|
1058
1213
|
};
|
|
1059
1214
|
};
|
|
@@ -1066,6 +1221,8 @@ export interface paths {
|
|
|
1066
1221
|
"application/json": {
|
|
1067
1222
|
error: string;
|
|
1068
1223
|
details?: unknown;
|
|
1224
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1225
|
+
code?: string;
|
|
1069
1226
|
};
|
|
1070
1227
|
};
|
|
1071
1228
|
};
|
|
@@ -1129,6 +1286,8 @@ export interface paths {
|
|
|
1129
1286
|
"application/json": {
|
|
1130
1287
|
error: string;
|
|
1131
1288
|
details?: unknown;
|
|
1289
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1290
|
+
code?: string;
|
|
1132
1291
|
};
|
|
1133
1292
|
};
|
|
1134
1293
|
};
|
|
@@ -1141,6 +1300,8 @@ export interface paths {
|
|
|
1141
1300
|
"application/json": {
|
|
1142
1301
|
error: string;
|
|
1143
1302
|
details?: unknown;
|
|
1303
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1304
|
+
code?: string;
|
|
1144
1305
|
};
|
|
1145
1306
|
};
|
|
1146
1307
|
};
|
|
@@ -1153,6 +1314,8 @@ export interface paths {
|
|
|
1153
1314
|
"application/json": {
|
|
1154
1315
|
error: string;
|
|
1155
1316
|
details?: unknown;
|
|
1317
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1318
|
+
code?: string;
|
|
1156
1319
|
};
|
|
1157
1320
|
};
|
|
1158
1321
|
};
|
|
@@ -1173,7 +1336,7 @@ export interface paths {
|
|
|
1173
1336
|
};
|
|
1174
1337
|
get?: never;
|
|
1175
1338
|
put?: never;
|
|
1176
|
-
/** @description Create a new transaction for a specific campaign */
|
|
1339
|
+
/** @description Create a new transaction for a specific campaign. 409 with code 'offerAlreadyCompleted' when this user already completed the offer, or said Yes to it through a self-report: drop the offer from the list rather than retrying. The app-wide trial-limit 409 carries no code. */
|
|
1177
1340
|
post: {
|
|
1178
1341
|
parameters: {
|
|
1179
1342
|
query?: never;
|
|
@@ -1191,6 +1354,11 @@ export interface paths {
|
|
|
1191
1354
|
* @enum {string}
|
|
1192
1355
|
*/
|
|
1193
1356
|
useCase?: "churn-intervention" | "post-action-reward";
|
|
1357
|
+
/**
|
|
1358
|
+
* Format: uuid
|
|
1359
|
+
* @description The id of the variant whose remote template rendered this sheet. Absent when the embedded floor rendered. A per-offer reward is frozen on the transaction only when this variant shows per-offer reward values; absent, malformed or unknown means none is frozen. Never a 400.
|
|
1360
|
+
*/
|
|
1361
|
+
variantId?: string;
|
|
1194
1362
|
};
|
|
1195
1363
|
};
|
|
1196
1364
|
};
|
|
@@ -1230,6 +1398,8 @@ export interface paths {
|
|
|
1230
1398
|
"application/json": {
|
|
1231
1399
|
error: string;
|
|
1232
1400
|
details?: unknown;
|
|
1401
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1402
|
+
code?: string;
|
|
1233
1403
|
};
|
|
1234
1404
|
};
|
|
1235
1405
|
};
|
|
@@ -1242,6 +1412,8 @@ export interface paths {
|
|
|
1242
1412
|
"application/json": {
|
|
1243
1413
|
error: string;
|
|
1244
1414
|
details?: unknown;
|
|
1415
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1416
|
+
code?: string;
|
|
1245
1417
|
};
|
|
1246
1418
|
};
|
|
1247
1419
|
};
|
|
@@ -1254,6 +1426,8 @@ export interface paths {
|
|
|
1254
1426
|
"application/json": {
|
|
1255
1427
|
error: string;
|
|
1256
1428
|
details?: unknown;
|
|
1429
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1430
|
+
code?: string;
|
|
1257
1431
|
};
|
|
1258
1432
|
};
|
|
1259
1433
|
};
|
|
@@ -1266,6 +1440,8 @@ export interface paths {
|
|
|
1266
1440
|
"application/json": {
|
|
1267
1441
|
error: string;
|
|
1268
1442
|
details?: unknown;
|
|
1443
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1444
|
+
code?: string;
|
|
1269
1445
|
};
|
|
1270
1446
|
};
|
|
1271
1447
|
};
|
|
@@ -1278,6 +1454,139 @@ export interface paths {
|
|
|
1278
1454
|
"application/json": {
|
|
1279
1455
|
error: string;
|
|
1280
1456
|
details?: unknown;
|
|
1457
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1458
|
+
code?: string;
|
|
1459
|
+
};
|
|
1460
|
+
};
|
|
1461
|
+
};
|
|
1462
|
+
};
|
|
1463
|
+
};
|
|
1464
|
+
delete?: never;
|
|
1465
|
+
options?: never;
|
|
1466
|
+
head?: never;
|
|
1467
|
+
patch?: never;
|
|
1468
|
+
trace?: never;
|
|
1469
|
+
};
|
|
1470
|
+
"/publisher/sdk/v1/transactions/preload": {
|
|
1471
|
+
parameters: {
|
|
1472
|
+
query?: never;
|
|
1473
|
+
header?: never;
|
|
1474
|
+
path?: never;
|
|
1475
|
+
cookie?: never;
|
|
1476
|
+
};
|
|
1477
|
+
get?: never;
|
|
1478
|
+
put?: never;
|
|
1479
|
+
/** @description Reserve the transaction id to substitute for TRANSACTION_ID when preloading an offer link before the claim tap. Not a claim: nothing is counted, stamped or frozen until POST /transactions, which returns this same id when it comes within 30 minutes of the last preload. Send the claim's body. 409 with code 'preloadUnsupported' when this offer's link must not be loaded before a tap; 409 'offerAlreadyCompleted' and the trial-limit 409 as on the claim. Treat any non-200 as no preload. */
|
|
1480
|
+
post: {
|
|
1481
|
+
parameters: {
|
|
1482
|
+
query?: never;
|
|
1483
|
+
header?: never;
|
|
1484
|
+
path?: never;
|
|
1485
|
+
cookie?: never;
|
|
1486
|
+
};
|
|
1487
|
+
requestBody: {
|
|
1488
|
+
content: {
|
|
1489
|
+
"application/json": {
|
|
1490
|
+
campaignId: string;
|
|
1491
|
+
userId: string;
|
|
1492
|
+
/**
|
|
1493
|
+
* @description Accepted so the claim's body can be sent unchanged; ignored. The claim stamps it.
|
|
1494
|
+
* @enum {string}
|
|
1495
|
+
*/
|
|
1496
|
+
useCase?: "churn-intervention" | "post-action-reward";
|
|
1497
|
+
/**
|
|
1498
|
+
* Format: uuid
|
|
1499
|
+
* @description Accepted so the claim's body can be sent unchanged; ignored. Never a 400.
|
|
1500
|
+
*/
|
|
1501
|
+
variantId?: string;
|
|
1502
|
+
};
|
|
1503
|
+
};
|
|
1504
|
+
};
|
|
1505
|
+
responses: {
|
|
1506
|
+
/** @description Default Response */
|
|
1507
|
+
200: {
|
|
1508
|
+
headers: {
|
|
1509
|
+
[name: string]: unknown;
|
|
1510
|
+
};
|
|
1511
|
+
content: {
|
|
1512
|
+
"application/json": {
|
|
1513
|
+
/** @enum {boolean} */
|
|
1514
|
+
success: true;
|
|
1515
|
+
/**
|
|
1516
|
+
* Format: uuid
|
|
1517
|
+
* @description The id to substitute for TRANSACTION_ID in the preloaded offer link. The claim returns the same id when it comes within 30 minutes of the last preload; any other id means discard the preload.
|
|
1518
|
+
*/
|
|
1519
|
+
transactionId: string;
|
|
1520
|
+
};
|
|
1521
|
+
};
|
|
1522
|
+
};
|
|
1523
|
+
/** @description Default Response */
|
|
1524
|
+
400: {
|
|
1525
|
+
headers: {
|
|
1526
|
+
[name: string]: unknown;
|
|
1527
|
+
};
|
|
1528
|
+
content: {
|
|
1529
|
+
"application/json": {
|
|
1530
|
+
error: string;
|
|
1531
|
+
details?: unknown;
|
|
1532
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1533
|
+
code?: string;
|
|
1534
|
+
};
|
|
1535
|
+
};
|
|
1536
|
+
};
|
|
1537
|
+
/** @description Default Response */
|
|
1538
|
+
401: {
|
|
1539
|
+
headers: {
|
|
1540
|
+
[name: string]: unknown;
|
|
1541
|
+
};
|
|
1542
|
+
content: {
|
|
1543
|
+
"application/json": {
|
|
1544
|
+
error: string;
|
|
1545
|
+
details?: unknown;
|
|
1546
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1547
|
+
code?: string;
|
|
1548
|
+
};
|
|
1549
|
+
};
|
|
1550
|
+
};
|
|
1551
|
+
/** @description Default Response */
|
|
1552
|
+
404: {
|
|
1553
|
+
headers: {
|
|
1554
|
+
[name: string]: unknown;
|
|
1555
|
+
};
|
|
1556
|
+
content: {
|
|
1557
|
+
"application/json": {
|
|
1558
|
+
error: string;
|
|
1559
|
+
details?: unknown;
|
|
1560
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1561
|
+
code?: string;
|
|
1562
|
+
};
|
|
1563
|
+
};
|
|
1564
|
+
};
|
|
1565
|
+
/** @description Default Response */
|
|
1566
|
+
409: {
|
|
1567
|
+
headers: {
|
|
1568
|
+
[name: string]: unknown;
|
|
1569
|
+
};
|
|
1570
|
+
content: {
|
|
1571
|
+
"application/json": {
|
|
1572
|
+
error: string;
|
|
1573
|
+
details?: unknown;
|
|
1574
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1575
|
+
code?: string;
|
|
1576
|
+
};
|
|
1577
|
+
};
|
|
1578
|
+
};
|
|
1579
|
+
/** @description Default Response */
|
|
1580
|
+
500: {
|
|
1581
|
+
headers: {
|
|
1582
|
+
[name: string]: unknown;
|
|
1583
|
+
};
|
|
1584
|
+
content: {
|
|
1585
|
+
"application/json": {
|
|
1586
|
+
error: string;
|
|
1587
|
+
details?: unknown;
|
|
1588
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1589
|
+
code?: string;
|
|
1281
1590
|
};
|
|
1282
1591
|
};
|
|
1283
1592
|
};
|
|
@@ -1341,6 +1650,8 @@ export interface paths {
|
|
|
1341
1650
|
"application/json": {
|
|
1342
1651
|
error: string;
|
|
1343
1652
|
details?: unknown;
|
|
1653
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1654
|
+
code?: string;
|
|
1344
1655
|
};
|
|
1345
1656
|
};
|
|
1346
1657
|
};
|
|
@@ -1353,6 +1664,8 @@ export interface paths {
|
|
|
1353
1664
|
"application/json": {
|
|
1354
1665
|
error: string;
|
|
1355
1666
|
details?: unknown;
|
|
1667
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1668
|
+
code?: string;
|
|
1356
1669
|
};
|
|
1357
1670
|
};
|
|
1358
1671
|
};
|
|
@@ -1365,6 +1678,8 @@ export interface paths {
|
|
|
1365
1678
|
"application/json": {
|
|
1366
1679
|
error: string;
|
|
1367
1680
|
details?: unknown;
|
|
1681
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1682
|
+
code?: string;
|
|
1368
1683
|
};
|
|
1369
1684
|
};
|
|
1370
1685
|
};
|
|
@@ -1377,6 +1692,8 @@ export interface paths {
|
|
|
1377
1692
|
"application/json": {
|
|
1378
1693
|
error: string;
|
|
1379
1694
|
details?: unknown;
|
|
1695
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1696
|
+
code?: string;
|
|
1380
1697
|
};
|
|
1381
1698
|
};
|
|
1382
1699
|
};
|
|
@@ -1389,6 +1706,133 @@ export interface paths {
|
|
|
1389
1706
|
"application/json": {
|
|
1390
1707
|
error: string;
|
|
1391
1708
|
details?: unknown;
|
|
1709
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1710
|
+
code?: string;
|
|
1711
|
+
};
|
|
1712
|
+
};
|
|
1713
|
+
};
|
|
1714
|
+
};
|
|
1715
|
+
};
|
|
1716
|
+
delete?: never;
|
|
1717
|
+
options?: never;
|
|
1718
|
+
head?: never;
|
|
1719
|
+
patch?: never;
|
|
1720
|
+
trace?: never;
|
|
1721
|
+
};
|
|
1722
|
+
"/publisher/sdk/v1/transactions/{transactionId}/self-report": {
|
|
1723
|
+
parameters: {
|
|
1724
|
+
query?: never;
|
|
1725
|
+
header?: never;
|
|
1726
|
+
path?: never;
|
|
1727
|
+
cookie?: never;
|
|
1728
|
+
};
|
|
1729
|
+
get?: never;
|
|
1730
|
+
put?: never;
|
|
1731
|
+
/** @description Record that the user answered "Yes, I completed it" to a reward-for-trying offer, and decide whether the app may grant its own prize. Send it on EVERY tapped Yes, prize or not: the Yes is stored per person (the app's user id), so the offer is hidden from that person on every surface and a re-claim is refused (409 offerAlreadyCompleted), including after a reinstall or on a second device. granted is true only for the first Yes per person per offer, while the person is under the app's daily limit (a rolling 24 hours). Treat no answer as no prize. Idempotent on reportId. Never changes the transaction: no status, payout, entitlement or webhook. 404 when the transaction does not belong to this app, or userId is not the current user id of the person who claimed it. The server cannot tell an identified user from an SDK-generated anonymous id: an app that wants prizes kept to signed-in users must gate the promise client-side. */
|
|
1732
|
+
post: {
|
|
1733
|
+
parameters: {
|
|
1734
|
+
query?: never;
|
|
1735
|
+
header?: never;
|
|
1736
|
+
path: {
|
|
1737
|
+
transactionId: string;
|
|
1738
|
+
};
|
|
1739
|
+
cookie?: never;
|
|
1740
|
+
};
|
|
1741
|
+
requestBody: {
|
|
1742
|
+
content: {
|
|
1743
|
+
"application/json": {
|
|
1744
|
+
/** @description The SDK's CURRENT user id at the moment the report is sent (not the id captured when the user tapped Yes). Must equal the current app user id of the user who owns the transaction, or the request is a 404. */
|
|
1745
|
+
userId: string;
|
|
1746
|
+
/**
|
|
1747
|
+
* Format: uuid
|
|
1748
|
+
* @description Minted once per tapped Yes and reused on every retry of that Yes, with the same body. A retry gets the same granted. On a refused Yes the server keeps only that no prize was granted, so the retry's reason is derived from the retry's own body (daily_cap when it carries publisherRewardId, else no_prize): resend the body unchanged.
|
|
1749
|
+
*/
|
|
1750
|
+
reportId: string;
|
|
1751
|
+
/** @description Present only when a prize was promised for this Yes. Absent: the Yes is still recorded (the offer is hidden and cannot be re-claimed) and granted is false with reason no_prize. */
|
|
1752
|
+
publisherRewardId?: string;
|
|
1753
|
+
/** @description The app's daily prize limit from its SDK configuration. Required when publisherRewardId is present. Clamped server-side to 1..10. */
|
|
1754
|
+
dailyLimit?: number;
|
|
1755
|
+
};
|
|
1756
|
+
};
|
|
1757
|
+
};
|
|
1758
|
+
responses: {
|
|
1759
|
+
/** @description Default Response */
|
|
1760
|
+
200: {
|
|
1761
|
+
headers: {
|
|
1762
|
+
[name: string]: unknown;
|
|
1763
|
+
};
|
|
1764
|
+
content: {
|
|
1765
|
+
"application/json": {
|
|
1766
|
+
/** @enum {boolean} */
|
|
1767
|
+
success: true;
|
|
1768
|
+
/** @description Whether the app may grant its prize for this Yes. True only for the first Yes per person per offer, under the daily limit. The ONLY source of prize eligibility: no answer (timeout, offline, 5xx, 404) means no prize. */
|
|
1769
|
+
granted: boolean;
|
|
1770
|
+
/**
|
|
1771
|
+
* @description Present when granted is false.
|
|
1772
|
+
* @enum {string}
|
|
1773
|
+
*/
|
|
1774
|
+
reason?: "per_offer" | "daily_cap" | "no_prize" | "pays_on_verification";
|
|
1775
|
+
/**
|
|
1776
|
+
* Format: date-time
|
|
1777
|
+
* @description When the server recorded this person's Yes for this offer (the first one, on a retry or a second device).
|
|
1778
|
+
*/
|
|
1779
|
+
reportedAt: string;
|
|
1780
|
+
};
|
|
1781
|
+
};
|
|
1782
|
+
};
|
|
1783
|
+
/** @description Default Response */
|
|
1784
|
+
400: {
|
|
1785
|
+
headers: {
|
|
1786
|
+
[name: string]: unknown;
|
|
1787
|
+
};
|
|
1788
|
+
content: {
|
|
1789
|
+
"application/json": {
|
|
1790
|
+
error: string;
|
|
1791
|
+
details?: unknown;
|
|
1792
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1793
|
+
code?: string;
|
|
1794
|
+
};
|
|
1795
|
+
};
|
|
1796
|
+
};
|
|
1797
|
+
/** @description Default Response */
|
|
1798
|
+
401: {
|
|
1799
|
+
headers: {
|
|
1800
|
+
[name: string]: unknown;
|
|
1801
|
+
};
|
|
1802
|
+
content: {
|
|
1803
|
+
"application/json": {
|
|
1804
|
+
error: string;
|
|
1805
|
+
details?: unknown;
|
|
1806
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1807
|
+
code?: string;
|
|
1808
|
+
};
|
|
1809
|
+
};
|
|
1810
|
+
};
|
|
1811
|
+
/** @description Default Response */
|
|
1812
|
+
404: {
|
|
1813
|
+
headers: {
|
|
1814
|
+
[name: string]: unknown;
|
|
1815
|
+
};
|
|
1816
|
+
content: {
|
|
1817
|
+
"application/json": {
|
|
1818
|
+
error: string;
|
|
1819
|
+
details?: unknown;
|
|
1820
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1821
|
+
code?: string;
|
|
1822
|
+
};
|
|
1823
|
+
};
|
|
1824
|
+
};
|
|
1825
|
+
/** @description Default Response */
|
|
1826
|
+
500: {
|
|
1827
|
+
headers: {
|
|
1828
|
+
[name: string]: unknown;
|
|
1829
|
+
};
|
|
1830
|
+
content: {
|
|
1831
|
+
"application/json": {
|
|
1832
|
+
error: string;
|
|
1833
|
+
details?: unknown;
|
|
1834
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1835
|
+
code?: string;
|
|
1392
1836
|
};
|
|
1393
1837
|
};
|
|
1394
1838
|
};
|
|
@@ -1448,6 +1892,8 @@ export interface paths {
|
|
|
1448
1892
|
"application/json": {
|
|
1449
1893
|
error: string;
|
|
1450
1894
|
details?: unknown;
|
|
1895
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1896
|
+
code?: string;
|
|
1451
1897
|
};
|
|
1452
1898
|
};
|
|
1453
1899
|
};
|
|
@@ -1460,6 +1906,8 @@ export interface paths {
|
|
|
1460
1906
|
"application/json": {
|
|
1461
1907
|
error: string;
|
|
1462
1908
|
details?: unknown;
|
|
1909
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1910
|
+
code?: string;
|
|
1463
1911
|
};
|
|
1464
1912
|
};
|
|
1465
1913
|
};
|
|
@@ -1472,6 +1920,8 @@ export interface paths {
|
|
|
1472
1920
|
"application/json": {
|
|
1473
1921
|
error: string;
|
|
1474
1922
|
details?: unknown;
|
|
1923
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
1924
|
+
code?: string;
|
|
1475
1925
|
};
|
|
1476
1926
|
};
|
|
1477
1927
|
};
|
|
@@ -1655,6 +2105,8 @@ export interface paths {
|
|
|
1655
2105
|
"application/json": {
|
|
1656
2106
|
error: string;
|
|
1657
2107
|
details?: unknown;
|
|
2108
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2109
|
+
code?: string;
|
|
1658
2110
|
};
|
|
1659
2111
|
};
|
|
1660
2112
|
};
|
|
@@ -1667,6 +2119,8 @@ export interface paths {
|
|
|
1667
2119
|
"application/json": {
|
|
1668
2120
|
error: string;
|
|
1669
2121
|
details?: unknown;
|
|
2122
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2123
|
+
code?: string;
|
|
1670
2124
|
};
|
|
1671
2125
|
};
|
|
1672
2126
|
};
|
|
@@ -1679,6 +2133,8 @@ export interface paths {
|
|
|
1679
2133
|
"application/json": {
|
|
1680
2134
|
error: string;
|
|
1681
2135
|
details?: unknown;
|
|
2136
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2137
|
+
code?: string;
|
|
1682
2138
|
};
|
|
1683
2139
|
};
|
|
1684
2140
|
};
|
|
@@ -1854,6 +2310,8 @@ export interface paths {
|
|
|
1854
2310
|
"application/json": {
|
|
1855
2311
|
error: string;
|
|
1856
2312
|
details?: unknown;
|
|
2313
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2314
|
+
code?: string;
|
|
1857
2315
|
};
|
|
1858
2316
|
};
|
|
1859
2317
|
};
|
|
@@ -1866,6 +2324,8 @@ export interface paths {
|
|
|
1866
2324
|
"application/json": {
|
|
1867
2325
|
error: string;
|
|
1868
2326
|
details?: unknown;
|
|
2327
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2328
|
+
code?: string;
|
|
1869
2329
|
};
|
|
1870
2330
|
};
|
|
1871
2331
|
};
|
|
@@ -1878,6 +2338,8 @@ export interface paths {
|
|
|
1878
2338
|
"application/json": {
|
|
1879
2339
|
error: string;
|
|
1880
2340
|
details?: unknown;
|
|
2341
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2342
|
+
code?: string;
|
|
1881
2343
|
};
|
|
1882
2344
|
};
|
|
1883
2345
|
};
|
|
@@ -2059,6 +2521,8 @@ export interface paths {
|
|
|
2059
2521
|
"application/json": {
|
|
2060
2522
|
error: string;
|
|
2061
2523
|
details?: unknown;
|
|
2524
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2525
|
+
code?: string;
|
|
2062
2526
|
};
|
|
2063
2527
|
};
|
|
2064
2528
|
};
|
|
@@ -2071,6 +2535,8 @@ export interface paths {
|
|
|
2071
2535
|
"application/json": {
|
|
2072
2536
|
error: string;
|
|
2073
2537
|
details?: unknown;
|
|
2538
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2539
|
+
code?: string;
|
|
2074
2540
|
};
|
|
2075
2541
|
};
|
|
2076
2542
|
};
|
|
@@ -2150,6 +2616,8 @@ export interface paths {
|
|
|
2150
2616
|
"application/json": {
|
|
2151
2617
|
error: string;
|
|
2152
2618
|
details?: unknown;
|
|
2619
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2620
|
+
code?: string;
|
|
2153
2621
|
};
|
|
2154
2622
|
};
|
|
2155
2623
|
};
|
|
@@ -2162,6 +2630,8 @@ export interface paths {
|
|
|
2162
2630
|
"application/json": {
|
|
2163
2631
|
error: string;
|
|
2164
2632
|
details?: unknown;
|
|
2633
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2634
|
+
code?: string;
|
|
2165
2635
|
};
|
|
2166
2636
|
};
|
|
2167
2637
|
};
|
|
@@ -2174,6 +2644,8 @@ export interface paths {
|
|
|
2174
2644
|
"application/json": {
|
|
2175
2645
|
error: string;
|
|
2176
2646
|
details?: unknown;
|
|
2647
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2648
|
+
code?: string;
|
|
2177
2649
|
};
|
|
2178
2650
|
};
|
|
2179
2651
|
};
|
|
@@ -2226,6 +2698,11 @@ export interface paths {
|
|
|
2226
2698
|
variantId: string;
|
|
2227
2699
|
/** @description The name of the selected variant */
|
|
2228
2700
|
variantName: string;
|
|
2701
|
+
/**
|
|
2702
|
+
* Format: uuid
|
|
2703
|
+
* @description The SDUI experiment that assigned this variant. Echo it as experiment_id on offer events beside variant_id. Null or absent when no experiment decided the variant.
|
|
2704
|
+
*/
|
|
2705
|
+
experimentId?: string | null;
|
|
2229
2706
|
/** @description The minimum SDK version required for this variant */
|
|
2230
2707
|
minSdkVersion: string;
|
|
2231
2708
|
/** @description The SDUI JSON layout configuration */
|
|
@@ -2304,6 +2781,8 @@ export interface paths {
|
|
|
2304
2781
|
"application/json": {
|
|
2305
2782
|
error: string;
|
|
2306
2783
|
details?: unknown;
|
|
2784
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2785
|
+
code?: string;
|
|
2307
2786
|
};
|
|
2308
2787
|
};
|
|
2309
2788
|
};
|
|
@@ -2316,6 +2795,8 @@ export interface paths {
|
|
|
2316
2795
|
"application/json": {
|
|
2317
2796
|
error: string;
|
|
2318
2797
|
details?: unknown;
|
|
2798
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
2799
|
+
code?: string;
|
|
2319
2800
|
};
|
|
2320
2801
|
};
|
|
2321
2802
|
};
|
|
@@ -2336,7 +2817,7 @@ export interface paths {
|
|
|
2336
2817
|
path?: never;
|
|
2337
2818
|
cookie?: never;
|
|
2338
2819
|
};
|
|
2339
|
-
/** @description Get unified SDK configuration including SDUI, entitlements, experiments, and remote config. This endpoint replaces /ui-config with a cleaner structure. Entitlement mode is implicit: if entitlements.iap.productId exists, use IAP mode; otherwise use Native mode. Pass `useCase` to configure a surface other than churn-intervention; the response echoes it as ui.useCase. `demoVariant` names an SDUI variant to serve for this request. It is honoured on a TEST key (pk_test_*) for any app, and on a live key only for Encore's own demo apps; for every other app it is ignored silently (never an error). It exists for demos and previews: Encore's own demo pages, and a publisher who wants to see the other variants against their own test key. `placementId` selects a variant an admin pinned to that placement, in `ui` only; any label without a pin resolves as before. Requesting a surface is all it takes to be served it — no setup call is required. A surface Encore has explicitly switched off for this app, or one with no variant available, returns ui.template: null — clients must no-op, never reuse another use case's template. */
|
|
2820
|
+
/** @description Get unified SDK configuration including SDUI, entitlements, experiments, and remote config. This endpoint replaces /ui-config with a cleaner structure. Entitlement mode is implicit: if entitlements.iap.productId exists, use IAP mode; otherwise use Native mode. Pass `useCase` to configure a surface other than churn-intervention; the response echoes it as ui.useCase. `demoVariant` names an SDUI variant to serve for this request. It is honoured on a TEST key (pk_test_*) for any app, and on a live key only for Encore's own demo apps; for every other app it is ignored silently (never an error). It exists for demos and previews: Encore's own demo pages, and a publisher who wants to see the other variants against their own test key. `placementId` selects a variant an admin pinned to that placement, in `ui` only; any label without a pin resolves as before. `trigger` makes this a trigger component request (GiftsButton, ClaimReminder): `useCase` is then required and is the real use case it serves, `layout` pins a look and `autoOpen=off` opts the mount out of looks that open the sheet by itself (any other present value also reads as off); a missing useCase or a malformed trigger or layout is a 400. Without `trigger`, `layout` and `autoOpen` are ignored. Requesting a surface is all it takes to be served it — no setup call is required. A surface Encore has explicitly switched off for this app, or one with no variant available, returns ui.template: null — clients must no-op, never reuse another use case's template. */
|
|
2340
2821
|
get: {
|
|
2341
2822
|
parameters: {
|
|
2342
2823
|
query: {
|
|
@@ -2348,8 +2829,28 @@ export interface paths {
|
|
|
2348
2829
|
language?: string;
|
|
2349
2830
|
/** @description Which Encore surface is being configured. Omit for today's behaviour. Requesting a surface is all it takes to be served it — no setup call is required. A surface Encore has explicitly switched off for this app, or one with no variant available, resolves to template: null — it NEVER falls back to another use case's template. */
|
|
2350
2831
|
useCase?: "churn-intervention" | "post-action-reward";
|
|
2351
|
-
/** @description Demos and previews only. The SDUI variant file stem to serve for this request, e.g. 'giftUnwrap'. Honoured on a TEST key (pk_test_*) for any app. On a live key it is honoured only for Encore's own demo apps; for every other app it is ignored silently and resolution is unchanged, never an error. Intended for Encore's internal demos and for a publisher previewing the other variants against their own test key. An honoured value bypasses app targeting, experiments and arm weights, and WIDENS the status filter from 'active' to 'active' or 'valid' — the filter is widened, not removed, so a draft, testing, invalid or archived variant is still refused. The use-case partition, the per-app kill switch and the SDK version gate all still apply. Note that a test key also serves the demo campaign catalog rather than live advertiser inventory, and tags the request as test traffic in analytics. */
|
|
2832
|
+
/** @description Demos and previews only. The SDUI variant file stem to serve for this request, e.g. 'giftUnwrap'. Honoured on a TEST key (pk_test_*) for any app. On a live key it is honoured only for Encore's own demo apps; for every other app it is ignored silently and resolution is unchanged, never an error. On a trigger request with autoOpen=off, an honoured look that opens the sheet by itself is served with behavior.autoOpen 'off'. Intended for Encore's internal demos and for a publisher previewing the other variants against their own test key. An honoured value bypasses app targeting, experiments and arm weights, and WIDENS the status filter from 'active' to 'active' or 'valid' — the filter is widened, not removed, so a draft, testing, invalid or archived variant is still refused. The use-case partition, the per-app kill switch and the SDK version gate all still apply. Note that a test key also serves the demo campaign catalog rather than live advertiser inventory, and tags the request as test traffic in analytics. */
|
|
2352
2833
|
demoVariant?: string;
|
|
2834
|
+
/** @description Present = a trigger component request (GiftsButton, ClaimReminder, customClaim): the camelCase trigger id, e.g. 'giftsButton'. Absent = a sheet request, unchanged. `useCase` is then REQUIRED and names the real use case the trigger serves (a missing useCase or a malformed trigger is a 400). The response's `ui.template` is that trigger's config (`ui.template.trigger` equals this id) or null, and `ui.useCase` echoes the requested use case. Its `root` is an SDUI element tree the SDK draws inline at `root`'s `style.frame.height` (the trigger's height), filling `${...}` from `ui.template.strings` and host values. customClaim (the custom-UI handle, which draws the app's own view) is answered with a rules-only look: layout 'behavior', no `root` or strings, minimal `ui.values`. `ui.template.behavior` names the look's step rules; `behavior.autoOpen` 'on' (an experiment arm only) opens the sheet once by itself, then draws the same look. A holdout carries `ui.experimentId` beside a null template, and `useCases` is always empty. */
|
|
2835
|
+
trigger?: string;
|
|
2836
|
+
/** @description Trigger requests only (ignored otherwise): pin the look, a camelCase layout name such as 'card' or 'pill' (malformed = 400). Serves the trigger's variant file marked pin for that layout, never enrolls in an experiment, and returns template null when there is none. */
|
|
2837
|
+
layout?: string;
|
|
2838
|
+
/** @description Trigger requests only (ignored otherwise): what happened on the device. 'claimOpen' = an eligible open claim; 'completed' = an offer finished on this local day, none claimed since, its thanks not tapped. The served look's behavior then picks the step's look: claimOpen on a gifts button whose behavior.afterClaim is showReminder is answered with the reminder look (ui.template.trigger claimReminder); completed applies behavior.afterComplete (gifts serves the look, hide serves template null, thanks serves the trigger's thanks look). Any other value is served as no state, and customClaim ignores every state (the device applies its rules). */
|
|
2839
|
+
state?: string;
|
|
2840
|
+
/** @description Trigger requests only (ignored otherwise): the mount's opt-out from looks that open the sheet by itself. Send 'off', and only when the mount forbids it; absent means allowed. Any other present value (another case, empty, repeated) is read as 'off', never as allowed, and is never a 400. With it, an experiment with any arm whose behavior.autoOpen is 'on', or whose file cannot be read, is skipped (the request gets the trigger's default look, never a lower experiment, and records no assignment), and any look served to the request carries behavior.autoOpen 'off'. */
|
|
2841
|
+
autoOpen?: string;
|
|
2842
|
+
/** @description GiftsButton requests without a layout pin only (ignored otherwise): Distinct local days this placement's button counted an impression, before this request; 0 to 30. Part of the exposure tally the served look's behavior.ifIgnored reads (seenDays, taps and firstSeenDaysAgo are required for it). A value that is not a whole number in range is dropped, never a 400. */
|
|
2843
|
+
seenDays?: string;
|
|
2844
|
+
/** @description GiftsButton requests without a layout pin only (ignored otherwise): Mounts at this placement whose impression fired, before this request; 0 to 5. Not used by today's rule. Part of the exposure tally the served look's behavior.ifIgnored reads (seenDays, taps and firstSeenDaysAgo are required for it). A value that is not a whole number in range is dropped, never a 400. */
|
|
2845
|
+
seenCount?: string;
|
|
2846
|
+
/** @description GiftsButton requests without a layout pin only (ignored otherwise): User taps on the button (auto pops do not count); 0 to 3. Part of the exposure tally the served look's behavior.ifIgnored reads (seenDays, taps and firstSeenDaysAgo are required for it). A value that is not a whole number in range is dropped, never a 400. */
|
|
2847
|
+
taps?: string;
|
|
2848
|
+
/** @description GiftsButton requests without a layout pin only (ignored otherwise): Local days since the first counted impression, 0 when never seen; 0 to 60. Part of the exposure tally the served look's behavior.ifIgnored reads (seenDays, taps and firstSeenDaysAgo are required for it). A value that is not a whole number in range is dropped, never a 400. */
|
|
2849
|
+
firstSeenDaysAgo?: string;
|
|
2850
|
+
/** @description GiftsButton requests without a layout pin only (ignored otherwise): Local days since the last user tap, absent when never tapped; 0 to 60. Not used by today's rule. Part of the exposure tally the served look's behavior.ifIgnored reads (seenDays, taps and firstSeenDaysAgo are required for it). A value that is not a whole number in range is dropped, never a 400. */
|
|
2851
|
+
lastTapDaysAgo?: string;
|
|
2852
|
+
/** @description GiftsButton requests without a layout pin only (ignored otherwise): ifIgnored answers this device already showed at this placement; 0 to 3, absent reads 0. Part of the exposure tally the served look's behavior.ifIgnored reads (seenDays, taps and firstSeenDaysAgo are required for it). A value that is not a whole number in range is dropped, never a 400. */
|
|
2853
|
+
nudges?: string;
|
|
2353
2854
|
/** @description The publisher's placement label for the surface being configured, e.g. 'email_code'. Optional. When an admin has pinned an SDUI variant to this (app, placement), `ui` serves that variant instead of the experiment assignment, provided it is active or valid, matches the requested use case and passes its SDK version gate and app targeting. Otherwise, and for any label with no pin, resolution is unchanged. Never a 4xx on any input. Applies to `ui` only; the `useCases` prefetch block is never pinned. */
|
|
2354
2855
|
placementId?: string;
|
|
2355
2856
|
};
|
|
@@ -2376,11 +2877,20 @@ export interface paths {
|
|
|
2376
2877
|
useCase: "churn-intervention" | "post-action-reward";
|
|
2377
2878
|
/**
|
|
2378
2879
|
* Format: uuid
|
|
2379
|
-
* @description Selected variant ID
|
|
2880
|
+
* @description Selected variant ID. On a trigger step answer that draws nothing (template null with a step: a hide, or thanks with no thanks look), the look whose behavior decided it, so after_complete_hide can name it.
|
|
2380
2881
|
*/
|
|
2381
2882
|
variantId?: string | null;
|
|
2382
2883
|
/** @description Selected variant name */
|
|
2383
2884
|
variantName?: string | null;
|
|
2885
|
+
/**
|
|
2886
|
+
* Format: uuid
|
|
2887
|
+
* @description The SDUI experiment that assigned this variant. Echo it as experiment_id on offer events beside variant_id. Null or absent when no experiment decided the variant. On a trigger response it is also present when the user was held out (template null), so a trigger can tell a holdout from no experiment; a sheet response never carries it beside a null template.
|
|
2888
|
+
*/
|
|
2889
|
+
experimentId?: string | null;
|
|
2890
|
+
/** @description Trigger responses only: set when the look served (or template null) was chosen by a behavior for the request's `state`, or by the look's behavior.ifIgnored for a gifts button's exposure tally (a non-clicker). Values today: afterClaim, afterComplete, ifIgnored; more may be added, and an SDK treats a value it does not know as no step. With template null and an experimentId, it tells a behavior's hide apart from a holdout (an unknown step with template null is reported as reason unknown_step). Stamp it as step on the trigger events. */
|
|
2891
|
+
step?: string;
|
|
2892
|
+
/** @description Trigger responses with a `step` only: the experiment whose look's behavior chose the step (for a reminder in a gifts button spot, the gifts button's), beside experimentId (the drawn look's own; on an afterComplete step, the deciding look's, as a thanks look is in no arm). An opaque id (a UUID today). Stamp it as step_experiment_id on the trigger events. */
|
|
2893
|
+
stepExperimentId?: string | null;
|
|
2384
2894
|
/** @description Minimum SDK version for this variant */
|
|
2385
2895
|
minSdkVersion?: string | null;
|
|
2386
2896
|
/** @description SDUI template with placeholders */
|
|
@@ -2427,6 +2937,10 @@ export interface paths {
|
|
|
2427
2937
|
rewardDecline?: string | null;
|
|
2428
2938
|
/** @description Badge on the highlighted offer card, e.g. 'Most claimed'. Same resolution and same null meaning as rewardCta. */
|
|
2429
2939
|
rewardBadge?: string | null;
|
|
2940
|
+
/** @description Label on the card that opens the rest of the offer list, e.g. 'Show more gifts'. Same resolution and same null meaning as rewardCta. */
|
|
2941
|
+
rewardMoreGifts?: string | null;
|
|
2942
|
+
/** @description Header above the rest of the offer list, e.g. 'Other gifts'. Same resolution and same null meaning as rewardCta. */
|
|
2943
|
+
rewardOtherGifts?: string | null;
|
|
2430
2944
|
};
|
|
2431
2945
|
/** @description Appearance values */
|
|
2432
2946
|
appearance: {
|
|
@@ -2445,6 +2959,21 @@ export interface paths {
|
|
|
2445
2959
|
/** @description App icon URL (App Store artwork for mobile apps, fetched favicon for web apps). Web SDK uses it as the default host logo when display.logoUrl is not set. */
|
|
2446
2960
|
appstoreIcon: string | null;
|
|
2447
2961
|
};
|
|
2962
|
+
/** @description Words the SDK says itself, translated into the response `locale`, by string id (e.g. 'card.claim'). Only ids that locale has; for any other id, and whenever the key is absent, use the SDK's own English. Never served for 'en'. Placeholders use ${name}. Populated in `ui.values` only, not in `useCases`. */
|
|
2963
|
+
strings?: {
|
|
2964
|
+
[key: string]: string;
|
|
2965
|
+
};
|
|
2966
|
+
/** @description Count-dependent SDK strings (e.g. 'unit.month'), translated into the response `locale`, by string id. Same id namespace as `strings`; an id appears in only one of the two. Same fallback rules as `strings`. */
|
|
2967
|
+
plurals?: {
|
|
2968
|
+
[key: string]: {
|
|
2969
|
+
zero?: string;
|
|
2970
|
+
one?: string;
|
|
2971
|
+
two?: string;
|
|
2972
|
+
few?: string;
|
|
2973
|
+
many?: string;
|
|
2974
|
+
other: string;
|
|
2975
|
+
};
|
|
2976
|
+
};
|
|
2448
2977
|
};
|
|
2449
2978
|
};
|
|
2450
2979
|
/** @description Assigned variant for every use case this app is enabled for other than the one REQUESTED, so the SDK can cache them at identify(). When the single-enabled-use-case fallback serves a different surface in `ui`, that surface also appears here under its own key, so a client that files `ui` under the requested use case still finds it. `ui` is unchanged; un-upgraded decoders ignore this key. */
|
|
@@ -2457,6 +2986,11 @@ export interface paths {
|
|
|
2457
2986
|
variantId: string | null;
|
|
2458
2987
|
/** @description Default variant name; null alongside a null variantId. */
|
|
2459
2988
|
variantName: string | null;
|
|
2989
|
+
/**
|
|
2990
|
+
* Format: uuid
|
|
2991
|
+
* @description The SDUI experiment that assigned this variant, as on `ui.experimentId`. Null or absent when no experiment decided it.
|
|
2992
|
+
*/
|
|
2993
|
+
experimentId?: string | null;
|
|
2460
2994
|
/** @description The default variant's SDUI template. NULL means 'enabled, but nothing to render' — the SDK must no-op on this surface. It must NEVER substitute another use case's template. */
|
|
2461
2995
|
template: {
|
|
2462
2996
|
[key: string]: unknown;
|
|
@@ -2501,6 +3035,10 @@ export interface paths {
|
|
|
2501
3035
|
rewardDecline?: string | null;
|
|
2502
3036
|
/** @description Badge on the highlighted offer card, e.g. 'Most claimed'. Same resolution and same null meaning as rewardCta. */
|
|
2503
3037
|
rewardBadge?: string | null;
|
|
3038
|
+
/** @description Label on the card that opens the rest of the offer list, e.g. 'Show more gifts'. Same resolution and same null meaning as rewardCta. */
|
|
3039
|
+
rewardMoreGifts?: string | null;
|
|
3040
|
+
/** @description Header above the rest of the offer list, e.g. 'Other gifts'. Same resolution and same null meaning as rewardCta. */
|
|
3041
|
+
rewardOtherGifts?: string | null;
|
|
2504
3042
|
};
|
|
2505
3043
|
/** @description Appearance values */
|
|
2506
3044
|
appearance: {
|
|
@@ -2519,6 +3057,21 @@ export interface paths {
|
|
|
2519
3057
|
/** @description App icon URL (App Store artwork for mobile apps, fetched favicon for web apps). Web SDK uses it as the default host logo when display.logoUrl is not set. */
|
|
2520
3058
|
appstoreIcon: string | null;
|
|
2521
3059
|
};
|
|
3060
|
+
/** @description Words the SDK says itself, translated into the response `locale`, by string id (e.g. 'card.claim'). Only ids that locale has; for any other id, and whenever the key is absent, use the SDK's own English. Never served for 'en'. Placeholders use ${name}. Populated in `ui.values` only, not in `useCases`. */
|
|
3061
|
+
strings?: {
|
|
3062
|
+
[key: string]: string;
|
|
3063
|
+
};
|
|
3064
|
+
/** @description Count-dependent SDK strings (e.g. 'unit.month'), translated into the response `locale`, by string id. Same id namespace as `strings`; an id appears in only one of the two. Same fallback rules as `strings`. */
|
|
3065
|
+
plurals?: {
|
|
3066
|
+
[key: string]: {
|
|
3067
|
+
zero?: string;
|
|
3068
|
+
one?: string;
|
|
3069
|
+
two?: string;
|
|
3070
|
+
few?: string;
|
|
3071
|
+
many?: string;
|
|
3072
|
+
other: string;
|
|
3073
|
+
};
|
|
3074
|
+
};
|
|
2522
3075
|
};
|
|
2523
3076
|
};
|
|
2524
3077
|
"post-action-reward"?: {
|
|
@@ -2529,6 +3082,11 @@ export interface paths {
|
|
|
2529
3082
|
variantId: string | null;
|
|
2530
3083
|
/** @description Default variant name; null alongside a null variantId. */
|
|
2531
3084
|
variantName: string | null;
|
|
3085
|
+
/**
|
|
3086
|
+
* Format: uuid
|
|
3087
|
+
* @description The SDUI experiment that assigned this variant, as on `ui.experimentId`. Null or absent when no experiment decided it.
|
|
3088
|
+
*/
|
|
3089
|
+
experimentId?: string | null;
|
|
2532
3090
|
/** @description The default variant's SDUI template. NULL means 'enabled, but nothing to render' — the SDK must no-op on this surface. It must NEVER substitute another use case's template. */
|
|
2533
3091
|
template: {
|
|
2534
3092
|
[key: string]: unknown;
|
|
@@ -2573,6 +3131,10 @@ export interface paths {
|
|
|
2573
3131
|
rewardDecline?: string | null;
|
|
2574
3132
|
/** @description Badge on the highlighted offer card, e.g. 'Most claimed'. Same resolution and same null meaning as rewardCta. */
|
|
2575
3133
|
rewardBadge?: string | null;
|
|
3134
|
+
/** @description Label on the card that opens the rest of the offer list, e.g. 'Show more gifts'. Same resolution and same null meaning as rewardCta. */
|
|
3135
|
+
rewardMoreGifts?: string | null;
|
|
3136
|
+
/** @description Header above the rest of the offer list, e.g. 'Other gifts'. Same resolution and same null meaning as rewardCta. */
|
|
3137
|
+
rewardOtherGifts?: string | null;
|
|
2576
3138
|
};
|
|
2577
3139
|
/** @description Appearance values */
|
|
2578
3140
|
appearance: {
|
|
@@ -2591,6 +3153,21 @@ export interface paths {
|
|
|
2591
3153
|
/** @description App icon URL (App Store artwork for mobile apps, fetched favicon for web apps). Web SDK uses it as the default host logo when display.logoUrl is not set. */
|
|
2592
3154
|
appstoreIcon: string | null;
|
|
2593
3155
|
};
|
|
3156
|
+
/** @description Words the SDK says itself, translated into the response `locale`, by string id (e.g. 'card.claim'). Only ids that locale has; for any other id, and whenever the key is absent, use the SDK's own English. Never served for 'en'. Placeholders use ${name}. Populated in `ui.values` only, not in `useCases`. */
|
|
3157
|
+
strings?: {
|
|
3158
|
+
[key: string]: string;
|
|
3159
|
+
};
|
|
3160
|
+
/** @description Count-dependent SDK strings (e.g. 'unit.month'), translated into the response `locale`, by string id. Same id namespace as `strings`; an id appears in only one of the two. Same fallback rules as `strings`. */
|
|
3161
|
+
plurals?: {
|
|
3162
|
+
[key: string]: {
|
|
3163
|
+
zero?: string;
|
|
3164
|
+
one?: string;
|
|
3165
|
+
two?: string;
|
|
3166
|
+
few?: string;
|
|
3167
|
+
many?: string;
|
|
3168
|
+
other: string;
|
|
3169
|
+
};
|
|
3170
|
+
};
|
|
2594
3171
|
};
|
|
2595
3172
|
};
|
|
2596
3173
|
};
|
|
@@ -2633,6 +3210,22 @@ export interface paths {
|
|
|
2633
3210
|
};
|
|
2634
3211
|
/** @description Resolved locale served in this response (language-only, e.g. 'es'). Absent on pre-localization responses. */
|
|
2635
3212
|
locale?: string;
|
|
3213
|
+
/** @description Placement labels for this app that carry a placement rule or pinned variant. Present whenever the app's placement rules can be read; empty when none. Clients scope their offers cache by placement only for labels in this list; when the field is absent (older server) clients keep their pre-2.4 behaviour. */
|
|
3214
|
+
ruledPlacements?: string[];
|
|
3215
|
+
};
|
|
3216
|
+
};
|
|
3217
|
+
};
|
|
3218
|
+
/** @description Default Response */
|
|
3219
|
+
400: {
|
|
3220
|
+
headers: {
|
|
3221
|
+
[name: string]: unknown;
|
|
3222
|
+
};
|
|
3223
|
+
content: {
|
|
3224
|
+
"application/json": {
|
|
3225
|
+
error: string;
|
|
3226
|
+
details?: unknown;
|
|
3227
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3228
|
+
code?: string;
|
|
2636
3229
|
};
|
|
2637
3230
|
};
|
|
2638
3231
|
};
|
|
@@ -2645,6 +3238,8 @@ export interface paths {
|
|
|
2645
3238
|
"application/json": {
|
|
2646
3239
|
error: string;
|
|
2647
3240
|
details?: unknown;
|
|
3241
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3242
|
+
code?: string;
|
|
2648
3243
|
};
|
|
2649
3244
|
};
|
|
2650
3245
|
};
|
|
@@ -2657,6 +3252,8 @@ export interface paths {
|
|
|
2657
3252
|
"application/json": {
|
|
2658
3253
|
error: string;
|
|
2659
3254
|
details?: unknown;
|
|
3255
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3256
|
+
code?: string;
|
|
2660
3257
|
};
|
|
2661
3258
|
};
|
|
2662
3259
|
};
|
|
@@ -2729,6 +3326,8 @@ export interface paths {
|
|
|
2729
3326
|
"application/json": {
|
|
2730
3327
|
error: string;
|
|
2731
3328
|
details?: unknown;
|
|
3329
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3330
|
+
code?: string;
|
|
2732
3331
|
};
|
|
2733
3332
|
};
|
|
2734
3333
|
};
|
|
@@ -2741,6 +3340,8 @@ export interface paths {
|
|
|
2741
3340
|
"application/json": {
|
|
2742
3341
|
error: string;
|
|
2743
3342
|
details?: unknown;
|
|
3343
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3344
|
+
code?: string;
|
|
2744
3345
|
};
|
|
2745
3346
|
};
|
|
2746
3347
|
};
|
|
@@ -2765,7 +3366,7 @@ export interface paths {
|
|
|
2765
3366
|
delete?: never;
|
|
2766
3367
|
options?: never;
|
|
2767
3368
|
head?: never;
|
|
2768
|
-
/** @description Update user identity (anonymous→identified). Updates the user's app_user_id. Called when developer calls SDK.identify() after login. */
|
|
3369
|
+
/** @description Update user identity (anonymous→identified). Updates the user's app_user_id. Called when developer calls SDK.identify() after login. When newUserId already exists (the person signed in before, e.g. on another device), the anonymous user's completed and self-reported offers are copied onto that account, so they stay hidden and cannot be re-claimed. The copy is taken once, at this call: send any queued self-reports BEFORE it. A report for the anonymous user's claim that arrives afterwards is refused if it carries newUserId (404), and recorded on the anonymous user only, not this account, if it carries currentUserId. */
|
|
2769
3370
|
patch: {
|
|
2770
3371
|
parameters: {
|
|
2771
3372
|
query?: never;
|
|
@@ -2815,6 +3416,8 @@ export interface paths {
|
|
|
2815
3416
|
"application/json": {
|
|
2816
3417
|
error: string;
|
|
2817
3418
|
details?: unknown;
|
|
3419
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3420
|
+
code?: string;
|
|
2818
3421
|
};
|
|
2819
3422
|
};
|
|
2820
3423
|
};
|
|
@@ -2827,6 +3430,8 @@ export interface paths {
|
|
|
2827
3430
|
"application/json": {
|
|
2828
3431
|
error: string;
|
|
2829
3432
|
details?: unknown;
|
|
3433
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3434
|
+
code?: string;
|
|
2830
3435
|
};
|
|
2831
3436
|
};
|
|
2832
3437
|
};
|
|
@@ -2848,7 +3453,9 @@ export interface paths {
|
|
|
2848
3453
|
*
|
|
2849
3454
|
* Precedence: an attribute sent on an /offers/search or /offers/feed request always WINS over the stored one. The stored set only fills an attribute the request omits.
|
|
2850
3455
|
*
|
|
2851
|
-
*
|
|
3456
|
+
* LANGUAGE is accepted and ignored: it is never stored. The hosted page and the SDKs send it on each request, else Accept-Language decides.
|
|
3457
|
+
*
|
|
3458
|
+
* AGE. Send `age` as a whole-number integer. If you hold only a RANGE, send its LOWEST end — "13-17" is sent as 13, never 15 and never 17. Sending the middle of a range silently defeats the under-age check: flooring can never mask a minor, a midpoint can. An age below 18 restricts that user to age-appropriate inventory ranked by the app-level bandit, with NO per-user personalisation — offers are still served. For such a user only `age` and `countryCode` are STORED — the attributes that decide where an offer may legally appear; everything else you sent is discarded, `custom` included, and the response reports `minor`. The instant you sent the set is recorded, so a stored age is aged forward rather than frozen. `dateOfBirth` is refused: `age` carries the same targeting value with far less identifying power.
|
|
2852
3459
|
*
|
|
2853
3460
|
* GATED KEYS. email, firstName, lastName, mobile, phoneNumber, postcode, postalCode, latitude, longitude and gender are accepted ONLY from an app whose audience is declared adults_only (store-rated 18+). Any other status, including the default, is refused with 400. `age` is NOT gated — it is accepted from any app, because it is what restricts what a user is shown rather than something that identifies them. Unrecognised keys are refused rather than ignored. Authentication: publishable key (X-API-Key: pk_live_* / pk_test_*).
|
|
2854
3461
|
*/
|
|
@@ -2868,6 +3475,7 @@ export interface paths {
|
|
|
2868
3475
|
attributes: {
|
|
2869
3476
|
/** @description ISO 3166-1 alpha-2 country code (e.g., "US", "GB", "CA"). */
|
|
2870
3477
|
countryCode?: string;
|
|
3478
|
+
/** @description Accepted for compatibility and ignored: the language is never stored. Send it on each request (attributes.language, or Accept-Language) instead. */
|
|
2871
3479
|
language?: string;
|
|
2872
3480
|
city?: string;
|
|
2873
3481
|
state?: string;
|
|
@@ -2915,7 +3523,7 @@ export interface paths {
|
|
|
2915
3523
|
userId: string;
|
|
2916
3524
|
/** @description ISO 8601 instant the set was recorded; what a stored age is aged forward from */
|
|
2917
3525
|
storedAt: string;
|
|
2918
|
-
/** @description True when the supplied age was under 18. Offers are STILL served to this user — from age-appropriate inventory only, ranked by the app-level bandit, with no per-user personalisation. Only `age
|
|
3526
|
+
/** @description True when the supplied age was under 18. Offers are STILL served to this user — from age-appropriate inventory only, ranked by the app-level bandit, with no per-user personalisation. Only `age` and `countryCode` are kept for this user. Everything else you sent is DISCARDED, including `custom`, `city`, `state`, `region` and the subscription and billing fields — a profile that may not be targeted on has no purpose. Re-send the set once they are 18 and it is stored in full. */
|
|
2919
3527
|
minor: boolean;
|
|
2920
3528
|
};
|
|
2921
3529
|
};
|
|
@@ -2929,6 +3537,8 @@ export interface paths {
|
|
|
2929
3537
|
"application/json": {
|
|
2930
3538
|
error: string;
|
|
2931
3539
|
details?: unknown;
|
|
3540
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3541
|
+
code?: string;
|
|
2932
3542
|
};
|
|
2933
3543
|
};
|
|
2934
3544
|
};
|
|
@@ -2941,6 +3551,8 @@ export interface paths {
|
|
|
2941
3551
|
"application/json": {
|
|
2942
3552
|
error: string;
|
|
2943
3553
|
details?: unknown;
|
|
3554
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3555
|
+
code?: string;
|
|
2944
3556
|
};
|
|
2945
3557
|
};
|
|
2946
3558
|
};
|
|
@@ -2953,6 +3565,8 @@ export interface paths {
|
|
|
2953
3565
|
"application/json": {
|
|
2954
3566
|
error: string;
|
|
2955
3567
|
details?: unknown;
|
|
3568
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3569
|
+
code?: string;
|
|
2956
3570
|
};
|
|
2957
3571
|
};
|
|
2958
3572
|
};
|
|
@@ -3019,6 +3633,8 @@ export interface paths {
|
|
|
3019
3633
|
"application/json": {
|
|
3020
3634
|
error: string;
|
|
3021
3635
|
details?: unknown;
|
|
3636
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3637
|
+
code?: string;
|
|
3022
3638
|
};
|
|
3023
3639
|
};
|
|
3024
3640
|
};
|
|
@@ -3031,6 +3647,8 @@ export interface paths {
|
|
|
3031
3647
|
"application/json": {
|
|
3032
3648
|
error: string;
|
|
3033
3649
|
details?: unknown;
|
|
3650
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3651
|
+
code?: string;
|
|
3034
3652
|
};
|
|
3035
3653
|
};
|
|
3036
3654
|
};
|
|
@@ -3087,6 +3705,8 @@ export interface paths {
|
|
|
3087
3705
|
"application/json": {
|
|
3088
3706
|
error: string;
|
|
3089
3707
|
details?: unknown;
|
|
3708
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3709
|
+
code?: string;
|
|
3090
3710
|
};
|
|
3091
3711
|
};
|
|
3092
3712
|
};
|
|
@@ -3099,6 +3719,8 @@ export interface paths {
|
|
|
3099
3719
|
"application/json": {
|
|
3100
3720
|
error: string;
|
|
3101
3721
|
details?: unknown;
|
|
3722
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3723
|
+
code?: string;
|
|
3102
3724
|
};
|
|
3103
3725
|
};
|
|
3104
3726
|
};
|
|
@@ -3111,6 +3733,8 @@ export interface paths {
|
|
|
3111
3733
|
"application/json": {
|
|
3112
3734
|
error: string;
|
|
3113
3735
|
details?: unknown;
|
|
3736
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3737
|
+
code?: string;
|
|
3114
3738
|
};
|
|
3115
3739
|
};
|
|
3116
3740
|
};
|
|
@@ -3123,6 +3747,8 @@ export interface paths {
|
|
|
3123
3747
|
"application/json": {
|
|
3124
3748
|
error: string;
|
|
3125
3749
|
details?: unknown;
|
|
3750
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3751
|
+
code?: string;
|
|
3126
3752
|
};
|
|
3127
3753
|
};
|
|
3128
3754
|
};
|
|
@@ -3189,6 +3815,8 @@ export interface paths {
|
|
|
3189
3815
|
"application/json": {
|
|
3190
3816
|
error: string;
|
|
3191
3817
|
details?: unknown;
|
|
3818
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3819
|
+
code?: string;
|
|
3192
3820
|
};
|
|
3193
3821
|
};
|
|
3194
3822
|
};
|
|
@@ -3201,6 +3829,8 @@ export interface paths {
|
|
|
3201
3829
|
"application/json": {
|
|
3202
3830
|
error: string;
|
|
3203
3831
|
details?: unknown;
|
|
3832
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3833
|
+
code?: string;
|
|
3204
3834
|
};
|
|
3205
3835
|
};
|
|
3206
3836
|
};
|
|
@@ -3213,6 +3843,8 @@ export interface paths {
|
|
|
3213
3843
|
"application/json": {
|
|
3214
3844
|
error: string;
|
|
3215
3845
|
details?: unknown;
|
|
3846
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3847
|
+
code?: string;
|
|
3216
3848
|
};
|
|
3217
3849
|
};
|
|
3218
3850
|
};
|
|
@@ -3249,6 +3881,8 @@ export interface paths {
|
|
|
3249
3881
|
campaignId: string;
|
|
3250
3882
|
/** Format: email */
|
|
3251
3883
|
email: string;
|
|
3884
|
+
/** @description Optional BCP 47 language tag (e.g. "es", "pt-BR"), from the host's language override. Wins over Accept-Language; only the language subtag is used (nb is served as no; iw, in, ji, jw as he, id, yi, jv), and only when the app has it enabled, else Accept-Language, then the app default. A tag the SDKs would refuse (malformed, underscores, or an extended language subtag such as zh-yue-HK) is 400 with details.code INVALID_LANGUAGE. The lead's emails go out in the language served. */
|
|
3885
|
+
language?: string;
|
|
3252
3886
|
/** @description Trial length in days as reported by StoreKit; drives reminder scheduling. */
|
|
3253
3887
|
trialDurationDays?: number | null;
|
|
3254
3888
|
/**
|
|
@@ -3290,6 +3924,8 @@ export interface paths {
|
|
|
3290
3924
|
"application/json": {
|
|
3291
3925
|
error: string;
|
|
3292
3926
|
details?: unknown;
|
|
3927
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3928
|
+
code?: string;
|
|
3293
3929
|
};
|
|
3294
3930
|
};
|
|
3295
3931
|
};
|
|
@@ -3302,6 +3938,8 @@ export interface paths {
|
|
|
3302
3938
|
"application/json": {
|
|
3303
3939
|
error: string;
|
|
3304
3940
|
details?: unknown;
|
|
3941
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3942
|
+
code?: string;
|
|
3305
3943
|
};
|
|
3306
3944
|
};
|
|
3307
3945
|
};
|
|
@@ -3314,6 +3952,8 @@ export interface paths {
|
|
|
3314
3952
|
"application/json": {
|
|
3315
3953
|
error: string;
|
|
3316
3954
|
details?: unknown;
|
|
3955
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
3956
|
+
code?: string;
|
|
3317
3957
|
};
|
|
3318
3958
|
};
|
|
3319
3959
|
};
|
|
@@ -3377,6 +4017,8 @@ export interface paths {
|
|
|
3377
4017
|
"application/json": {
|
|
3378
4018
|
error: string;
|
|
3379
4019
|
details?: unknown;
|
|
4020
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4021
|
+
code?: string;
|
|
3380
4022
|
};
|
|
3381
4023
|
};
|
|
3382
4024
|
};
|
|
@@ -3389,6 +4031,8 @@ export interface paths {
|
|
|
3389
4031
|
"application/json": {
|
|
3390
4032
|
error: string;
|
|
3391
4033
|
details?: unknown;
|
|
4034
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4035
|
+
code?: string;
|
|
3392
4036
|
};
|
|
3393
4037
|
};
|
|
3394
4038
|
};
|
|
@@ -3401,6 +4045,8 @@ export interface paths {
|
|
|
3401
4045
|
"application/json": {
|
|
3402
4046
|
error: string;
|
|
3403
4047
|
details?: unknown;
|
|
4048
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4049
|
+
code?: string;
|
|
3404
4050
|
};
|
|
3405
4051
|
};
|
|
3406
4052
|
};
|
|
@@ -3465,6 +4111,8 @@ export interface paths {
|
|
|
3465
4111
|
"application/json": {
|
|
3466
4112
|
error: string;
|
|
3467
4113
|
details?: unknown;
|
|
4114
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4115
|
+
code?: string;
|
|
3468
4116
|
};
|
|
3469
4117
|
};
|
|
3470
4118
|
};
|
|
@@ -3477,6 +4125,8 @@ export interface paths {
|
|
|
3477
4125
|
"application/json": {
|
|
3478
4126
|
error: string;
|
|
3479
4127
|
details?: unknown;
|
|
4128
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4129
|
+
code?: string;
|
|
3480
4130
|
};
|
|
3481
4131
|
};
|
|
3482
4132
|
};
|
|
@@ -3489,6 +4139,8 @@ export interface paths {
|
|
|
3489
4139
|
"application/json": {
|
|
3490
4140
|
error: string;
|
|
3491
4141
|
details?: unknown;
|
|
4142
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4143
|
+
code?: string;
|
|
3492
4144
|
};
|
|
3493
4145
|
};
|
|
3494
4146
|
};
|
|
@@ -3501,6 +4153,8 @@ export interface paths {
|
|
|
3501
4153
|
"application/json": {
|
|
3502
4154
|
error: string;
|
|
3503
4155
|
details?: unknown;
|
|
4156
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4157
|
+
code?: string;
|
|
3504
4158
|
};
|
|
3505
4159
|
};
|
|
3506
4160
|
};
|
|
@@ -3513,6 +4167,8 @@ export interface paths {
|
|
|
3513
4167
|
"application/json": {
|
|
3514
4168
|
error: string;
|
|
3515
4169
|
details?: unknown;
|
|
4170
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4171
|
+
code?: string;
|
|
3516
4172
|
};
|
|
3517
4173
|
};
|
|
3518
4174
|
};
|
|
@@ -3576,6 +4232,8 @@ export interface paths {
|
|
|
3576
4232
|
"application/json": {
|
|
3577
4233
|
error: string;
|
|
3578
4234
|
details?: unknown;
|
|
4235
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4236
|
+
code?: string;
|
|
3579
4237
|
};
|
|
3580
4238
|
};
|
|
3581
4239
|
};
|
|
@@ -3588,6 +4246,8 @@ export interface paths {
|
|
|
3588
4246
|
"application/json": {
|
|
3589
4247
|
error: string;
|
|
3590
4248
|
details?: unknown;
|
|
4249
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4250
|
+
code?: string;
|
|
3591
4251
|
};
|
|
3592
4252
|
};
|
|
3593
4253
|
};
|
|
@@ -3600,6 +4260,8 @@ export interface paths {
|
|
|
3600
4260
|
"application/json": {
|
|
3601
4261
|
error: string;
|
|
3602
4262
|
details?: unknown;
|
|
4263
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4264
|
+
code?: string;
|
|
3603
4265
|
};
|
|
3604
4266
|
};
|
|
3605
4267
|
};
|
|
@@ -3612,6 +4274,8 @@ export interface paths {
|
|
|
3612
4274
|
"application/json": {
|
|
3613
4275
|
error: string;
|
|
3614
4276
|
details?: unknown;
|
|
4277
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4278
|
+
code?: string;
|
|
3615
4279
|
};
|
|
3616
4280
|
};
|
|
3617
4281
|
};
|
|
@@ -3624,6 +4288,8 @@ export interface paths {
|
|
|
3624
4288
|
"application/json": {
|
|
3625
4289
|
error: string;
|
|
3626
4290
|
details?: unknown;
|
|
4291
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4292
|
+
code?: string;
|
|
3627
4293
|
};
|
|
3628
4294
|
};
|
|
3629
4295
|
};
|
|
@@ -3636,6 +4302,8 @@ export interface paths {
|
|
|
3636
4302
|
"application/json": {
|
|
3637
4303
|
error: string;
|
|
3638
4304
|
details?: unknown;
|
|
4305
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4306
|
+
code?: string;
|
|
3639
4307
|
};
|
|
3640
4308
|
};
|
|
3641
4309
|
};
|
|
@@ -3715,6 +4383,8 @@ export interface paths {
|
|
|
3715
4383
|
"application/json": {
|
|
3716
4384
|
error: string;
|
|
3717
4385
|
details?: unknown;
|
|
4386
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4387
|
+
code?: string;
|
|
3718
4388
|
};
|
|
3719
4389
|
};
|
|
3720
4390
|
};
|
|
@@ -3727,6 +4397,8 @@ export interface paths {
|
|
|
3727
4397
|
"application/json": {
|
|
3728
4398
|
error: string;
|
|
3729
4399
|
details?: unknown;
|
|
4400
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4401
|
+
code?: string;
|
|
3730
4402
|
};
|
|
3731
4403
|
};
|
|
3732
4404
|
};
|
|
@@ -3739,6 +4411,8 @@ export interface paths {
|
|
|
3739
4411
|
"application/json": {
|
|
3740
4412
|
error: string;
|
|
3741
4413
|
details?: unknown;
|
|
4414
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4415
|
+
code?: string;
|
|
3742
4416
|
};
|
|
3743
4417
|
};
|
|
3744
4418
|
};
|
|
@@ -3819,6 +4493,8 @@ export interface paths {
|
|
|
3819
4493
|
"application/json": {
|
|
3820
4494
|
error: string;
|
|
3821
4495
|
details?: unknown;
|
|
4496
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4497
|
+
code?: string;
|
|
3822
4498
|
};
|
|
3823
4499
|
};
|
|
3824
4500
|
};
|
|
@@ -3831,6 +4507,8 @@ export interface paths {
|
|
|
3831
4507
|
"application/json": {
|
|
3832
4508
|
error: string;
|
|
3833
4509
|
details?: unknown;
|
|
4510
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4511
|
+
code?: string;
|
|
3834
4512
|
};
|
|
3835
4513
|
};
|
|
3836
4514
|
};
|
|
@@ -3843,6 +4521,8 @@ export interface paths {
|
|
|
3843
4521
|
"application/json": {
|
|
3844
4522
|
error: string;
|
|
3845
4523
|
details?: unknown;
|
|
4524
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4525
|
+
code?: string;
|
|
3846
4526
|
};
|
|
3847
4527
|
};
|
|
3848
4528
|
};
|
|
@@ -3855,6 +4535,8 @@ export interface paths {
|
|
|
3855
4535
|
"application/json": {
|
|
3856
4536
|
error: string;
|
|
3857
4537
|
details?: unknown;
|
|
4538
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4539
|
+
code?: string;
|
|
3858
4540
|
};
|
|
3859
4541
|
};
|
|
3860
4542
|
};
|
|
@@ -3914,6 +4596,8 @@ export interface paths {
|
|
|
3914
4596
|
"application/json": {
|
|
3915
4597
|
error: string;
|
|
3916
4598
|
details?: unknown;
|
|
4599
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4600
|
+
code?: string;
|
|
3917
4601
|
};
|
|
3918
4602
|
};
|
|
3919
4603
|
};
|
|
@@ -3926,6 +4610,8 @@ export interface paths {
|
|
|
3926
4610
|
"application/json": {
|
|
3927
4611
|
error: string;
|
|
3928
4612
|
details?: unknown;
|
|
4613
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4614
|
+
code?: string;
|
|
3929
4615
|
};
|
|
3930
4616
|
};
|
|
3931
4617
|
};
|
|
@@ -3938,6 +4624,8 @@ export interface paths {
|
|
|
3938
4624
|
"application/json": {
|
|
3939
4625
|
error: string;
|
|
3940
4626
|
details?: unknown;
|
|
4627
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4628
|
+
code?: string;
|
|
3941
4629
|
};
|
|
3942
4630
|
};
|
|
3943
4631
|
};
|
|
@@ -3950,6 +4638,8 @@ export interface paths {
|
|
|
3950
4638
|
"application/json": {
|
|
3951
4639
|
error: string;
|
|
3952
4640
|
details?: unknown;
|
|
4641
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4642
|
+
code?: string;
|
|
3953
4643
|
};
|
|
3954
4644
|
};
|
|
3955
4645
|
};
|
|
@@ -4014,6 +4704,8 @@ export interface paths {
|
|
|
4014
4704
|
"application/json": {
|
|
4015
4705
|
error: string;
|
|
4016
4706
|
details?: unknown;
|
|
4707
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4708
|
+
code?: string;
|
|
4017
4709
|
};
|
|
4018
4710
|
};
|
|
4019
4711
|
};
|
|
@@ -4026,6 +4718,8 @@ export interface paths {
|
|
|
4026
4718
|
"application/json": {
|
|
4027
4719
|
error: string;
|
|
4028
4720
|
details?: unknown;
|
|
4721
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4722
|
+
code?: string;
|
|
4029
4723
|
};
|
|
4030
4724
|
};
|
|
4031
4725
|
};
|
|
@@ -4038,6 +4732,8 @@ export interface paths {
|
|
|
4038
4732
|
"application/json": {
|
|
4039
4733
|
error: string;
|
|
4040
4734
|
details?: unknown;
|
|
4735
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4736
|
+
code?: string;
|
|
4041
4737
|
};
|
|
4042
4738
|
};
|
|
4043
4739
|
};
|
|
@@ -4050,6 +4746,8 @@ export interface paths {
|
|
|
4050
4746
|
"application/json": {
|
|
4051
4747
|
error: string;
|
|
4052
4748
|
details?: unknown;
|
|
4749
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4750
|
+
code?: string;
|
|
4053
4751
|
};
|
|
4054
4752
|
};
|
|
4055
4753
|
};
|
|
@@ -4062,6 +4760,8 @@ export interface paths {
|
|
|
4062
4760
|
"application/json": {
|
|
4063
4761
|
error: string;
|
|
4064
4762
|
details?: unknown;
|
|
4763
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4764
|
+
code?: string;
|
|
4065
4765
|
};
|
|
4066
4766
|
};
|
|
4067
4767
|
};
|
|
@@ -4180,6 +4880,8 @@ export interface paths {
|
|
|
4180
4880
|
"application/json": {
|
|
4181
4881
|
error: string;
|
|
4182
4882
|
details?: unknown;
|
|
4883
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4884
|
+
code?: string;
|
|
4183
4885
|
};
|
|
4184
4886
|
};
|
|
4185
4887
|
};
|
|
@@ -4192,6 +4894,8 @@ export interface paths {
|
|
|
4192
4894
|
"application/json": {
|
|
4193
4895
|
error: string;
|
|
4194
4896
|
details?: unknown;
|
|
4897
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4898
|
+
code?: string;
|
|
4195
4899
|
};
|
|
4196
4900
|
};
|
|
4197
4901
|
};
|
|
@@ -4204,6 +4908,8 @@ export interface paths {
|
|
|
4204
4908
|
"application/json": {
|
|
4205
4909
|
error: string;
|
|
4206
4910
|
details?: unknown;
|
|
4911
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4912
|
+
code?: string;
|
|
4207
4913
|
};
|
|
4208
4914
|
};
|
|
4209
4915
|
};
|
|
@@ -4286,6 +4992,8 @@ export interface paths {
|
|
|
4286
4992
|
"application/json": {
|
|
4287
4993
|
error: string;
|
|
4288
4994
|
details?: unknown;
|
|
4995
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
4996
|
+
code?: string;
|
|
4289
4997
|
};
|
|
4290
4998
|
};
|
|
4291
4999
|
};
|
|
@@ -4298,6 +5006,8 @@ export interface paths {
|
|
|
4298
5006
|
"application/json": {
|
|
4299
5007
|
error: string;
|
|
4300
5008
|
details?: unknown;
|
|
5009
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
5010
|
+
code?: string;
|
|
4301
5011
|
};
|
|
4302
5012
|
};
|
|
4303
5013
|
};
|
|
@@ -4310,6 +5020,8 @@ export interface paths {
|
|
|
4310
5020
|
"application/json": {
|
|
4311
5021
|
error: string;
|
|
4312
5022
|
details?: unknown;
|
|
5023
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
5024
|
+
code?: string;
|
|
4313
5025
|
};
|
|
4314
5026
|
};
|
|
4315
5027
|
};
|
|
@@ -4387,6 +5099,8 @@ export interface paths {
|
|
|
4387
5099
|
"application/json": {
|
|
4388
5100
|
error: string;
|
|
4389
5101
|
details?: unknown;
|
|
5102
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
5103
|
+
code?: string;
|
|
4390
5104
|
};
|
|
4391
5105
|
};
|
|
4392
5106
|
};
|
|
@@ -4399,6 +5113,8 @@ export interface paths {
|
|
|
4399
5113
|
"application/json": {
|
|
4400
5114
|
error: string;
|
|
4401
5115
|
details?: unknown;
|
|
5116
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
5117
|
+
code?: string;
|
|
4402
5118
|
};
|
|
4403
5119
|
};
|
|
4404
5120
|
};
|
|
@@ -4411,6 +5127,8 @@ export interface paths {
|
|
|
4411
5127
|
"application/json": {
|
|
4412
5128
|
error: string;
|
|
4413
5129
|
details?: unknown;
|
|
5130
|
+
/** @description Machine-readable reason, set only on the few errors a client must branch on (each route that sets one says so in its description) and absent on every other. Treat an unknown value as absent. */
|
|
5131
|
+
code?: string;
|
|
4414
5132
|
};
|
|
4415
5133
|
};
|
|
4416
5134
|
};
|
|
@@ -4448,11 +5166,20 @@ export interface components {
|
|
|
4448
5166
|
useCase: "churn-intervention" | "post-action-reward";
|
|
4449
5167
|
/**
|
|
4450
5168
|
* Format: uuid
|
|
4451
|
-
* @description Selected variant ID
|
|
5169
|
+
* @description Selected variant ID. On a trigger step answer that draws nothing (template null with a step: a hide, or thanks with no thanks look), the look whose behavior decided it, so after_complete_hide can name it.
|
|
4452
5170
|
*/
|
|
4453
5171
|
variantId?: string | null;
|
|
4454
5172
|
/** @description Selected variant name */
|
|
4455
5173
|
variantName?: string | null;
|
|
5174
|
+
/**
|
|
5175
|
+
* Format: uuid
|
|
5176
|
+
* @description The SDUI experiment that assigned this variant. Echo it as experiment_id on offer events beside variant_id. Null or absent when no experiment decided the variant. On a trigger response it is also present when the user was held out (template null), so a trigger can tell a holdout from no experiment; a sheet response never carries it beside a null template.
|
|
5177
|
+
*/
|
|
5178
|
+
experimentId?: string | null;
|
|
5179
|
+
/** @description Trigger responses only: set when the look served (or template null) was chosen by a behavior for the request's `state`, or by the look's behavior.ifIgnored for a gifts button's exposure tally (a non-clicker). Values today: afterClaim, afterComplete, ifIgnored; more may be added, and an SDK treats a value it does not know as no step. With template null and an experimentId, it tells a behavior's hide apart from a holdout (an unknown step with template null is reported as reason unknown_step). Stamp it as step on the trigger events. */
|
|
5180
|
+
step?: string;
|
|
5181
|
+
/** @description Trigger responses with a `step` only: the experiment whose look's behavior chose the step (for a reminder in a gifts button spot, the gifts button's), beside experimentId (the drawn look's own; on an afterComplete step, the deciding look's, as a thanks look is in no arm). An opaque id (a UUID today). Stamp it as step_experiment_id on the trigger events. */
|
|
5182
|
+
stepExperimentId?: string | null;
|
|
4456
5183
|
/** @description Minimum SDK version for this variant */
|
|
4457
5184
|
minSdkVersion?: string | null;
|
|
4458
5185
|
/** @description SDUI template with placeholders */
|
|
@@ -4499,6 +5226,10 @@ export interface components {
|
|
|
4499
5226
|
rewardDecline?: string | null;
|
|
4500
5227
|
/** @description Badge on the highlighted offer card, e.g. 'Most claimed'. Same resolution and same null meaning as rewardCta. */
|
|
4501
5228
|
rewardBadge?: string | null;
|
|
5229
|
+
/** @description Label on the card that opens the rest of the offer list, e.g. 'Show more gifts'. Same resolution and same null meaning as rewardCta. */
|
|
5230
|
+
rewardMoreGifts?: string | null;
|
|
5231
|
+
/** @description Header above the rest of the offer list, e.g. 'Other gifts'. Same resolution and same null meaning as rewardCta. */
|
|
5232
|
+
rewardOtherGifts?: string | null;
|
|
4502
5233
|
};
|
|
4503
5234
|
/** @description Appearance values */
|
|
4504
5235
|
appearance: {
|
|
@@ -4517,6 +5248,21 @@ export interface components {
|
|
|
4517
5248
|
/** @description App icon URL (App Store artwork for mobile apps, fetched favicon for web apps). Web SDK uses it as the default host logo when display.logoUrl is not set. */
|
|
4518
5249
|
appstoreIcon: string | null;
|
|
4519
5250
|
};
|
|
5251
|
+
/** @description Words the SDK says itself, translated into the response `locale`, by string id (e.g. 'card.claim'). Only ids that locale has; for any other id, and whenever the key is absent, use the SDK's own English. Never served for 'en'. Placeholders use ${name}. Populated in `ui.values` only, not in `useCases`. */
|
|
5252
|
+
strings?: {
|
|
5253
|
+
[key: string]: string;
|
|
5254
|
+
};
|
|
5255
|
+
/** @description Count-dependent SDK strings (e.g. 'unit.month'), translated into the response `locale`, by string id. Same id namespace as `strings`; an id appears in only one of the two. Same fallback rules as `strings`. */
|
|
5256
|
+
plurals?: {
|
|
5257
|
+
[key: string]: {
|
|
5258
|
+
zero?: string;
|
|
5259
|
+
one?: string;
|
|
5260
|
+
two?: string;
|
|
5261
|
+
few?: string;
|
|
5262
|
+
many?: string;
|
|
5263
|
+
other: string;
|
|
5264
|
+
};
|
|
5265
|
+
};
|
|
4520
5266
|
};
|
|
4521
5267
|
};
|
|
4522
5268
|
/** @description Assigned variant for every use case this app is enabled for other than the one REQUESTED, so the SDK can cache them at identify(). When the single-enabled-use-case fallback serves a different surface in `ui`, that surface also appears here under its own key, so a client that files `ui` under the requested use case still finds it. `ui` is unchanged; un-upgraded decoders ignore this key. */
|
|
@@ -4529,6 +5275,11 @@ export interface components {
|
|
|
4529
5275
|
variantId: string | null;
|
|
4530
5276
|
/** @description Default variant name; null alongside a null variantId. */
|
|
4531
5277
|
variantName: string | null;
|
|
5278
|
+
/**
|
|
5279
|
+
* Format: uuid
|
|
5280
|
+
* @description The SDUI experiment that assigned this variant, as on `ui.experimentId`. Null or absent when no experiment decided it.
|
|
5281
|
+
*/
|
|
5282
|
+
experimentId?: string | null;
|
|
4532
5283
|
/** @description The default variant's SDUI template. NULL means 'enabled, but nothing to render' — the SDK must no-op on this surface. It must NEVER substitute another use case's template. */
|
|
4533
5284
|
template: {
|
|
4534
5285
|
[key: string]: unknown;
|
|
@@ -4573,6 +5324,10 @@ export interface components {
|
|
|
4573
5324
|
rewardDecline?: string | null;
|
|
4574
5325
|
/** @description Badge on the highlighted offer card, e.g. 'Most claimed'. Same resolution and same null meaning as rewardCta. */
|
|
4575
5326
|
rewardBadge?: string | null;
|
|
5327
|
+
/** @description Label on the card that opens the rest of the offer list, e.g. 'Show more gifts'. Same resolution and same null meaning as rewardCta. */
|
|
5328
|
+
rewardMoreGifts?: string | null;
|
|
5329
|
+
/** @description Header above the rest of the offer list, e.g. 'Other gifts'. Same resolution and same null meaning as rewardCta. */
|
|
5330
|
+
rewardOtherGifts?: string | null;
|
|
4576
5331
|
};
|
|
4577
5332
|
/** @description Appearance values */
|
|
4578
5333
|
appearance: {
|
|
@@ -4591,6 +5346,21 @@ export interface components {
|
|
|
4591
5346
|
/** @description App icon URL (App Store artwork for mobile apps, fetched favicon for web apps). Web SDK uses it as the default host logo when display.logoUrl is not set. */
|
|
4592
5347
|
appstoreIcon: string | null;
|
|
4593
5348
|
};
|
|
5349
|
+
/** @description Words the SDK says itself, translated into the response `locale`, by string id (e.g. 'card.claim'). Only ids that locale has; for any other id, and whenever the key is absent, use the SDK's own English. Never served for 'en'. Placeholders use ${name}. Populated in `ui.values` only, not in `useCases`. */
|
|
5350
|
+
strings?: {
|
|
5351
|
+
[key: string]: string;
|
|
5352
|
+
};
|
|
5353
|
+
/** @description Count-dependent SDK strings (e.g. 'unit.month'), translated into the response `locale`, by string id. Same id namespace as `strings`; an id appears in only one of the two. Same fallback rules as `strings`. */
|
|
5354
|
+
plurals?: {
|
|
5355
|
+
[key: string]: {
|
|
5356
|
+
zero?: string;
|
|
5357
|
+
one?: string;
|
|
5358
|
+
two?: string;
|
|
5359
|
+
few?: string;
|
|
5360
|
+
many?: string;
|
|
5361
|
+
other: string;
|
|
5362
|
+
};
|
|
5363
|
+
};
|
|
4594
5364
|
};
|
|
4595
5365
|
};
|
|
4596
5366
|
"post-action-reward"?: {
|
|
@@ -4601,6 +5371,11 @@ export interface components {
|
|
|
4601
5371
|
variantId: string | null;
|
|
4602
5372
|
/** @description Default variant name; null alongside a null variantId. */
|
|
4603
5373
|
variantName: string | null;
|
|
5374
|
+
/**
|
|
5375
|
+
* Format: uuid
|
|
5376
|
+
* @description The SDUI experiment that assigned this variant, as on `ui.experimentId`. Null or absent when no experiment decided it.
|
|
5377
|
+
*/
|
|
5378
|
+
experimentId?: string | null;
|
|
4604
5379
|
/** @description The default variant's SDUI template. NULL means 'enabled, but nothing to render' — the SDK must no-op on this surface. It must NEVER substitute another use case's template. */
|
|
4605
5380
|
template: {
|
|
4606
5381
|
[key: string]: unknown;
|
|
@@ -4645,6 +5420,10 @@ export interface components {
|
|
|
4645
5420
|
rewardDecline?: string | null;
|
|
4646
5421
|
/** @description Badge on the highlighted offer card, e.g. 'Most claimed'. Same resolution and same null meaning as rewardCta. */
|
|
4647
5422
|
rewardBadge?: string | null;
|
|
5423
|
+
/** @description Label on the card that opens the rest of the offer list, e.g. 'Show more gifts'. Same resolution and same null meaning as rewardCta. */
|
|
5424
|
+
rewardMoreGifts?: string | null;
|
|
5425
|
+
/** @description Header above the rest of the offer list, e.g. 'Other gifts'. Same resolution and same null meaning as rewardCta. */
|
|
5426
|
+
rewardOtherGifts?: string | null;
|
|
4648
5427
|
};
|
|
4649
5428
|
/** @description Appearance values */
|
|
4650
5429
|
appearance: {
|
|
@@ -4663,6 +5442,21 @@ export interface components {
|
|
|
4663
5442
|
/** @description App icon URL (App Store artwork for mobile apps, fetched favicon for web apps). Web SDK uses it as the default host logo when display.logoUrl is not set. */
|
|
4664
5443
|
appstoreIcon: string | null;
|
|
4665
5444
|
};
|
|
5445
|
+
/** @description Words the SDK says itself, translated into the response `locale`, by string id (e.g. 'card.claim'). Only ids that locale has; for any other id, and whenever the key is absent, use the SDK's own English. Never served for 'en'. Placeholders use ${name}. Populated in `ui.values` only, not in `useCases`. */
|
|
5446
|
+
strings?: {
|
|
5447
|
+
[key: string]: string;
|
|
5448
|
+
};
|
|
5449
|
+
/** @description Count-dependent SDK strings (e.g. 'unit.month'), translated into the response `locale`, by string id. Same id namespace as `strings`; an id appears in only one of the two. Same fallback rules as `strings`. */
|
|
5450
|
+
plurals?: {
|
|
5451
|
+
[key: string]: {
|
|
5452
|
+
zero?: string;
|
|
5453
|
+
one?: string;
|
|
5454
|
+
two?: string;
|
|
5455
|
+
few?: string;
|
|
5456
|
+
many?: string;
|
|
5457
|
+
other: string;
|
|
5458
|
+
};
|
|
5459
|
+
};
|
|
4666
5460
|
};
|
|
4667
5461
|
};
|
|
4668
5462
|
};
|
|
@@ -4705,6 +5499,91 @@ export interface components {
|
|
|
4705
5499
|
};
|
|
4706
5500
|
/** @description Resolved locale served in this response (language-only, e.g. 'es'). Absent on pre-localization responses. */
|
|
4707
5501
|
locale?: string;
|
|
5502
|
+
/** @description Placement labels for this app that carry a placement rule or pinned variant. Present whenever the app's placement rules can be read; empty when none. Clients scope their offers cache by placement only for labels in this list; when the field is absent (older server) clients keep their pre-2.4 behaviour. */
|
|
5503
|
+
ruledPlacements?: string[];
|
|
5504
|
+
};
|
|
5505
|
+
OffersSearchRequest: {
|
|
5506
|
+
userId: string;
|
|
5507
|
+
/** @description Optional user attributes for offer selection */
|
|
5508
|
+
attributes?: {
|
|
5509
|
+
email?: string;
|
|
5510
|
+
firstName?: string;
|
|
5511
|
+
lastName?: string;
|
|
5512
|
+
mobile?: string;
|
|
5513
|
+
phoneNumber?: string;
|
|
5514
|
+
postcode?: string;
|
|
5515
|
+
postalCode?: string;
|
|
5516
|
+
city?: string;
|
|
5517
|
+
state?: string;
|
|
5518
|
+
region?: string;
|
|
5519
|
+
/** @description ISO 3166-1 alpha-2 country code (e.g., "US", "GB", "CA"). */
|
|
5520
|
+
countryCode?: string;
|
|
5521
|
+
/** @description Decimal degrees as string (e.g., "37.7749") */
|
|
5522
|
+
latitude?: string;
|
|
5523
|
+
/** @description Decimal degrees as string (e.g., "-122.4194") */
|
|
5524
|
+
longitude?: string;
|
|
5525
|
+
/** @description Whole years, as an integer. If you hold only a RANGE, send its LOWEST end: "13-17" is sent as 13. Under 18 restricts this request to offers rated for that age, with no per-user personalisation. Used for this request only and never stored. Lower than an age stored through /users/attributes, it wins; higher, the stored one does. A fraction is rounded down, also as a decimal string ("17.9" is 17), a whole-number string is read as its number, and a range string as its lowest end ("13-17" is 13, "65+" is 65); any other value is ignored, never a 400. */
|
|
5526
|
+
age?: number;
|
|
5527
|
+
/** @description Deprecated: send age instead. A YYYY-MM-DD date, or an ISO 8601 date-time with a zone, is turned into an age for this request only, then discarded; never stored or logged. If age is also sent, the younger of the two is used. An unreadable date is ignored, never a 400. */
|
|
5528
|
+
dateOfBirth?: string;
|
|
5529
|
+
gender?: string;
|
|
5530
|
+
/** @description BCP 47 language tag; only the language subtag is used for creative locale resolution, and only when the app has that language enabled. Falls back to Accept-Language, then the app default locale. */
|
|
5531
|
+
language?: string;
|
|
5532
|
+
subscriptionTier?: string;
|
|
5533
|
+
monthsSubscribed?: string;
|
|
5534
|
+
billingCycle?: string;
|
|
5535
|
+
lastPaymentAmount?: string;
|
|
5536
|
+
lastActiveDate?: string;
|
|
5537
|
+
totalSessions?: string;
|
|
5538
|
+
custom?: {
|
|
5539
|
+
[key: string]: string;
|
|
5540
|
+
};
|
|
5541
|
+
};
|
|
5542
|
+
/**
|
|
5543
|
+
* @description Number of campaigns to fetch (default: 10)
|
|
5544
|
+
* @default 50
|
|
5545
|
+
*/
|
|
5546
|
+
limit: number;
|
|
5547
|
+
/**
|
|
5548
|
+
* @description Pagination offset (default: 0)
|
|
5549
|
+
* @default 0
|
|
5550
|
+
*/
|
|
5551
|
+
offset: number;
|
|
5552
|
+
/**
|
|
5553
|
+
* Format: uuid
|
|
5554
|
+
* @description Session ID for deterministic pagination - if not provided, server will generate one
|
|
5555
|
+
*/
|
|
5556
|
+
requestId?: string;
|
|
5557
|
+
/** @description SDK version in semver format (e.g., "1.2.3") */
|
|
5558
|
+
sdkVersion?: string;
|
|
5559
|
+
/**
|
|
5560
|
+
* @description Client platform: android, ios, or web
|
|
5561
|
+
* @enum {string}
|
|
5562
|
+
*/
|
|
5563
|
+
platform?: "android" | "ios" | "web";
|
|
5564
|
+
/**
|
|
5565
|
+
* Format: uuid
|
|
5566
|
+
* @description SDUI variant ID from frontend config fetch. If provided, filters creatives by variant assignment. If not provided, no variant filtering is applied.
|
|
5567
|
+
*/
|
|
5568
|
+
variantId?: string;
|
|
5569
|
+
/** @description Publisher-defined surface label for where the offer is shown (e.g. 'paywall', 'onboarding', 'settings'). Stamped onto the sdk_offer_requested event so publisher analytics can break the funnel out by placement. An Encore admin can also configure a per-placement offer rule for an app, in which case this label SELECTS and ORDERS the offers returned for that placement; with no rule configured, which is the default for every app, it stays analytics-only and changes nothing about what is served. Max 64 chars. SDKs may send their own auto-generated `placement_<8 hex>` id when the publisher supplied none — that is expected and is folded into the '(unlabeled)' bucket at read time; do NOT substitute '(unlabeled)' or an empty string yourself. */
|
|
5570
|
+
placementId?: string;
|
|
5571
|
+
/**
|
|
5572
|
+
* @description Which Encore surface is being filled. Ignored while OFFERS_SEARCH_RESOLVES_SURFACE is off. With it on and no variantId, the server resolves the variant for this use case (and the placementId pin) as GET /config does; a sent variantId always wins. Absent or unrecognised: today's behaviour (churn-intervention). Never a 400.
|
|
5573
|
+
* @enum {string}
|
|
5574
|
+
*/
|
|
5575
|
+
useCase?: "churn-intervention" | "post-action-reward";
|
|
5576
|
+
/** @description Strict unlock mode: only include campaigns whose postback latency is less than or equal to this value (in milliseconds). Omit for no filtering. Bounded 1000..120000. */
|
|
5577
|
+
maxPostbackTimeMs?: number;
|
|
5578
|
+
/** @description Send only when this placement carries the app's own prize for a reward-for-trying Yes: the app's daily prize limit from its SDK configuration (PublisherRewardPolicy), clamped server-side to 1..10. The response then carries publisherRewardPromise. Omit it and nothing changes. */
|
|
5579
|
+
publisherRewardDailyLimit?: number;
|
|
5580
|
+
/** @description Why the client is searching. `purpose: "prefetch"` marks a search the SDK runs before any sheet is shown (a GiftsButton or ClaimReminder checking that offers exist). Its result may later back the sheet the user opens with a tap, so it is a served request like any other, not an impression. It is stamped as purpose on sdk_offer_requested so a report can split these out. Any other value is ignored, never a 400. Serving is identical either way. */
|
|
5581
|
+
purpose?: string;
|
|
5582
|
+
/** @description Request-scoped serving context. Unknown keys are ignored. */
|
|
5583
|
+
context?: {
|
|
5584
|
+
/** @description Request-scoped activity the user is engaged in at serve time (what the surface is being used for, not a persisted user property). Recognized values: laundry, vending, car_wash, air_vacuum, amusement. Any other value is accepted and recorded on serve analytics, so unrecognized activities show up in reporting rather than failing the request. Does not change which offers are served today. */
|
|
5585
|
+
activity?: string;
|
|
5586
|
+
};
|
|
4708
5587
|
};
|
|
4709
5588
|
OffersSearchResponse: {
|
|
4710
5589
|
success: boolean;
|
|
@@ -4773,6 +5652,10 @@ export interface components {
|
|
|
4773
5652
|
heroImageUrl?: string | null;
|
|
4774
5653
|
/** @description https link to the advertiser offer terms. Null or absent: render terms copy as plain text. */
|
|
4775
5654
|
termsUrl?: string | null;
|
|
5655
|
+
/** @description Display-only strings a variant renders by key, e.g. {"eligibilityNote":"New subscribers only"}. Values are strings; the type is free-form so one unexpected value cannot fail a client decode. Absent or empty: the variant draws none of those lines. */
|
|
5656
|
+
displayProperties?: {
|
|
5657
|
+
[key: string]: unknown;
|
|
5658
|
+
};
|
|
4776
5659
|
/** Format: date-time */
|
|
4777
5660
|
createdAt: string;
|
|
4778
5661
|
/** Format: date-time */
|
|
@@ -4808,9 +5691,10 @@ export interface components {
|
|
|
4808
5691
|
ctaText: string;
|
|
4809
5692
|
/**
|
|
4810
5693
|
* Format: uri
|
|
4811
|
-
* @description
|
|
5694
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
4812
5695
|
*/
|
|
4813
5696
|
destinationUrl: string | null;
|
|
5697
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
4814
5698
|
trackingParameters: {
|
|
4815
5699
|
[key: string]: unknown;
|
|
4816
5700
|
} | null;
|
|
@@ -4821,6 +5705,8 @@ export interface components {
|
|
|
4821
5705
|
title: string;
|
|
4822
5706
|
subtitle: string;
|
|
4823
5707
|
ctaButtonText?: string;
|
|
5708
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
5709
|
+
imageUrl?: string;
|
|
4824
5710
|
}[] | null;
|
|
4825
5711
|
/** @description Short, actionable phrases (max 1-3) that guide users. Examples: "sign up, create registry", "add to cart" */
|
|
4826
5712
|
quickInstructions: string | null;
|
|
@@ -4887,11 +5773,48 @@ export interface components {
|
|
|
4887
5773
|
category?: string | null;
|
|
4888
5774
|
/** @description The gift-sheet group this campaign files under: "Watch & listen", "Money" or "Everyday". Derived from `category` by the server so a native chip strip shows what web tabs show without holding the taxonomy map. Always set: an absent, blank or unmapped category files under "Everyday", so every offer sits in some group. Whether a strip is worth drawing is the client's call, because only it knows which offers its sheet lists. /offers/search only: web-sdk holds its own copy of the map and groups `category` itself. */
|
|
4889
5775
|
categoryGroup?: string | null;
|
|
5776
|
+
/** @description `category` in the response locale, for display only. Group and filter on `category`, which stays English. Null when `category` is null. /offers/search only. */
|
|
5777
|
+
categoryDisplayName?: string | null;
|
|
5778
|
+
/** @description `categoryGroup` in the response locale, for display only. Group on `categoryGroup`, which stays English. /offers/search only. */
|
|
5779
|
+
categoryGroupDisplayName?: string | null;
|
|
4890
5780
|
/** @description Estimated time from the user tapping this offer to the reward being confirmed, from recent real conversions (on demo offers, from the demo advertiser's configured behavior instead). Half confirm within medianSeconds, 9 in 10 within p90Seconds. Not a guarantee: to show a wait, use p90Seconds. Null when there is no current estimate (too few recent conversions, data more than 7 days old, or an offer that does not confirm through the advertiser); say nothing about timing then. */
|
|
4891
5781
|
rewardConfirmationTime?: {
|
|
4892
5782
|
medianSeconds: number;
|
|
4893
5783
|
p90Seconds: number;
|
|
4894
5784
|
} | null;
|
|
5785
|
+
/** @description This offer's per-offer reward. Present only for an app with reward settings; null when the offer carries no value: in on_yes show the placement's flat prize, in on_verified show no prize (a null value is never paid). Absent: the app has no per-offer rewards. /offers/search only. */
|
|
5786
|
+
publisherRewardValue?: {
|
|
5787
|
+
/** @description Tokens this offer is worth in the app's own unit. The offer_completed webhook's reward.amount carries the value frozen when the user claimed. */
|
|
5788
|
+
amount: number;
|
|
5789
|
+
/** @description Ready-to-render card text, e.g. "1,500 tokens". Show it in place of the flat PublisherReward title. */
|
|
5790
|
+
label: string;
|
|
5791
|
+
} | null;
|
|
5792
|
+
/** @description Campaign claim-URL query parameters, keys verbatim (e.g. {"af_rid":"TRANSACTION_ID"}); equals the served creative's whenever one exists. Always pair it with the offer's destinationUrl, never with a creative's, and never build a claim URL from an absent or empty value. Absent from servers that predate it; null means the campaign has none. */
|
|
5793
|
+
trackingParameters?: {
|
|
5794
|
+
[key: string]: unknown;
|
|
5795
|
+
} | null;
|
|
5796
|
+
/** @description Campaign call-to-action text. Absent from servers that predate it; null means the campaign has none. */
|
|
5797
|
+
ctaText?: string | null;
|
|
5798
|
+
/** @description Campaign description, localized like creatives. Absent from servers that predate it; null means the campaign has none. */
|
|
5799
|
+
description?: string | null;
|
|
5800
|
+
/** @description Campaign step-by-step instructions, same shape as a creative's. Absent from servers that predate it; null means the campaign has none. */
|
|
5801
|
+
instructions?: {
|
|
5802
|
+
title: string;
|
|
5803
|
+
subtitle: string;
|
|
5804
|
+
ctaButtonText?: string;
|
|
5805
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
5806
|
+
imageUrl?: string;
|
|
5807
|
+
}[] | null;
|
|
5808
|
+
/** @description Campaign one-line instructions. Absent from servers that predate it; null means the campaign has none. */
|
|
5809
|
+
quickInstructions?: string | null;
|
|
5810
|
+
/** @description Campaign logo override; null means use organization.logoUrl. Plain string, not format: uri, so one bad value cannot fail a whole Android decode. Absent from servers that predate it; null means the campaign has none. */
|
|
5811
|
+
logoUrl?: string | null;
|
|
5812
|
+
/** @description Campaign card title. Absent from servers that predate it; null means the campaign has none. */
|
|
5813
|
+
title?: string | null;
|
|
5814
|
+
/** @description Campaign card subtitle. Absent from servers that predate it; null means the campaign has none. */
|
|
5815
|
+
subtitle?: string | null;
|
|
5816
|
+
/** @description Campaign tooltip text. Absent from servers that predate it; null means the campaign has none. */
|
|
5817
|
+
tooltipText?: string | null;
|
|
4895
5818
|
}[];
|
|
4896
5819
|
metadata: {
|
|
4897
5820
|
/** @description Total offers available */
|
|
@@ -4909,6 +5832,13 @@ export interface components {
|
|
|
4909
5832
|
};
|
|
4910
5833
|
/** @description Resolved locale served in this response (language-only, e.g. 'es'). Absent on pre-localization responses. */
|
|
4911
5834
|
locale?: string;
|
|
5835
|
+
/** @description Whether this user is still under the app's daily prize limit (publisherRewardDailyLimit, rolling 24 hours). What counts depends on publisherRewardMode. on_yes (or no mode): prizes granted on a reward-for-trying Yes. on_verified: this user's verified completions that carried a reward, by when they verified; a Yes never grants and never counts, and the reward arrives on the offer_completed webhook. Present only when the request sent publisherRewardDailyLimit. Offers this user already completed or said Yes to are never served, so this answers the daily limit only. Absent (an older backend, or no limit sent) means no promise. Not a grant: in on_yes the self-report's granted answer is final. */
|
|
5836
|
+
publisherRewardPromise?: boolean;
|
|
5837
|
+
/**
|
|
5838
|
+
* @description How this app pays its prize. on_yes: a reward-for-trying Yes can grant it (self-report granted). on_verified: a Yes never grants; each offer's publisherRewardValue arrives on the offer_completed webhook when the brand confirms. Present only for an app with reward settings (and always when the promise was counted under on_verified). Decode as a string and treat an unknown value as on_yes.
|
|
5839
|
+
* @enum {string}
|
|
5840
|
+
*/
|
|
5841
|
+
publisherRewardMode?: "on_yes" | "on_verified";
|
|
4912
5842
|
error?: string | null;
|
|
4913
5843
|
};
|
|
4914
5844
|
Campaign: {
|
|
@@ -4976,6 +5906,10 @@ export interface components {
|
|
|
4976
5906
|
heroImageUrl?: string | null;
|
|
4977
5907
|
/** @description https link to the advertiser offer terms. Null or absent: render terms copy as plain text. */
|
|
4978
5908
|
termsUrl?: string | null;
|
|
5909
|
+
/** @description Display-only strings a variant renders by key, e.g. {"eligibilityNote":"New subscribers only"}. Values are strings; the type is free-form so one unexpected value cannot fail a client decode. Absent or empty: the variant draws none of those lines. */
|
|
5910
|
+
displayProperties?: {
|
|
5911
|
+
[key: string]: unknown;
|
|
5912
|
+
};
|
|
4979
5913
|
/** Format: date-time */
|
|
4980
5914
|
createdAt: string;
|
|
4981
5915
|
/** Format: date-time */
|
|
@@ -5011,9 +5945,10 @@ export interface components {
|
|
|
5011
5945
|
ctaText: string;
|
|
5012
5946
|
/**
|
|
5013
5947
|
* Format: uri
|
|
5014
|
-
* @description
|
|
5948
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
5015
5949
|
*/
|
|
5016
5950
|
destinationUrl: string | null;
|
|
5951
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
5017
5952
|
trackingParameters: {
|
|
5018
5953
|
[key: string]: unknown;
|
|
5019
5954
|
} | null;
|
|
@@ -5024,6 +5959,8 @@ export interface components {
|
|
|
5024
5959
|
title: string;
|
|
5025
5960
|
subtitle: string;
|
|
5026
5961
|
ctaButtonText?: string;
|
|
5962
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
5963
|
+
imageUrl?: string;
|
|
5027
5964
|
}[] | null;
|
|
5028
5965
|
/** @description Short, actionable phrases (max 1-3) that guide users. Examples: "sign up, create registry", "add to cart" */
|
|
5029
5966
|
quickInstructions: string | null;
|
|
@@ -5090,11 +6027,48 @@ export interface components {
|
|
|
5090
6027
|
category?: string | null;
|
|
5091
6028
|
/** @description The gift-sheet group this campaign files under: "Watch & listen", "Money" or "Everyday". Derived from `category` by the server so a native chip strip shows what web tabs show without holding the taxonomy map. Always set: an absent, blank or unmapped category files under "Everyday", so every offer sits in some group. Whether a strip is worth drawing is the client's call, because only it knows which offers its sheet lists. /offers/search only: web-sdk holds its own copy of the map and groups `category` itself. */
|
|
5092
6029
|
categoryGroup?: string | null;
|
|
6030
|
+
/** @description `category` in the response locale, for display only. Group and filter on `category`, which stays English. Null when `category` is null. /offers/search only. */
|
|
6031
|
+
categoryDisplayName?: string | null;
|
|
6032
|
+
/** @description `categoryGroup` in the response locale, for display only. Group on `categoryGroup`, which stays English. /offers/search only. */
|
|
6033
|
+
categoryGroupDisplayName?: string | null;
|
|
5093
6034
|
/** @description Estimated time from the user tapping this offer to the reward being confirmed, from recent real conversions (on demo offers, from the demo advertiser's configured behavior instead). Half confirm within medianSeconds, 9 in 10 within p90Seconds. Not a guarantee: to show a wait, use p90Seconds. Null when there is no current estimate (too few recent conversions, data more than 7 days old, or an offer that does not confirm through the advertiser); say nothing about timing then. */
|
|
5094
6035
|
rewardConfirmationTime?: {
|
|
5095
6036
|
medianSeconds: number;
|
|
5096
6037
|
p90Seconds: number;
|
|
5097
6038
|
} | null;
|
|
6039
|
+
/** @description This offer's per-offer reward. Present only for an app with reward settings; null when the offer carries no value: in on_yes show the placement's flat prize, in on_verified show no prize (a null value is never paid). Absent: the app has no per-offer rewards. /offers/search only. */
|
|
6040
|
+
publisherRewardValue?: {
|
|
6041
|
+
/** @description Tokens this offer is worth in the app's own unit. The offer_completed webhook's reward.amount carries the value frozen when the user claimed. */
|
|
6042
|
+
amount: number;
|
|
6043
|
+
/** @description Ready-to-render card text, e.g. "1,500 tokens". Show it in place of the flat PublisherReward title. */
|
|
6044
|
+
label: string;
|
|
6045
|
+
} | null;
|
|
6046
|
+
/** @description Campaign claim-URL query parameters, keys verbatim (e.g. {"af_rid":"TRANSACTION_ID"}); equals the served creative's whenever one exists. Always pair it with the offer's destinationUrl, never with a creative's, and never build a claim URL from an absent or empty value. Absent from servers that predate it; null means the campaign has none. */
|
|
6047
|
+
trackingParameters?: {
|
|
6048
|
+
[key: string]: unknown;
|
|
6049
|
+
} | null;
|
|
6050
|
+
/** @description Campaign call-to-action text. Absent from servers that predate it; null means the campaign has none. */
|
|
6051
|
+
ctaText?: string | null;
|
|
6052
|
+
/** @description Campaign description, localized like creatives. Absent from servers that predate it; null means the campaign has none. */
|
|
6053
|
+
description?: string | null;
|
|
6054
|
+
/** @description Campaign step-by-step instructions, same shape as a creative's. Absent from servers that predate it; null means the campaign has none. */
|
|
6055
|
+
instructions?: {
|
|
6056
|
+
title: string;
|
|
6057
|
+
subtitle: string;
|
|
6058
|
+
ctaButtonText?: string;
|
|
6059
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
6060
|
+
imageUrl?: string;
|
|
6061
|
+
}[] | null;
|
|
6062
|
+
/** @description Campaign one-line instructions. Absent from servers that predate it; null means the campaign has none. */
|
|
6063
|
+
quickInstructions?: string | null;
|
|
6064
|
+
/** @description Campaign logo override; null means use organization.logoUrl. Plain string, not format: uri, so one bad value cannot fail a whole Android decode. Absent from servers that predate it; null means the campaign has none. */
|
|
6065
|
+
logoUrl?: string | null;
|
|
6066
|
+
/** @description Campaign card title. Absent from servers that predate it; null means the campaign has none. */
|
|
6067
|
+
title?: string | null;
|
|
6068
|
+
/** @description Campaign card subtitle. Absent from servers that predate it; null means the campaign has none. */
|
|
6069
|
+
subtitle?: string | null;
|
|
6070
|
+
/** @description Campaign tooltip text. Absent from servers that predate it; null means the campaign has none. */
|
|
6071
|
+
tooltipText?: string | null;
|
|
5098
6072
|
};
|
|
5099
6073
|
Creative: {
|
|
5100
6074
|
/** Format: uuid */
|
|
@@ -5113,9 +6087,10 @@ export interface components {
|
|
|
5113
6087
|
ctaText: string;
|
|
5114
6088
|
/**
|
|
5115
6089
|
* Format: uri
|
|
5116
|
-
* @description
|
|
6090
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
5117
6091
|
*/
|
|
5118
6092
|
destinationUrl: string | null;
|
|
6093
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
5119
6094
|
trackingParameters: {
|
|
5120
6095
|
[key: string]: unknown;
|
|
5121
6096
|
} | null;
|
|
@@ -5126,6 +6101,8 @@ export interface components {
|
|
|
5126
6101
|
title: string;
|
|
5127
6102
|
subtitle: string;
|
|
5128
6103
|
ctaButtonText?: string;
|
|
6104
|
+
/** @description Optional https image for this step. Absent: the step has none. */
|
|
6105
|
+
imageUrl?: string;
|
|
5129
6106
|
}[] | null;
|
|
5130
6107
|
/** @description Short, actionable phrases (max 1-3) that guide users. Examples: "sign up, create registry", "add to cart" */
|
|
5131
6108
|
quickInstructions: string | null;
|