Nudge library
BoomTower seeds a tenant-wide catalog of approved nudges via versioned library migrations. Each library nudge has a stable libraryKey slug. Partner apps (for example HeadRight) should map their UI presets to these keys — not to display names or hardcoded KSUIDs.
How library nudges work
- Tenant library — migrations upsert nudges with
source: "library"and a uniquelibraryKey. IDs are deterministic per tenant. - Organization catalog — each org activates a subset via
PATCH /v1/organizations/{id}with anudgesarray. Members only receive nudges that are active in their org catalog. - Member toggles — per-member on/off and schedule overrides use
GET/PATCH …/members/…/nudge-settings(see REST API). - Reply tracking — set
responseTypeon a nudge and fetch standardized replies viaGET /v1/nudges/{key}/replies(see Nudge replies).
HeadRight preset mapping
Map each HeadRight habit preset to the libraryKey below. Resolve the BoomTower nudge id once via GET /v1/nudges (filter source === "library") and cache libraryKey → id.
| HeadRight preset | libraryKey | Display name |
|---|---|---|
| daily-commit | daily-commit | Daily Commit |
| weigh-in | weigh-in | Weekly weigh-in |
| push-ups | push-ups | Push-ups |
| guzzle-your-gallon | guzzle-your-gallon | Guzzle your gallon |
| booze-check | booze-check | Booze check |
| bedtime | bedtime | Bedtime for Bonzo |
| weekly-report-card | weekly-report-card | Friday report card |
Integration flow
Recommended approach for HeadRight (server-side, using your organization API key):
- On connect (or first dashboard load), call
GET https://api.boomtower.com/v1/nudgeswithX-API-Key. - Build a map of library nudges:
libraryKey → idwheresource === "library". - When a user toggles a preset, PATCH member nudge settings with the resolved
nudgeIdandenabled.
GET https://api.boomtower.com/v1/nudges
X-API-Key: YOUR_ORG_API_KEY
// Response entries include:
// { "id": "…", "source": "library", "libraryKey": "water", "name": "Drink water", … }PATCH https://api.boomtower.com/v1/organizations/{orgKsuid}/members/nudge-settings?externalApp=headright&externalId={userId}
X-API-Key: YOUR_ORG_API_KEY
Content-Type: application/json
{
"data": {
"overrides": [
{ "nudgeId": "RESOLVED_NUDGE_KSUID", "enabled": true }
]
}
}Do not match nudges by display title or hardcode KSUIDs. Keys and names can evolve; libraryKey is the stable contract.
BoomTower will activate all HeadRight habit nudges in your organization catalog. Until that is done, toggles for missing catalog entries will fail with a "not in organization catalog" error.
Full catalog
Default prompts and schedules below. Times are interpreted in each member's timezone when nudges are sent.
Daily check-in
daily-check-in“How are you feeling today? Reply with a number 1-10 or a few words.”
Daily at 9:00 AM (member timezone) · bucket: wellness
Drink water
water“Time for a glass of water — stay hydrated.”
Daily at 10:00 AM (member timezone) · bucket: habits
Do pushups
pushups“Quick strength break — drop and give yourself a few pushups.”
Daily at 11:00 AM (member timezone) · bucket: habits
Stretch
stretch“Loosen up — stretch your back and shoulders for a minute.”
Daily at 2:00 PM (member timezone) · bucket: habits
Take a walk
walk“Get the steps in — take a short walk if you can.”
Daily at 3:00 PM (member timezone) · bucket: habits
Deep breath
breath“Reset with a few slow, deep breaths.”
Daily at 12:00 PM (member timezone) · bucket: habits
Posture check
posture“Posture check — sit tall and relax your shoulders.”
Daily at 2:30 PM (member timezone) · bucket: habits
Gratitude
gratitude“What's one thing you're grateful for today?”
Daily at 6:00 PM (member timezone) · bucket: habits
Wind down
sleep“Start winding down for bed — screens off when you can.”
Daily at 9:00 PM (member timezone) · bucket: habits
Daily Commit
daily-commitHeadRight: daily-commit“Do you commit to getting your headright today so you can be here tomorrow?”
Daily at 8:00 AM (member timezone) · bucket: habits
Weekly weigh-in
weigh-inHeadRight: weigh-in“Results! What do you weigh (in lbs)?”
Daily at 8:00 AM (member timezone) · bucket: habits
Push-ups
push-upsHeadRight: push-ups“Drop and give me as many as you got! How many pushups did you have in you?”
Daily at 12:00 PM (member timezone) · bucket: habits
Guzzle your gallon
guzzle-your-gallonHeadRight: guzzle-your-gallon“Did you guzzle your gallon? How much water did you drink today (in oz)?”
Daily at 5:00 PM (member timezone) · bucket: habits
Booze check
booze-checkHeadRight: booze-check“Did you bend to the booze? How many drinks did you have today?”
Daily at 8:00 PM (member timezone) · bucket: habits
Bedtime for Bonzo
bedtimeHeadRight: bedtime“Bedtime for Bonzo! Go the hell to bed!”
Daily at 11:00 PM (member timezone) · bucket: habits
Friday report card
weekly-report-cardHeadRight: weekly-report-card“AI-generated weekly report card image from member chat history.”
Daily at 5:00 PM (member timezone) · bucket: habits
Example preset map (TypeScript)
// presets.ts — stable mapping; resolve ids at runtime from GET /v1/nudges
export const PRESET_LIBRARY_KEYS = {
water: 'water',
pushups: 'pushups',
stretch: 'stretch',
walk: 'walk',
breath: 'breath',
posture: 'posture',
gratitude: 'gratitude',
sleep: 'sleep',
} as const;
export async function resolveLibraryNudgeIds(apiKey: string): Promise<Record<string, string>> {
const res = await fetch('https://api.boomtower.com/v1/nudges', {
headers: { 'X-API-Key': apiKey },
});
const body = await res.json();
const map: Record<string, string> = {};
for (const nudge of body.data ?? []) {
if (nudge.source === 'library' && nudge.libraryKey) {
map[nudge.libraryKey] = nudge.id;
}
}
return map;
}Public docs URL: https://boomtower.com/docs/nudge-library
API reference: https://boomtower.com/docs · Embed consent: https://boomtower.com/docs/embed-consent · Nudge replies