@encorekit/web-sdk 2.3.0 → 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 +105 -5
- 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 +58 -3
- 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 +420 -39
- package/types/api/generated/types.d.ts.map +1 -1
- package/types/api/models.d.ts +18 -2
- package/types/api/models.d.ts.map +1 -1
- package/types/api/offerBuilder.d.ts +10 -4
- package/types/api/offerBuilder.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 +25 -3
- 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/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 +8 -1
- 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 +329 -1
- package/types/types.d.ts.map +1 -1
- package/types/ui/ClaimScreen.d.ts +1 -1
- package/types/ui/ClaimScreen.d.ts.map +1 -1
- package/types/ui/CodeUnlock.d.ts +12 -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 -0
- 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
|
@@ -143,9 +143,10 @@ export interface paths {
|
|
|
143
143
|
ctaText: string;
|
|
144
144
|
/**
|
|
145
145
|
* Format: uri
|
|
146
|
-
* @description
|
|
146
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
147
147
|
*/
|
|
148
148
|
destinationUrl: string | null;
|
|
149
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
149
150
|
trackingParameters: {
|
|
150
151
|
[key: string]: unknown;
|
|
151
152
|
} | null;
|
|
@@ -291,6 +292,9 @@ export interface paths {
|
|
|
291
292
|
latitude?: string;
|
|
292
293
|
/** @description Decimal degrees as string (e.g., "-122.4194") */
|
|
293
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. */
|
|
294
298
|
dateOfBirth?: string;
|
|
295
299
|
gender?: string;
|
|
296
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. */
|
|
@@ -343,6 +347,8 @@ export interface paths {
|
|
|
343
347
|
maxPostbackTimeMs?: number;
|
|
344
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. */
|
|
345
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;
|
|
346
352
|
/** @description Request-scoped serving context. Unknown keys are ignored. */
|
|
347
353
|
context?: {
|
|
348
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. */
|
|
@@ -464,9 +470,10 @@ export interface paths {
|
|
|
464
470
|
ctaText: string;
|
|
465
471
|
/**
|
|
466
472
|
* Format: uri
|
|
467
|
-
* @description
|
|
473
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
468
474
|
*/
|
|
469
475
|
destinationUrl: string | null;
|
|
476
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
470
477
|
trackingParameters: {
|
|
471
478
|
[key: string]: unknown;
|
|
472
479
|
} | null;
|
|
@@ -554,15 +561,22 @@ export interface paths {
|
|
|
554
561
|
medianSeconds: number;
|
|
555
562
|
p90Seconds: number;
|
|
556
563
|
} | null;
|
|
557
|
-
/** @description
|
|
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. */
|
|
558
572
|
trackingParameters?: {
|
|
559
573
|
[key: string]: unknown;
|
|
560
574
|
} | null;
|
|
561
|
-
/** @description Campaign call-to-action text. Absent
|
|
575
|
+
/** @description Campaign call-to-action text. Absent from servers that predate it; null means the campaign has none. */
|
|
562
576
|
ctaText?: string | null;
|
|
563
|
-
/** @description Campaign description, localized like creatives. Absent
|
|
577
|
+
/** @description Campaign description, localized like creatives. Absent from servers that predate it; null means the campaign has none. */
|
|
564
578
|
description?: string | null;
|
|
565
|
-
/** @description Campaign step-by-step instructions, same shape as a creative's. Absent
|
|
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. */
|
|
566
580
|
instructions?: {
|
|
567
581
|
title: string;
|
|
568
582
|
subtitle: string;
|
|
@@ -570,15 +584,15 @@ export interface paths {
|
|
|
570
584
|
/** @description Optional https image for this step. Absent: the step has none. */
|
|
571
585
|
imageUrl?: string;
|
|
572
586
|
}[] | null;
|
|
573
|
-
/** @description Campaign one-line instructions. Absent
|
|
587
|
+
/** @description Campaign one-line instructions. Absent from servers that predate it; null means the campaign has none. */
|
|
574
588
|
quickInstructions?: string | null;
|
|
575
|
-
/** @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
|
|
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. */
|
|
576
590
|
logoUrl?: string | null;
|
|
577
|
-
/** @description Campaign card title. Absent
|
|
591
|
+
/** @description Campaign card title. Absent from servers that predate it; null means the campaign has none. */
|
|
578
592
|
title?: string | null;
|
|
579
|
-
/** @description Campaign card subtitle. Absent
|
|
593
|
+
/** @description Campaign card subtitle. Absent from servers that predate it; null means the campaign has none. */
|
|
580
594
|
subtitle?: string | null;
|
|
581
|
-
/** @description Campaign tooltip text. Absent
|
|
595
|
+
/** @description Campaign tooltip text. Absent from servers that predate it; null means the campaign has none. */
|
|
582
596
|
tooltipText?: string | null;
|
|
583
597
|
}[];
|
|
584
598
|
metadata: {
|
|
@@ -597,8 +611,13 @@ export interface paths {
|
|
|
597
611
|
};
|
|
598
612
|
/** @description Resolved locale served in this response (language-only, e.g. 'es'). Absent on pre-localization responses. */
|
|
599
613
|
locale?: string;
|
|
600
|
-
/** @description Whether this user
|
|
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. */
|
|
601
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";
|
|
602
621
|
error?: string | null;
|
|
603
622
|
};
|
|
604
623
|
};
|
|
@@ -890,6 +909,28 @@ export interface paths {
|
|
|
890
909
|
* @enum {string}
|
|
891
910
|
*/
|
|
892
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;
|
|
893
934
|
};
|
|
894
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. */
|
|
895
936
|
placementId?: string;
|
|
@@ -1027,6 +1068,28 @@ export interface paths {
|
|
|
1027
1068
|
* @enum {string}
|
|
1028
1069
|
*/
|
|
1029
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;
|
|
1030
1093
|
};
|
|
1031
1094
|
/**
|
|
1032
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.
|
|
@@ -1291,6 +1354,11 @@ export interface paths {
|
|
|
1291
1354
|
* @enum {string}
|
|
1292
1355
|
*/
|
|
1293
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;
|
|
1294
1362
|
};
|
|
1295
1363
|
};
|
|
1296
1364
|
};
|
|
@@ -1399,6 +1467,137 @@ export interface paths {
|
|
|
1399
1467
|
patch?: never;
|
|
1400
1468
|
trace?: never;
|
|
1401
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;
|
|
1590
|
+
};
|
|
1591
|
+
};
|
|
1592
|
+
};
|
|
1593
|
+
};
|
|
1594
|
+
};
|
|
1595
|
+
delete?: never;
|
|
1596
|
+
options?: never;
|
|
1597
|
+
head?: never;
|
|
1598
|
+
patch?: never;
|
|
1599
|
+
trace?: never;
|
|
1600
|
+
};
|
|
1402
1601
|
"/publisher/sdk/v1/transactions/{transactionId}/signals": {
|
|
1403
1602
|
parameters: {
|
|
1404
1603
|
query?: never;
|
|
@@ -1572,7 +1771,7 @@ export interface paths {
|
|
|
1572
1771
|
* @description Present when granted is false.
|
|
1573
1772
|
* @enum {string}
|
|
1574
1773
|
*/
|
|
1575
|
-
reason?: "per_offer" | "daily_cap" | "no_prize";
|
|
1774
|
+
reason?: "per_offer" | "daily_cap" | "no_prize" | "pays_on_verification";
|
|
1576
1775
|
/**
|
|
1577
1776
|
* Format: date-time
|
|
1578
1777
|
* @description When the server recorded this person's Yes for this offer (the first one, on a retry or a second device).
|
|
@@ -2499,6 +2698,11 @@ export interface paths {
|
|
|
2499
2698
|
variantId: string;
|
|
2500
2699
|
/** @description The name of the selected variant */
|
|
2501
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;
|
|
2502
2706
|
/** @description The minimum SDK version required for this variant */
|
|
2503
2707
|
minSdkVersion: string;
|
|
2504
2708
|
/** @description The SDUI JSON layout configuration */
|
|
@@ -2613,7 +2817,7 @@ export interface paths {
|
|
|
2613
2817
|
path?: never;
|
|
2614
2818
|
cookie?: never;
|
|
2615
2819
|
};
|
|
2616
|
-
/** @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. */
|
|
2617
2821
|
get: {
|
|
2618
2822
|
parameters: {
|
|
2619
2823
|
query: {
|
|
@@ -2625,8 +2829,28 @@ export interface paths {
|
|
|
2625
2829
|
language?: string;
|
|
2626
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. */
|
|
2627
2831
|
useCase?: "churn-intervention" | "post-action-reward";
|
|
2628
|
-
/** @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. */
|
|
2629
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;
|
|
2630
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. */
|
|
2631
2855
|
placementId?: string;
|
|
2632
2856
|
};
|
|
@@ -2653,11 +2877,20 @@ export interface paths {
|
|
|
2653
2877
|
useCase: "churn-intervention" | "post-action-reward";
|
|
2654
2878
|
/**
|
|
2655
2879
|
* Format: uuid
|
|
2656
|
-
* @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.
|
|
2657
2881
|
*/
|
|
2658
2882
|
variantId?: string | null;
|
|
2659
2883
|
/** @description Selected variant name */
|
|
2660
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;
|
|
2661
2894
|
/** @description Minimum SDK version for this variant */
|
|
2662
2895
|
minSdkVersion?: string | null;
|
|
2663
2896
|
/** @description SDUI template with placeholders */
|
|
@@ -2753,6 +2986,11 @@ export interface paths {
|
|
|
2753
2986
|
variantId: string | null;
|
|
2754
2987
|
/** @description Default variant name; null alongside a null variantId. */
|
|
2755
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;
|
|
2756
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. */
|
|
2757
2995
|
template: {
|
|
2758
2996
|
[key: string]: unknown;
|
|
@@ -2844,6 +3082,11 @@ export interface paths {
|
|
|
2844
3082
|
variantId: string | null;
|
|
2845
3083
|
/** @description Default variant name; null alongside a null variantId. */
|
|
2846
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;
|
|
2847
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. */
|
|
2848
3091
|
template: {
|
|
2849
3092
|
[key: string]: unknown;
|
|
@@ -2973,6 +3216,20 @@ export interface paths {
|
|
|
2973
3216
|
};
|
|
2974
3217
|
};
|
|
2975
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;
|
|
3229
|
+
};
|
|
3230
|
+
};
|
|
3231
|
+
};
|
|
3232
|
+
/** @description Default Response */
|
|
2976
3233
|
401: {
|
|
2977
3234
|
headers: {
|
|
2978
3235
|
[name: string]: unknown;
|
|
@@ -4909,11 +5166,20 @@ export interface components {
|
|
|
4909
5166
|
useCase: "churn-intervention" | "post-action-reward";
|
|
4910
5167
|
/**
|
|
4911
5168
|
* Format: uuid
|
|
4912
|
-
* @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.
|
|
4913
5170
|
*/
|
|
4914
5171
|
variantId?: string | null;
|
|
4915
5172
|
/** @description Selected variant name */
|
|
4916
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;
|
|
4917
5183
|
/** @description Minimum SDK version for this variant */
|
|
4918
5184
|
minSdkVersion?: string | null;
|
|
4919
5185
|
/** @description SDUI template with placeholders */
|
|
@@ -5009,6 +5275,11 @@ export interface components {
|
|
|
5009
5275
|
variantId: string | null;
|
|
5010
5276
|
/** @description Default variant name; null alongside a null variantId. */
|
|
5011
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;
|
|
5012
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. */
|
|
5013
5284
|
template: {
|
|
5014
5285
|
[key: string]: unknown;
|
|
@@ -5100,6 +5371,11 @@ export interface components {
|
|
|
5100
5371
|
variantId: string | null;
|
|
5101
5372
|
/** @description Default variant name; null alongside a null variantId. */
|
|
5102
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;
|
|
5103
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. */
|
|
5104
5380
|
template: {
|
|
5105
5381
|
[key: string]: unknown;
|
|
@@ -5226,6 +5502,89 @@ export interface components {
|
|
|
5226
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. */
|
|
5227
5503
|
ruledPlacements?: string[];
|
|
5228
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
|
+
};
|
|
5587
|
+
};
|
|
5229
5588
|
OffersSearchResponse: {
|
|
5230
5589
|
success: boolean;
|
|
5231
5590
|
offers: {
|
|
@@ -5332,9 +5691,10 @@ export interface components {
|
|
|
5332
5691
|
ctaText: string;
|
|
5333
5692
|
/**
|
|
5334
5693
|
* Format: uri
|
|
5335
|
-
* @description
|
|
5694
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
5336
5695
|
*/
|
|
5337
5696
|
destinationUrl: string | null;
|
|
5697
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
5338
5698
|
trackingParameters: {
|
|
5339
5699
|
[key: string]: unknown;
|
|
5340
5700
|
} | null;
|
|
@@ -5422,15 +5782,22 @@ export interface components {
|
|
|
5422
5782
|
medianSeconds: number;
|
|
5423
5783
|
p90Seconds: number;
|
|
5424
5784
|
} | null;
|
|
5425
|
-
/** @description
|
|
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. */
|
|
5426
5793
|
trackingParameters?: {
|
|
5427
5794
|
[key: string]: unknown;
|
|
5428
5795
|
} | null;
|
|
5429
|
-
/** @description Campaign call-to-action text. Absent
|
|
5796
|
+
/** @description Campaign call-to-action text. Absent from servers that predate it; null means the campaign has none. */
|
|
5430
5797
|
ctaText?: string | null;
|
|
5431
|
-
/** @description Campaign description, localized like creatives. Absent
|
|
5798
|
+
/** @description Campaign description, localized like creatives. Absent from servers that predate it; null means the campaign has none. */
|
|
5432
5799
|
description?: string | null;
|
|
5433
|
-
/** @description Campaign step-by-step instructions, same shape as a creative's. Absent
|
|
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. */
|
|
5434
5801
|
instructions?: {
|
|
5435
5802
|
title: string;
|
|
5436
5803
|
subtitle: string;
|
|
@@ -5438,15 +5805,15 @@ export interface components {
|
|
|
5438
5805
|
/** @description Optional https image for this step. Absent: the step has none. */
|
|
5439
5806
|
imageUrl?: string;
|
|
5440
5807
|
}[] | null;
|
|
5441
|
-
/** @description Campaign one-line instructions. Absent
|
|
5808
|
+
/** @description Campaign one-line instructions. Absent from servers that predate it; null means the campaign has none. */
|
|
5442
5809
|
quickInstructions?: string | null;
|
|
5443
|
-
/** @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
|
|
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. */
|
|
5444
5811
|
logoUrl?: string | null;
|
|
5445
|
-
/** @description Campaign card title. Absent
|
|
5812
|
+
/** @description Campaign card title. Absent from servers that predate it; null means the campaign has none. */
|
|
5446
5813
|
title?: string | null;
|
|
5447
|
-
/** @description Campaign card subtitle. Absent
|
|
5814
|
+
/** @description Campaign card subtitle. Absent from servers that predate it; null means the campaign has none. */
|
|
5448
5815
|
subtitle?: string | null;
|
|
5449
|
-
/** @description Campaign tooltip text. Absent
|
|
5816
|
+
/** @description Campaign tooltip text. Absent from servers that predate it; null means the campaign has none. */
|
|
5450
5817
|
tooltipText?: string | null;
|
|
5451
5818
|
}[];
|
|
5452
5819
|
metadata: {
|
|
@@ -5465,8 +5832,13 @@ export interface components {
|
|
|
5465
5832
|
};
|
|
5466
5833
|
/** @description Resolved locale served in this response (language-only, e.g. 'es'). Absent on pre-localization responses. */
|
|
5467
5834
|
locale?: string;
|
|
5468
|
-
/** @description Whether this user
|
|
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. */
|
|
5469
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";
|
|
5470
5842
|
error?: string | null;
|
|
5471
5843
|
};
|
|
5472
5844
|
Campaign: {
|
|
@@ -5573,9 +5945,10 @@ export interface components {
|
|
|
5573
5945
|
ctaText: string;
|
|
5574
5946
|
/**
|
|
5575
5947
|
* Format: uri
|
|
5576
|
-
* @description
|
|
5948
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
5577
5949
|
*/
|
|
5578
5950
|
destinationUrl: string | null;
|
|
5951
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
5579
5952
|
trackingParameters: {
|
|
5580
5953
|
[key: string]: unknown;
|
|
5581
5954
|
} | null;
|
|
@@ -5663,15 +6036,22 @@ export interface components {
|
|
|
5663
6036
|
medianSeconds: number;
|
|
5664
6037
|
p90Seconds: number;
|
|
5665
6038
|
} | null;
|
|
5666
|
-
/** @description
|
|
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. */
|
|
5667
6047
|
trackingParameters?: {
|
|
5668
6048
|
[key: string]: unknown;
|
|
5669
6049
|
} | null;
|
|
5670
|
-
/** @description Campaign call-to-action text. Absent
|
|
6050
|
+
/** @description Campaign call-to-action text. Absent from servers that predate it; null means the campaign has none. */
|
|
5671
6051
|
ctaText?: string | null;
|
|
5672
|
-
/** @description Campaign description, localized like creatives. Absent
|
|
6052
|
+
/** @description Campaign description, localized like creatives. Absent from servers that predate it; null means the campaign has none. */
|
|
5673
6053
|
description?: string | null;
|
|
5674
|
-
/** @description Campaign step-by-step instructions, same shape as a creative's. Absent
|
|
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. */
|
|
5675
6055
|
instructions?: {
|
|
5676
6056
|
title: string;
|
|
5677
6057
|
subtitle: string;
|
|
@@ -5679,15 +6059,15 @@ export interface components {
|
|
|
5679
6059
|
/** @description Optional https image for this step. Absent: the step has none. */
|
|
5680
6060
|
imageUrl?: string;
|
|
5681
6061
|
}[] | null;
|
|
5682
|
-
/** @description Campaign one-line instructions. Absent
|
|
6062
|
+
/** @description Campaign one-line instructions. Absent from servers that predate it; null means the campaign has none. */
|
|
5683
6063
|
quickInstructions?: string | null;
|
|
5684
|
-
/** @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
|
|
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. */
|
|
5685
6065
|
logoUrl?: string | null;
|
|
5686
|
-
/** @description Campaign card title. Absent
|
|
6066
|
+
/** @description Campaign card title. Absent from servers that predate it; null means the campaign has none. */
|
|
5687
6067
|
title?: string | null;
|
|
5688
|
-
/** @description Campaign card subtitle. Absent
|
|
6068
|
+
/** @description Campaign card subtitle. Absent from servers that predate it; null means the campaign has none. */
|
|
5689
6069
|
subtitle?: string | null;
|
|
5690
|
-
/** @description Campaign tooltip text. Absent
|
|
6070
|
+
/** @description Campaign tooltip text. Absent from servers that predate it; null means the campaign has none. */
|
|
5691
6071
|
tooltipText?: string | null;
|
|
5692
6072
|
};
|
|
5693
6073
|
Creative: {
|
|
@@ -5707,9 +6087,10 @@ export interface components {
|
|
|
5707
6087
|
ctaText: string;
|
|
5708
6088
|
/**
|
|
5709
6089
|
* Format: uri
|
|
5710
|
-
* @description
|
|
6090
|
+
* @description The campaign's destination, on a served creative; null where not served
|
|
5711
6091
|
*/
|
|
5712
6092
|
destinationUrl: string | null;
|
|
6093
|
+
/** @description The campaign's claim tracking, on a served creative; null where not served */
|
|
5713
6094
|
trackingParameters: {
|
|
5714
6095
|
[key: string]: unknown;
|
|
5715
6096
|
} | null;
|