Changelog
Meaningful developer-facing changes to the AIRewards and SearchRewards SDKs, newest first. Each entry says what changed, what (if anything) you need to do, and where the full reference lives. Behavior that is not listed here has not changed.
2026-11-14
- AIRewards: new
onPickSDK event, and a clearer story. Jutera is now presented as free AI for your users, with rewards included — the site, these docs, and the dashboard lead with the AI experience and present earning as a feature you control. In Dashboard → Appearance, “Reward confirmation heading/sub-headline” are now “Selection confirmation heading/sub-headline” (same saved values; if you offer rewards, use those fields for your reward message), and the widget footer now reads “Powered by Jutera.” New SDK signal: theonPickcallback andairewards:pick-confirmedevent ({ conversation_id, duel_id, rewarded, reward_eligible, reason, event_id, test_mode }) fire when a pick is confirmed, whether or not it earned — use it as your completion signal for rewarded and non-rewarded implementations alike, and keep crediting only from thereward.earnedwebhook. When a pick earns,onPickfires first, thenonEarn. Full reference: Widget events. Action needed: none — existingonEarnand webhook integrations are unchanged. - AIRewards: header logo, and the header message can now be blank. The widget header can show a logo, a message, both, or neither. Upload a logo (plus an optional dark-mode version) in Dashboard → Appearance, or pass your own
https://image per launch with the new theme keysheaderLogoUrl,headerLogoUrlDark,headerLogoHeight(16–48 px), andheaderLogoAlt.headerText: ''now means no message (previously it fell back to “Ask anything”); omittingheaderTextstill shows your saved message, or “Ask anything” if you never set one. Existing dashboard themes with a blank message were updated to show “Ask anything”, so no live widget changes. Full reference: Header logo. Action needed: only if you passheaderText: ''in code and want “Ask anything” — remove the key instead. - AIRewards:
themepassed toAIRewards.init()now merges with your saved Appearance. Previously anythemeobject replaced the Dashboard → Appearance theme entirely, so a partial theme silently dropped your saved colors, font, and copy. Now the saved theme is the base and each key you pass overrides just that setting for the launch. A flat color such asprimaryColorstill applies in both light and dark mode. Full reference: Web embed. Action needed: if you relied on a partialthemeto hide saved settings (for example saved copy you no longer want), update or clear them in Dashboard → Appearance, or pass those keys explicitly. - AIRewards: trivial questions can now pass through without rewards. A genuine but quick-fact question (for example, a capital city or a population figure) no longer has to be blocked. By default it now runs the duel and the user can pick and continue the chat, but no earning event is created and no
reward.earnedwebhook fires for that pick. Choose the account-wide behavior in Dashboard → Settings → Trivial questions (“Let through without rewards” or “Block”), or per embed withtrivialGate: 'soft' | 'hard'inAIRewards.init(...)/"trivial_gate"in signed launch-token metadata. New SDK signal: theonRewardIneligiblecallback andairewards:reward-ineligibleevent ({ conversation_id, duel_id, reason: 'trivial_question', test_mode }) fire when such a duel is ready, so your app can tell the user no reward is coming. Crediting still happens only from thereward.earnedwebhook. Full reference: Trivial questions. Action needed: none — the new default applies automatically; set the dashboard option to “Block” if you prefer the previous behavior. - AIRewards: chat history and new-chat controls. The widget header gained History and New chat, and the SDK gained
AIRewards.newChat(),AIRewards.getHistory(), andAIRewards.openConversation()plus the matching server endpointsGET /v1/conversationsandGET /v1/conversations/:conversation_id. Picked chats can be continued; unpicked chats are read-only. Full reference: New chat & history.
Older changes predate this page and are not backfilled. Going forward, every meaningful developer-facing feature lands here in the same change that ships it.