All updates

Milestone webhooks, with every delivery on the record

Milestone events post to an endpoint you control, every attempt stays on the record, appearance reaches the Partner API, and embeds load twice as fast.

01 ·Milestone webhooks that post where you point them

A milestone webhook posts to an endpoint of your choosing when a trader reaches a milestone. Targets come from one hierarchical list, and a group and a stage are independent choices: picking a group does not pick the stages beneath it. Where a target supports downgrade, a direction decides whether the webhook fires on the way up or the way down. The request is yours to shape, with method, URL, repeatable headers and a full JSON body, and field variables drop in at the cursor from a searchable list. A new webhook starts paused.

Why it matters

A broker running tier progression usually wants the rest of its stack to know. Pointing a webhook at a CRM or a data warehouse turns a tier change into something the sales desk and the reporting layer can act on the same day, without waiting for someone to export a list.

02 ·Every delivery, every attempt, on the record

A delivery keeps its attempts. Automatic retries run up to three times, and when a later attempt succeeds the delivery reads Delivered while the earlier attempts stay attached with their own request and response. Once three are spent the delivery reads Failed, and the webhook shows Failed until that delivery resolves. A manual retry appends to the same delivery. Recent deliveries sit beside whichever webhook is open, searchable by what was sent or by date, and a History tab holds the full record for investigation.

One delivery
Tier reached · VIP status sync
Delivered
Attempts kept on the delivery
Attempt 1Automatic
500Failed
Attempt 2Automatic
500Failed
Attempt 3Automatic
No responseFailed
Attempt 4Manual retry
200Succeeded
Automatic retries stop at threeA manual retry appends to this deliveryFailed attempts stay readable
Illustration · one delivery, its automatic attempts, and where a manual retry lands
Why it matters

Integration work fails quietly. Every attempt keeps the response that came back, so someone can say whether the endpoint was down or the request was wrong without rebuilding the moment to reproduce it.

03 ·Feature appearance draws on your saved themes

The style tab for Spin the Wheel now has the full appearance set rather than a short selected list, and every custom theme saved in Appearance Settings is available inside it. A tag marks the colours the wheel actually draws with, so it is clear which ones will change anything, and editing a colour the preview does not use leaves the preview alone. Background 4 becomes the primary background and the other slots re-order to match. Existing mini-game styling holds, and the Custom Widgets page keeps its own settings.

Why it matters

Brand consistency is why a broker builds a theme at all. Reaching a saved theme from inside a game keeps the reward surfaces looking like the rest of the portal, and the tagging shows which colours are worth setting.

04 ·Appearance and community details over the Partner API

Four Partner API contracts read and write how a community looks and how it presents itself: appearance, covering theme, font, palettes, branding, loading animation and call to action; the community bot's name and avatar; preview metadata with member-list visibility and guest mode; and the community name with its canonical URI.

Each contract has a GET and a PUT, needs a new appearance permission on the API key, and acts on the community that key belongs to. A partial update keeps the fields it does not mention, and a custom theme merges the palette values sent over the ones already stored.

Why it matters

An agency handling branding for several communities can push a palette change from its own tooling and have the admin, the trader front end and any embedded surface agree. Colours typed in twice are the ones that drift.

05 ·Embedded widgets appear about twice as fast

A script-tag embed of a custom widget now boots in parallel: the iframe fetches its HTML and JavaScript while authentication is still in flight, and the error-settings call holds nothing up. The page declares the widget's whole chunk graph up front, so the browser collects it in one round trip. The server holds a community's loading animation for fifteen minutes rather than fetching it per view, and browsers cache preflight responses. On a throttled test connection, a first visit and a repeat visit each reached a complete widget about twice as fast.

Both lanes run at once
Iframe
Widget HTML
Whole chunk graph, one round trip
Authentication
Token requested
Token handed to the iframe
Widget visible
Neither lane waits for the other
Loading animation held for fifteen minutesPreflight responses cachedCustom widget embeds only
Illustration · the iframe loads while authentication is still in flight
Why it matters

The widget is the first thing a broker's own visitors meet of the loyalty programme, and it sits inside a page the broker already worked to make quick. Boot time is the one part of that they cannot tune themselves.

Also in this build
Under the hood

Scrolling back through channel history moves in larger pages with messages rendered as they arrive, so a long history keeps scrolling.

17 Aug
Fix

Direct-message notifications on the activity page arrive as they happen, along with message edits and read state shared across the tabs.

17 Aug