HatchedDocs
Reference

HTTP API

Lean API contract and state machines — V1 scope, endpoints, authentication, and the business processes behind each operation.

Most integrations should use @hatched/sdk-js rather than calling these endpoints directly — it handles auth, retries, idempotency, error parsing, and edge runtimes for you. Reach for raw HTTP only when there's no SDK for your language.

Quick reference

Base URL (production)https://api.hatched.live/api/v1
Base URL (staging)https://api.staging.hatched.live/api/v1
AuthAuthorization: Bearer <key> — secret key (hatch_live_* / hatch_test_*, server-only) or publishable key (hatch_pk_*, limited reads). Widgets pass a short-lived session token instead. See Auth model.
CasingThe raw HTTP API uses snake_case for every request and response field (user_id, buddy_id, ttl_seconds). Sending camelCase is rejected (property userId should not exist). @hatched/sdk-js is the only place you write camelCase — it converts to snake_case on the wire and back on responses. SDK code samples (```ts) use camelCase; raw HTTP samples (```http / curl) use snake_case. (The error envelope below is the one camelCase exception — requestId, not request_id.)
First-run flowMinting a widget token requires an existing buddy_id — you can't go from user_id straight to a session token. The full path (published config → reuse-or-create egg → ready → hatch → poll operation → persist buddy_idPOST /widget-sessions) is in First user bootstrap.
ErrorsAlways the canonical envelope { "error": { "code", "message", "details?", "requestId" } }. Codes are stable — branch on code, not message. See Error codes.
Request correlationEvery request echoes an X-Request-Id header; it also appears in the error envelope, your logs, and outgoing webhook payloads. Include it in support requests.
IdempotencyTwo separate mechanisms. (1) POST /events auto-dedupes on the event_id you supply — resending is a header-free no-op. (2) Any mutating write (POST/PUT/PATCH/DELETE) accepts an Idempotency-Key header: the response is cached for 24h, replaying the same key and body returns the cached response with an Idempotency-Replayed: true header, and reusing the key with a different body returns 409 idempotency_key_conflict. The coin / token / purchase-item writes flagged (supports idempotency) in the Endpoints table are exactly these — set an Idempotency-Key before you retry them. Only successful responses are cached, so a failed mutation retries fresh. Still guard POST /eggs against React Strict Mode / focus re-runs (see the bootstrap guide), or use ?ensure=true.
Async workImage-producing calls (hatch, evolve, equip) return an operationId. Poll GET /operations/{id} or use operations.wait(id) in the SDK. Don't tight-loop.
PaginationList endpoints return either { data, pagination: { nextCursor, hasMore, limit } } (cursor-based — pass cursor) or { data, meta: { page, limit, total } } (page-based — pass page). The key present (pagination vs meta) tells you which. See Pagination.
Rate limitsPer-key quotas; 429 responses carry Retry-After and X-RateLimit-* headers. The SDK retries with backoff by default. See Rate limits.
Billing402 with code: 'credit_insufficient', event_quota_exceeded, or plan_feature_locked when you hit a billing limit. See Handling 402.

The rest of this page is the V1 product contract — scope, state machines, and the business processes behind each operation. The full machine-generated endpoint list is in Endpoints below.


Goal: Position Hatched as a narrow-scope product that does one thing exceptionally well, rather than an "enterprise does-everything" platform.

This document clarifies three things:

  1. Which business processes V1 definitively supports
  2. Which state machines make the system deterministic
  3. How the API contracts stay lean and easy to integrate

1. Product Philosophy

V1 targets for Hatched:

  • Not a "platform" where the customer designs their own game
  • A service that reliably produces buddy progression from the customer's existing product events

That's why V1 follows these principles:

  • Template-first: limited rule types instead of a free-form rule language
  • Publish-before-live: progression config changes are edited in draft, then published
  • Async-by-default: visual-producing jobs are tracked via operations
  • Read vs write separation: easy for widgets to read, tighter controls on mutations
  • Canonical state lives in Hatched: customers may keep a local copy, but Hatched is the source of truth

2. V1 Scope

2.1 Definitely in V1

  • Preset plan selection and customization
  • Skill set definition
  • Coin rules
  • Badge rules
  • Evolution readiness and evolution trigger
  • Item marketplace
  • Buddy widget
  • Marketplace widget
  • Event ingestion
  • Webhook delivery
  • Multi-buddy support

2.2 Not in V1

  • Full no-code workflow builder
  • Unlimited rule engine with if/else trees
  • Cross-customer shared economy
  • Buddy-to-buddy social graph
  • Full user-level CRM
  • Real-time multiplayer / competition engine
  • Arbitrary CSS/JS execution on the customer side
  • Custom approval flows tailored per customer need

2.3 Deliberately limited in V1

  • Rule types are picked from fixed enums
  • Widget theme is configurable but not an infinite design surface
  • Evolution capped at 5 stages
  • Token types start with a limited set of system tokens
  • Marketplace visibility and requirement logic ships with predefined operators

3. User-Friendly Business Processes

3.1 Customer onboarding

Goal: ship an integration that's live in 10 minutes.

Flow:

  1. Customer creates an account
  2. Picks a preset plan
  3. Lightly edits skill, badge, coin and evolution fields
  4. Publishes the draft
  5. Receives an API key
  6. Sends the first POST /events request
  7. Generates a widget token and embeds it

UI principles:

  • First screen exposes at most 3 major decisions: preset, style, widget theme
  • "Advanced" fields are collapsed by default in every editor
  • No "empty page" feeling; the starter config from the preset is always visible

3.2 Progression config change

Goal: make changes without disturbing existing users' balance.

Flow:

  1. Customer opens the draft config
  2. Edits skill/badge/coin/evolution fields
  3. System shows an impact summary:
    • affects new buddies
    • does not affect existing buddies
    • migration can be run separately on demand
  4. Customer publishes
  5. New config_version becomes active

UI principles:

  • "Save" and "Publish" separation must be obvious
  • Publish modal uses impact language, not technical jargon
  • "This change does not retroactively affect existing buddies" must be clearly shown

3.3 Event-driven reward generation

Goal: the customer only sends the event; Hatched computes the reward.

Flow:

  1. Customer sends the event via POST /events
  2. Hatched deduplicates the event
  3. Rule engine computes effects
  4. Writes coin/token/badge/streak/evolution_ready effects
  5. Emits a webhook if needed

UI principles:

  • Dashboard shows "recent events" and "generated effects" side by side
  • Debug screen gives a clear answer to "why didn't this event produce a reward?"

3.4 Hatch / equip / evolve

Goal: make visual-producing flows deterministic and understandable.

Flow:

  1. Customer or widget initiates an action
  2. API returns an operation_id
  3. Worker finishes the job
  4. Result arrives via webhook or polling

UI principles:

  • "Processing..." is a first-class state
  • Error messages are action-specific, not generic "Image generation failed"
  • The user must not retry the same action in a panic

3.5 Widget access

Goal: easy to integrate, but controlled on the write side.

Modes:

  • Read-only embed: buddy widget, leaderboard
  • Interactive session: marketplace purchase, equip item

UI principles:

  • Embed snippet must be short
  • Token generation should feel like a "copy-paste snippet" experience
  • A read-only embed should require the minimum possible backend integration

4. Canonical Domain Concepts

4.1 Customer

The B2B tenant that uses Hatched.

Owns:

  • plan
  • settings
  • active_config_version_id

4.2 ConfigVersion

Immutable snapshot of progression logic.

Contains:

  • skill set
  • coin rules
  • badge definitions
  • evolution rules
  • token rules
  • marketplace requirements

4.3 Egg

The pending object before a buddy is born.

Rules:

  • bound to a specific user
  • created with a config_version
  • transitions to a closed state once hatched

4.4 Buddy

A user-owned progression unit.

Rules:

  • a user can own multiple buddies
  • a buddy is pinned to a single config_version
  • its version does not change unless migration happens

4.5 EventIngestion

The recorded external domain event from a customer.

Rules:

  • customer_id + event_id is unique
  • the same event does not produce a reward twice

4.6 EconomyLedger

Immutable ledger of coin/token mutations.

Rules:

  • each row is a credit or a debit
  • balance is a computed/projection field
  • mutation endpoints write to the ledger

4.7 Operation

Record for tracking an asynchronous job.

Types:

  • hatch
  • equip_item
  • evolve

5. State Machines

5.1 ConfigVersion State Machine

States:

  • draft
  • published
  • archived

Transitions:

  • draft -> published
  • published -> archived

Rules:

  • only one published version may be active
  • publish creates a new version; it never mutates an existing one

5.2 Egg State Machine

States:

  • waiting
  • ready
  • hatching
  • hatched
  • cancelled

Transitions:

  • waiting -> ready
  • ready -> hatching
  • hatching -> hatched
  • waiting -> cancelled
  • ready -> cancelled

Rules:

  • hatch may only be initiated from ready
  • hatching persists until the operation completes

5.3 Buddy State Machine

The top-level buddy state is kept simple:

  • active
  • archived

A buddy's real variables are:

  • evolution_stage
  • skills
  • coins
  • tokens
  • equipped_items

Rules:

  • an attribute-based model is preferred over a progression state machine
  • this keeps the UI simpler

5.4 Operation State Machine

States:

  • pending
  • processing
  • completed
  • failed
  • cancelled

Transitions:

  • pending -> processing
  • processing -> completed
  • processing -> failed
  • pending -> cancelled

Rules:

  • the client never treats the result as final until it sees completed/failed

5.5 WidgetSession State Machine

States:

  • issued
  • active
  • expired
  • revoked

Rules:

  • read-only tokens may be longer-lived
  • interactive tokens must be short-lived
  • interactive tokens operate on scopes

6. Lean API Contract

6.1 Public integration endpoints

POST /api/v1/eggs

Purpose:

  • create a pending egg record for a user

Query params:

  • ensure=true — return this user's most recent waiting/ready egg if one already exists instead of creating a new one (idempotent first-run bootstrap; also dodges the per-user active-egg cap on retries).

Request:

{
  "user_id": "user_123",
  "metadata": {
    "age": 12,
    "level": "beginner"
  }
}

Response:

{
  "egg_id": "egg_abc",
  "status": "waiting",
  "visual_variant": 7,
  "config_version_id": "cfg_v12",
  "user_id": "user_123",
  "buddy_id": null,
  "metadata": { "age": 12, "level": "beginner" },
  "created_at": "2026-04-08T10:30:00Z"
}

buddy_id is null until the egg reaches status: "hatched", after which it carries the hatched buddy's id (same on GET /api/v1/eggs/{egg_id} and GET /api/v1/eggs).

Errors:

  • 409 no_published_config — the customer has no published config version yet; details.publish_url links to the dashboard publish page.
  • 409 active_egg_limit — the per-user active-egg cap is reached; details.active lists the existing eggs (egg_id, status, created_at) and details.max the cap. Hatch/cancel one, or retry with ?ensure=true.

PATCH /api/v1/eggs/{egg_id}/status

Purpose:

  • mark the egg ready or cancel it

Allowed statuses:

  • ready
  • cancelled

POST /api/v1/eggs/{egg_id}/hatch

Purpose:

  • kick off an async hatch operation

Response:

{
  "accepted": true,
  "operation_id": "op_123",
  "status": "pending"
}

POST /api/v1/events

Purpose:

  • ingest a customer domain event

Request:

{
  "event_id": "evt_789",
  "user_id": "user_123",
  "type": "lesson_completed",
  "occurred_at": "2026-04-08T10:30:00Z",
  "audience": "students",
  "properties": {
    "lesson_id": "lesson_456",
    "score": 87
  }
}

audience is optional for single-audience customers (the server applies the implicit default) but required once you've defined 2+ audiences — omit it then and the call fails with 400 missing_audience; send an unknown value and it fails with 400 unknown_audience. The value must match an audience key configured in Dashboard → Audiences.

Response:

{
  "accepted": true,
  "event_id": "evt_789",
  "effects": {
    "coins": 10,
    "badges_awarded": [],
    "tokens": [],
    "evolution_ready": false
  }
}

GET /api/v1/buddies/{buddy_id}

Purpose:

  • return canonical buddy state

POST /api/v1/buddies/{buddy_id}/evolve

Purpose:

  • start an async evolution operation

PATCH /api/v1/buddies/{buddy_id}/equipped-items

Purpose:

  • start an equip/unequip operation

GET /api/v1/operations/{operation_id}

Purpose:

  • read the status of a hatch/equip/evolve

6.2 Manual override endpoints

These endpoints ship in V1 but are not marketed as the "primary flow":

  • PATCH /buddies/{id}/skills
  • POST /buddies/{id}/coins
  • POST /buddies/{id}/coins/spend
  • POST /buddies/{id}/badges
  • POST /buddies/{id}/tokens

Use cases:

  • admin correction
  • migration
  • special campaign
  • support operation

6.3 Widget endpoints

POST /api/v1/widget-sessions

Purpose:

  • mint an interactive widget session token

Request:

{
  "buddy_id": "b3d7c8a0-1234-4f5e-9abc-def012345678",
  "user_id": "user_42",
  "scopes": ["marketplace:purchase", "items:equip"]
}

Response:

{
  "token": "wgt_sess_xxx",
  "session_id": "3d7ec5a4-7c47-41aa-a869-2e63e2d0d3c8",
  "expires_at": "2026-04-08T11:00:00Z",
  "scopes": ["marketplace:purchase", "items:equip"]
}

POST /api/v1/embed-tokens

Purpose:

  • mint a signed token for a read-only widget

7. UX Guardrails for the Dashboard

7.1 Rule templates instead of a rule builder

The V1 panel must offer:

  • Pick a trigger
  • Pick a reward
  • Pick a limit
  • Preview impact

The V1 panel must NOT offer:

  • nested if/else
  • custom expression language
  • event transformation DSL
  • arbitrary JSON editor as the primary UX

7.2 Publish UX

Every progression editor follows this shape:

  • Draft badge
  • Unsaved changes indicator
  • Publish CTA
  • Impact summary
  • "Publish a new version" instead of a rollback model

7.3 Support UX

Support/operator screens must surface:

  • recent events
  • effects generated from an event
  • operation status
  • the user's buddy list
  • recent ledger activity

These screens exist for operational confidence, not enterprise complexity.


8. Business Process Decisions

8.1 What we keep centralized

Hatched owns the truth for:

  • progression truth
  • config version truth
  • buddy ownership truth
  • operation truth
  • ledger truth

8.2 What we leave to the customer

The customer owns:

  • event production
  • user identity mapping
  • when a product action emits an event
  • maintaining the buddy ID list inside their own product UI
  • which widget appears on which screen

8.3 What we deliberately don't build

  • We do not move the customer's whole business logic into Hatched
  • We are not a full BPM/workflow product
  • We are not a CRM or engagement automation hub
  • We do not build an infinitely configurable admin panel

"Customer events in, progression out."

That's the strongest, simplest positioning for the product:

  • The customer emits events
  • Hatched computes progression
  • The widget renders the result

Everything else is secondary.

Endpoints

MethodPathSummaryTag
GET/api/v1/analytics/activity-summaryGet activity summaryAnalytics
GET/api/v1/analytics/audiencesGet audience breakdownAnalytics
GET/api/v1/analytics/custom-eventsGet custom event trendsAnalytics
GET/api/v1/analytics/economy-healthGet economy healthAnalytics
GET/api/v1/analytics/economy-summaryGet economy summaryAnalytics
GET/api/v1/analytics/engagementGet engagement metricsAnalytics
GET/api/v1/analytics/event-countsPer-event countsAnalytics
GET/api/v1/analytics/evolutionGet evolution timelineAnalytics
GET/api/v1/analytics/feature-activityGet feature activityAnalytics
GET/api/v1/analytics/marketplace-funnelGet marketplace funnelAnalytics
GET/api/v1/analytics/overviewGet analytics overviewAnalytics
GET/api/v1/analytics/popular-badgesGet popular badgesAnalytics
GET/api/v1/analytics/popular-itemsGet popular itemsAnalytics
GET/api/v1/analytics/retentionGet retention metricsAnalytics
GET/api/v1/analytics/roi-metricsGet ROI metricsAnalytics
GET/api/v1/analytics/streaksGet streak healthAnalytics
GET/api/v1/analytics/tokensGet per-token economyAnalytics
GET/api/v1/analytics/webhooksGet webhook delivery healthAnalytics
GET/api/v1/auth/api-keysList all active API keys for the current customerAuth
POST/api/v1/auth/api-keysCreate a new API keyAuth
DELETE/api/v1/auth/api-keys/{id}Revoke an API key by its IDAuth
POST/api/v1/auth/api-keys/rotateRotate API keys by revoking all existing keys and creating a new oneAuth
GET/api/v1/auth/api-keys/whoamiReturn the identity, plan, capabilities, and scopes of the calling credentialAuth
POST/api/v1/auth/email/verification/requestRequest a fresh dashboard email verification linkAuth
POST/api/v1/auth/email/verifyVerify dashboard account email with a one-time tokenAuth
POST/api/v1/auth/loginAuthenticate and obtain a JWT tokenAuth
GET/api/v1/auth/meGet the currently authenticated customer profileAuth
POST/api/v1/auth/password/changeChange the current dashboard account passwordAuth
POST/api/v1/auth/password/resetReset dashboard password with a one-time tokenAuth
POST/api/v1/auth/password/reset/requestRequest a dashboard password reset tokenAuth
POST/api/v1/auth/publishable-keysIssue a browser-safe publishable key (hatch_pk_*) with a scoped set of permissions.Auth
POST/api/v1/auth/registerRegister a new customer accountAuth
GET/api/v1/auth/sso/callbackComplete dashboard SSO callback from OIDC providerAuth
GET/api/v1/auth/sso/configReturn public dashboard SSO configurationAuth
GET/api/v1/auth/sso/startStart dashboard SSO via generic OIDCAuth
GET/api/v1/badge-definitionsList all badge definitionsBadge Definitions
POST/api/v1/badge-definitionsCreate a badge definitionBadge Definitions
DELETE/api/v1/badge-definitions/{id}Delete a badge definitionBadge Definitions
GET/api/v1/badge-definitions/{id}Get a badge definitionBadge Definitions
PUT/api/v1/badge-definitions/{id}Update a badge definitionBadge Definitions
POST/api/v1/badge-definitions/{id}/regenerate-iconQueue an AI regeneration for this badge iconBadge Definitions
POST/api/v1/badge-definitions/generate-iconGenerate a badge icon with AIBadge Definitions
POST/api/v1/badge-definitions/upload-iconUpload a badge iconBadge Definitions
POST/api/v1/billing/checkoutCreate checkout sessionBilling
GET/api/v1/billing/checkout/session/{id}Reconcile a Stripe checkout sessionBilling
POST/api/v1/billing/portalCreate billing portal sessionBilling
GET/api/v1/billing/statusGet billing statusBilling
GET/api/v1/buddiesList buddies with pagination and optional filtersBuddies
POST/api/v1/buddies/{buddy_id}/appearance/rerenderRegenerate the buddy stage base imageBuddies
GET/api/v1/buddies/{buddy_id}/badgesList all badges awarded to a buddyBuddies
POST/api/v1/buddies/{buddy_id}/badgesAward a badge to a buddyBuddies
POST/api/v1/buddies/{buddy_id}/coinsEarn coins for a buddy (supports idempotency)Buddies
POST/api/v1/buddies/{buddy_id}/coins/spendSpend coins for a buddy (supports idempotency)Buddies
PATCH/api/v1/buddies/{buddy_id}/equipped-itemsEquip or unequip items on a buddyBuddies
GET/api/v1/buddies/{buddy_id}/evolutionCheck evolution readiness and progress for a buddyBuddies
GET/api/v1/buddies/{buddy_id}/evolutionsStage transition timeline for a buddyBuddies
POST/api/v1/buddies/{buddy_id}/evolveTrigger asynchronous buddy evolutionBuddies
POST/api/v1/buddies/{buddy_id}/gates/{gate_key}/unlockSpend tokens to unlock a gate for a buddyGates
GET/api/v1/buddies/{buddy_id}/progressionGet buddy progression metrics (legacy endpoint)Buddies
GET/api/v1/buddies/{buddy_id}/progression-metricsGet buddy progression metrics (lessons, quizzes, streaks, etc.)Buddies
POST/api/v1/buddies/{buddy_id}/purchase-itemPurchase a marketplace item using coins (supports idempotency)Buddies
GET/api/v1/buddies/{buddy_id}/purchased-itemsList all purchased items for a buddyBuddies
GET/api/v1/buddies/{buddy_id}/tokensTyped token balances (primary + progression)Buddies
POST/api/v1/buddies/{buddy_id}/tokensEarn or spend tokens for a buddy (supports idempotency)Buddies
POST/api/v1/buddies/{buddy_id}/unlock-itemUnlock an item without spending coinsBuddies
GET/api/v1/buddies/{buddy_id}/unlocksList gates this buddy has unlockedGates
GET/api/v1/buddies/{id}Get buddy details with full canonical stateBuddies
PATCH/api/v1/buddies/{id}Update a buddy nameBuddies
PATCH/api/v1/buddies/{id}/archiveArchive a buddy (one-way transition from active to archived)Buddies
POST/api/v1/buddies/{id}/shareMint (or fetch) the public share link for a buddyBuddies
POST/api/v1/buddies/{id}/share/eventsRecord a share-sheet funnel event (opened / shared)Buddies
PATCH/api/v1/buddies/{id}/skillsUpdate buddy skill levels (increase, decrease, or set)Buddies
GET/api/v1/buddies/users/{user_id}/summaryGet a user summary including buddy count, coins, and badgesBuddies
GET/api/v1/buddy-share/settingsTenant buddy-share settings (toggles + resolved link origin)Buddies
PATCH/api/v1/buddy-share/settingsUpdate buddy-share toggles (enabled / show_tenant_name / cta_url)Buddies
GET/api/v1/buddy-share/statsRolling-window buddy-share funnel for the tenantBuddies
GET/api/v1/coin-rulesList all coin rulesCoin Rules
POST/api/v1/coin-rulesCreate a coin ruleCoin Rules
DELETE/api/v1/coin-rules/{id}Delete a coin ruleCoin Rules
PUT/api/v1/coin-rules/{id}Update a coin ruleCoin Rules
GET/api/v1/coin-rules/{id}/reward-pool/telemetryReward pool telemetryCoin Rules
GET/api/v1/config-versionsList config versionsConfig Versions
POST/api/v1/config-versionsCreate or open the draft config versionConfig Versions
GET/api/v1/config-versions/{id}Get config versionConfig Versions
PATCH/api/v1/config-versions/{id}Update config versionConfig Versions
POST/api/v1/config-versions/{id}/cloneClone config versionConfig Versions
GET/api/v1/config-versions/{id}/impactPreview config impactConfig Versions
POST/api/v1/config-versions/{id}/migrate-buddiesMigrate buddiesConfig Versions
POST/api/v1/config-versions/{id}/publishPublish config versionConfig Versions
GET/api/v1/credits/balanceGet credit balanceCredits
GET/api/v1/credits/ledgerList recent AI usage ledger entriesCredits
GET/api/v1/customers/meCustomers
PATCH/api/v1/customers/meCustomers
GET/api/v1/customers/me/analytics/share-funnelPublic share-page gift funnel (gift CTA + signup wall)Analytics
POST/api/v1/customers/me/apply-presetApply presetPresets
POST/api/v1/customers/me/assets/regenerateBulk regenerate AI assetsCustomers
PATCH/api/v1/customers/me/audiencesReplace the customer audience listCustomers
GET/api/v1/customers/me/awardsCustomer-wide HR award audit logCustomers
GET/api/v1/customers/me/beginners-luck/analyticsBeginner's Luck winner analyticsCustomers
POST/api/v1/customers/me/boosters/grantGrant a catalog booster to a buddy (admin one-off)Customers
GET/api/v1/customers/me/brag/by-channelChannel × event_kind click / completion matrixCustomers
GET/api/v1/customers/me/brag/configGet the Brag Button channel + copy-template configCustomers
PATCH/api/v1/customers/me/brag/configUpdate channel toggles, copy templates and webhook URLsCustomers
GET/api/v1/customers/me/brag/funnelBrag funnel aggregate over a date windowCustomers
GET/api/v1/customers/me/brag/telemetry.csvExport raw brag telemetry as CSVCustomers
POST/api/v1/customers/me/brag/webhook-testSend a dummy message to a Slack/Teams webhook URLCustomers
GET/api/v1/customers/me/causesList the tenant Cause Counter definitionsCustomers
POST/api/v1/customers/me/causesCreate a Cause Counter definitionCustomers
DELETE/api/v1/customers/me/causes/{id}Delete a Cause Counter definitionCustomers
PATCH/api/v1/customers/me/causes/{id}Update a Cause Counter definitionCustomers
POST/api/v1/customers/me/causes/{id}/draftStage draft edits for a published Cause Counter definitionCustomers
GET/api/v1/customers/me/causes/{id}/preview-30-daysProject symbolic units from the last 30 days of eligible events for a saved causeCustomers
GET/api/v1/customers/me/causes/{id}/webhookHTCH-106 — F4.5 cause webhook config + recent delivery attemptsCustomers
PATCH/api/v1/customers/me/causes/{id}/webhookHTCH-106 — F4.5 set the cause webhook URL, secret and threshold stepCustomers
POST/api/v1/customers/me/causes/{id}/webhook/testHTCH-106 — F4.5 send a test cause.threshold_reached event and return the delivery outcome inlineCustomers
GET/api/v1/customers/me/causes/analyticsHTCH-107 — F4.5 Humanity Hero admin analytics: customer-wide and per-team contribution rollups, time series, threshold ETA and webhook delivery health (Planner drawer "Analytics" tab)Customers
GET/api/v1/customers/me/causes/analytics.csvHTCH-107 — download the cause analytics as a CSV attachmentCustomers
GET/api/v1/customers/me/causes/auditHTCH-71 — paginated Cause Counter change history (drawer)Customers
GET/api/v1/customers/me/causes/preview-30-daysHTCH-71 — project symbolic units for an unsaved rate config (the drawer rate builder simulation)Customers
DELETE/api/v1/customers/me/council/narrative/slots/{slot}Retire the live proposal in a slot and restore the default copyCustomers
PUT/api/v1/customers/me/council/narrative/slots/{slot}Promote an approved proposal into a live narrative slotCustomers
GET/api/v1/customers/me/council/proposalsThe Council narrative-proposal moderation queueCustomers
PATCH/api/v1/customers/me/council/proposals/{id}Approve or reject a pending proposalCustomers
GET/api/v1/customers/me/event-badgesList event-triggered badge campaignsCustomers
POST/api/v1/customers/me/event-badgesCreate an event-triggered badge campaignCustomers
DELETE/api/v1/customers/me/event-badges/{id}Delete an event-triggered badge campaignCustomers
PATCH/api/v1/customers/me/event-badges/{id}Update an event-triggered badge campaignCustomers
GET/api/v1/customers/me/feature-configGet the tenant feature_config blobCustomers
PATCH/api/v1/customers/me/feature-config/{feature_key}Update one feature_config blockCustomers
GET/api/v1/customers/me/feature-togglesGet the tenant feature toggle stateCustomers
PATCH/api/v1/customers/me/feature-togglesUpdate tenant feature togglesCustomers
DELETE/api/v1/customers/me/feature-toggles/draftDiscard the pending draft toggle mapCustomers
POST/api/v1/customers/me/feature-toggles/publishPublish the pending draft toggle mapCustomers
GET/api/v1/customers/me/flash-salesList flash sales for the Planner drawerCustomers
POST/api/v1/customers/me/flash-salesSchedule a flash saleCustomers
DELETE/api/v1/customers/me/flash-sales/{id}Cancel a flash sale — a running sale clears its discountsCustomers
GET/api/v1/customers/me/founding-cohort/auditPaginated Founding Cohort assignment historyCustomers
GET/api/v1/customers/me/founding-cohort/audit/export.csvExport the full Founding Cohort assignment history as CSVCustomers
POST/api/v1/customers/me/founding-cohort/backfillRetroactively mark every currently-eligible buddy (idempotent)Customers
GET/api/v1/customers/me/founding-cohort/previewProject how many buddies the Founding Cohort config would mark. Optional query params preview an unsaved mode/threshold.Customers
GET/api/v1/customers/me/group-questsList the tenant Group Quests (filter by status / team)Customers
POST/api/v1/customers/me/group-questsCreate a Group Quest (status: draft)Customers
DELETE/api/v1/customers/me/group-quests/{questId}Delete a Group Quest (draft / cancelled only)Customers
PATCH/api/v1/customers/me/group-quests/{questId}Update a Group Quest — draft fields, active deadline-extension, or cancelCustomers
POST/api/v1/customers/me/group-quests/{questId}/force-resolveHTCH-56 — manually resolve a Group Quest now (admin watchdog override)Customers
POST/api/v1/customers/me/group-quests/{questId}/publishPublish a draft Group Quest (draft → active)Customers
GET/api/v1/customers/me/hosted-surfacesList the customer’s hosted surfacesCustomers
POST/api/v1/customers/me/hosted-surfacesCreate a hosted surface from a templateCustomers
GET/api/v1/customers/me/hosted-surfaces/{id}Fetch one hosted surface (admin lens)Customers
PATCH/api/v1/customers/me/hosted-surfaces/{id}Update name / theme / layout / mode / widget versionCustomers
POST/api/v1/customers/me/hosted-surfaces/{id}/archiveCustomers
POST/api/v1/customers/me/hosted-surfaces/{id}/logoUpload a hosted surface logo and attach it to the public shell themeCustomers
GET/api/v1/customers/me/hosted-surfaces/{id}/playersCustomers
POST/api/v1/customers/me/hosted-surfaces/{id}/playersAdd a player. Provide buddy_id to link an existing buddy or display_name to mint a new one.Customers
PATCH/api/v1/customers/me/hosted-surfaces/{id}/players/{playerId}Customers
GET/api/v1/customers/me/hosted-surfaces/{id}/players/{playerId}/access-codeRe-view a player’s current access code + QR token without rotating them. Returns available:false for players created before encrypted-at-rest storage existed — regenerate once to mint a re-viewable copy. Audited.Customers
POST/api/v1/customers/me/hosted-surfaces/{id}/players/{playerId}/regenerate-accessCustomers
POST/api/v1/customers/me/hosted-surfaces/{id}/publishCustomers
GET/api/v1/customers/me/hosted-surfaces/{id}/readinessPer-widget content readiness for the go-live checklistCustomers
GET/api/v1/customers/me/hosted-surfaces/{id}/recipesCustomers
POST/api/v1/customers/me/hosted-surfaces/{id}/recipesCustomers
POST/api/v1/customers/me/hosted-surfaces/{id}/recipes/{key}/runCustomers
POST/api/v1/customers/me/hosted-surfaces/{id}/unpublishCustomers
GET/api/v1/customers/me/kudo-typesList the effective kudo taxonomyCustomers
POST/api/v1/customers/me/kudo-typesCreate a custom kudo typeCustomers
DELETE/api/v1/customers/me/kudo-types/{id}Archive a kudo type (soft delete)Customers
PATCH/api/v1/customers/me/kudo-types/{id}Update a kudo typeCustomers
POST/api/v1/customers/me/kudo-types/apply-templateApply an industry preset taxonomyCustomers
POST/api/v1/customers/me/kudo-types/apply-theme-templateApply a theme-aware kudos pack (HTCH-128)Customers
PATCH/api/v1/customers/me/kudo-types/reorderPersist a new display orderCustomers
GET/api/v1/customers/me/leaderboard-configGet the tenant leaderboard view-mode configCustomers
PATCH/api/v1/customers/me/leaderboard-configUpdate the tenant leaderboard view-mode configCustomers
GET/api/v1/customers/me/leagues/configFull tier ladder, cohort/cadence config and season stateCustomers
PATCH/api/v1/customers/me/leagues/configUpdate the cohort maths, season cadence and off-season windowCustomers
POST/api/v1/customers/me/leagues/seasonsSchedule the next upcoming seasonCustomers
POST/api/v1/customers/me/leagues/seasons/{seasonId}/force-closeManually trigger the rollover for a season (audit logged)Customers
POST/api/v1/customers/me/leagues/seasons/previewProject the next three season windows (no write)Customers
PUT/api/v1/customers/me/leagues/tiersBulk-replace the tier ladder — 409 if a removed tier still has buddiesCustomers
GET/api/v1/customers/me/lotteriesList lottery definitions for the PlannerCustomers
POST/api/v1/customers/me/lotteriesCreate a lottery definitionCustomers
DELETE/api/v1/customers/me/lotteries/{id}Soft-delete a lottery (history stays queryable)Customers
PATCH/api/v1/customers/me/lotteries/{id}Update a lottery definitionCustomers
GET/api/v1/customers/me/lotteries/{id}/drawsPast draw history + analytics for a lotteryCustomers
GET/api/v1/customers/me/lotteries/{id}/preview-next-drawCurrent-period entry count + next draw time for the preview cardCustomers
POST/api/v1/customers/me/lotteries/{id}/simulate-drawSimulate a draw with the current entries — no rewards grantedCustomers
GET/api/v1/customers/me/mentor-visibility/configGet the mentor-visibility configCustomers
PATCH/api/v1/customers/me/mentor-visibility/configUpdate the mentor-visibility configCustomers
GET/api/v1/customers/me/mentor-visibility/directoryList every active mentor across the tenant’s teamsCustomers
DELETE/api/v1/customers/me/mentor-visibility/sessionsReset all mentor session logs for the workspaceCustomers
GET/api/v1/customers/me/mission-anchor-configGet the Mission Anchor admin configCustomers
PATCH/api/v1/customers/me/mission-anchor-configUpdate the Mission Anchor admin configCustomers
GET/api/v1/customers/me/narrativeGet the tenant narrative stateCustomers
PATCH/api/v1/customers/me/narrativeUpdate the tenant narrativeCustomers
GET/api/v1/customers/me/narrative/auditList narrative copy change historyCustomers
GET/api/v1/customers/me/octalysis-stateGet the tenant Octalysis aggregate stateCustomers
GET/api/v1/customers/me/onboarding/six-dGet the tenant 6D wizard stateCustomers
PATCH/api/v1/customers/me/onboarding/six-dPatch one or more 6D wizard sectionsCustomers
POST/api/v1/customers/me/onboarding/six-dApply the full 6D wizard payloadCustomers
GET/api/v1/customers/me/onboarding/six-d/auditHTCH-137 — Audit timelineCustomers
GET/api/v1/customers/me/onboarding/six-d/drift-statsHTCH-137 — Config drift statsCustomers
POST/api/v1/customers/me/onboarding/six-d/skipHTCH-137 — Expert skipCustomers
POST/api/v1/customers/me/players/{buddyId}/awardHR Award Drawer — grant a badge / skill_event / coin / kudo / forced evolution to a buddyCustomers
GET/api/v1/customers/me/players/{buddyId}/awardsRecent HR awards for a buddy (audit lens)Customers
GET/api/v1/customers/me/profile-templatesList profile-page templates (system + custom)Customers
POST/api/v1/customers/me/profile-templatesCreate a profile-page templateCustomers
DELETE/api/v1/customers/me/profile-templates/{id}Delete a profile-page templateCustomers
PATCH/api/v1/customers/me/profile-templates/{id}Update a profile-page templateCustomers
POST/api/v1/customers/me/profile-templates/apply-bulkAssign a template to many buddies in one statementCustomers
GET/api/v1/customers/me/referralGet the current workspace referral linkCustomers
PATCH/api/v1/customers/me/settingsCustomers
GET/api/v1/customers/me/showroomsList the customer’s Showroom pagesCustomers
POST/api/v1/customers/me/showroomsCreate a Showroom page from a templateCustomers
GET/api/v1/customers/me/showrooms/{id}Fetch one Showroom page (admin lens)Customers
PATCH/api/v1/customers/me/showrooms/{id}Update layout / header / visibilityCustomers
POST/api/v1/customers/me/showrooms/{id}/archiveArchive a Showroom (hidden from list, kept for audit)Customers
POST/api/v1/customers/me/showrooms/{id}/publishPublish a Showroom (status → published)Customers
POST/api/v1/customers/me/showrooms/{id}/regenerate-qrRotate the QR token, invalidating any printed codeCustomers
POST/api/v1/customers/me/showrooms/{id}/unpublishUnpublish a Showroom (status → draft)Customers
GET/api/v1/customers/me/streak-at-risk/analyticsStreak-at-risk volume + recovery analytics for the Planner drawerCustomers
GET/api/v1/customers/me/surprise-dropsList surprise-drop definitions for the PlannerCustomers
POST/api/v1/customers/me/surprise-dropsCreate a custom surprise dropCustomers
DELETE/api/v1/customers/me/surprise-drops/{id}Delete a custom surprise dropCustomers
PATCH/api/v1/customers/me/surprise-drops/{id}Update a surprise drop — global templates edit copy-on-writeCustomers
GET/api/v1/customers/me/teamsList the tenant teams with member countsCustomers
POST/api/v1/customers/me/teamsCreate a teamCustomers
DELETE/api/v1/customers/me/teams/{teamId}Soft-delete a team and archive its membershipsCustomers
PATCH/api/v1/customers/me/teams/{teamId}Update a teamCustomers
GET/api/v1/customers/me/teams/{teamId}/membersList the active members of a teamCustomers
POST/api/v1/customers/me/teams/{teamId}/membersAdd a buddy to a teamCustomers
DELETE/api/v1/customers/me/teams/{teamId}/members/{buddyId}Remove a buddy from a team (soft leave)Customers
PATCH/api/v1/customers/me/teams/{teamId}/members/{buddyId}Change a member roleCustomers
POST/api/v1/customers/me/teams/importBulk-import team memberships from a CSVCustomers
DELETE/api/v1/customers/me/users/{user_id}/dataCustomers
GET/api/v1/customers/me/users/{user_id}/summaryCustomers
GET/api/v1/customers/me/vacation/analyticsVacation usage analytics for the Planner drawer panelCustomers
POST/api/v1/customers/me/widget-theme/suggestSuggest widget theme customizationCustomers
GET/api/v1/economy/buddies/{buddyId}/ledgerGet coin ledger for a buddyEconomy
GET/api/v1/eggsList eggs with optional user and status filtersEggs
POST/api/v1/eggsCreate a new egg for a userEggs
GET/api/v1/eggs/{id}Get an egg by its IDEggs
POST/api/v1/eggs/{id}/hatchStart the asynchronous hatch process for an eggEggs
PATCH/api/v1/eggs/{id}/statusUpdate an egg status to ready or cancelledEggs
POST/api/v1/embed-tokensCreate embed tokenWidget Sessions
GET/api/v1/event-typesList event typesEvent Types
POST/api/v1/event-typesRegister an event typeEvent Types
DELETE/api/v1/event-types/{id}Delete an event typeEvent Types
GET/api/v1/event-types/{id}Get an event typeEvent Types
PUT/api/v1/event-types/{id}Update or rename an event typeEvent Types
GET/api/v1/eventsList eventsEvents
POST/api/v1/eventsIngest eventEvents
GET/api/v1/events/{id}Get eventEvents
GET/api/v1/events/active-usersList most-active users in a recent windowEvents
POST/api/v1/events/admin-triggerTrigger an event from the dashboard admin toolsEvents
POST/api/v1/events/batchIngest event batchEvents
GET/api/v1/events/typesList distinct event typesEvents
GET/api/v1/gatesList token gates for this customerGates
DELETE/api/v1/gates/{gate_key}Delete a token gateGates
PUT/api/v1/gates/{gate_key}Create or update a token gateGates
GET/api/v1/healthHealth checkHealth
GET/api/v1/health/liveLiveness checkHealth
GET/api/v1/health/readyReadiness checkHealth
GET/api/v1/health/versionBuild metadataHealth
GET/api/v1/image-usageGet image usageImage Generation
GET/api/v1/image-usage/reportGet image usage reportImage Generation
POST/api/v1/marketing/ctaRecord a public marketing CTA clickMarketing
GET/api/v1/marketplacesList marketplacesMarketplace
POST/api/v1/marketplacesCreate marketplaceMarketplace
GET/api/v1/marketplaces/{id}Get marketplaceMarketplace
PUT/api/v1/marketplaces/{id}Update marketplaceMarketplace
GET/api/v1/marketplaces/{id}/itemsList itemsMarketplace
POST/api/v1/marketplaces/{id}/itemsCreate itemMarketplace
DELETE/api/v1/marketplaces/{id}/items/{item_id}Delete itemMarketplace
GET/api/v1/marketplaces/{id}/items/{item_id}Get itemMarketplace
PUT/api/v1/marketplaces/{id}/items/{item_id}Update itemMarketplace
POST/api/v1/marketplaces/{id}/items/{item_id}/regenerate-imageQueue an AI regeneration for this item imageMarketplace
POST/api/v1/marketplaces/{id}/items/{item_id}/upload-imageUpload item imageMarketplace
POST/api/v1/marketplaces/{id}/items/importImport itemsMarketplace
POST/api/v1/marketplaces/{id}/items/reorderReorder itemsMarketplace
POST/api/v1/onboarding/sessionsCreate or resume the current onboarding sessionOnboarding
PUT/api/v1/onboarding/sessions/{id}/answersPatch structured onboarding answersOnboarding
POST/api/v1/onboarding/sessions/{id}/applyApply the generated plan to the customer (writes gamification config)Onboarding
POST/api/v1/onboarding/sessions/{id}/generate-guideGenerate a personalized integration guideOnboarding
POST/api/v1/onboarding/sessions/{id}/generate-planGenerate a gamification plan from the conversationOnboarding
POST/api/v1/onboarding/sessions/{id}/messageSend a user message and stream the assistant reply via server-sent eventsOnboarding
POST/api/v1/onboarding/sessions/{id}/regenerate-planRegenerate the plan with a variant seedOnboarding
GET/api/v1/onboarding/sessions/currentFetch the current onboarding sessionOnboarding
GET/api/v1/onboarding/sessions/preparing-statusAggregate asset-generation status for the current customerOnboarding
POST/api/v1/onboarding/sessions/resetReset the current onboarding sessionOnboarding
POST/api/v1/onboarding/sessions/seed-from-descriptionSeed onboarding from operator-provided chips + optional descriptionOnboarding
POST/api/v1/onboarding/sessions/seed-from-repoSeed onboarding from a repo-analysis brief produced by a local AI agentOnboarding
POST/api/v1/onboarding/sessions/seed-from-urlSeed onboarding from a landing-page URLOnboarding
POST/api/v1/onboarding/sessions/waitlistJoin the waitlist for an upcoming onboarding channelOnboarding
GET/api/v1/operationsList operations with optional type and status filtersOperations
GET/api/v1/operations/{id}Get an operation by its IDOperations
POST/api/v1/operations/{id}/cancelCancel a pending or processing operationOperations
GET/api/v1/p/{code}Resolve a share code to the rich Profile Page v1 payloadPublic Share
GET/api/v1/path-definitionsList path definitionsPath Definitions
POST/api/v1/path-definitionsCreate a path definitionPath Definitions
DELETE/api/v1/path-definitions/{id}Delete a path definitionPath Definitions
GET/api/v1/path-definitions/{id}Get a path definition (with steps + sub-steps)Path Definitions
PUT/api/v1/path-definitions/{id}Update a path definitionPath Definitions
POST/api/v1/path-definitions/{id}/activateActivate a path (atomic single-active per audience)Path Definitions
POST/api/v1/path-definitions/{id}/deactivateDeactivate a pathPath Definitions
GET/api/v1/path-definitions/{id}/stepsList steps in a pathPath Definitions
POST/api/v1/path-definitions/{id}/stepsCreate a step in a pathPath Definitions
DELETE/api/v1/path-definitions/{id}/steps/{stepId}Delete a stepPath Definitions
PUT/api/v1/path-definitions/{id}/steps/{stepId}Update a stepPath Definitions
GET/api/v1/path-definitions/{id}/steps/{stepId}/sub-stepsList sub-steps within a stepPath Definitions
POST/api/v1/path-definitions/{id}/steps/{stepId}/sub-stepsCreate a sub-stepPath Definitions
DELETE/api/v1/path-definitions/{id}/steps/{stepId}/sub-steps/{subStepId}Delete a sub-stepPath Definitions
PUT/api/v1/path-definitions/{id}/steps/{stepId}/sub-steps/{subStepId}Update a sub-stepPath Definitions
PUT/api/v1/path-definitions/{id}/steps/{stepId}/sub-steps/reorderReorder sub-steps within a stepPath Definitions
PUT/api/v1/path-definitions/{id}/steps/reorderReorder steps in a pathPath Definitions
GET/api/v1/path-definitions/buddies/{buddyId}/paths/{pathKey}Get path runtime payload for a buddyPath Definitions
POST/api/v1/path-definitions/buddies/{buddyId}/paths/{pathKey}/sub-steps/{subKey}/completeManually mark a sub-step complete (admin)Path Definitions
GET/api/v1/players/zeroRead Player Zero status without provisioning itWidget Sessions
POST/api/v1/players/zeroCreate or get the workspace demo player (Player Zero)Widget Sessions
GET/api/v1/presetsList presetsPresets
GET/api/v1/presets/{key}Get presetPresets
GET/api/v1/public/b/{code}Resolve a buddy share code to its public card dataPublic Share
POST/api/v1/public/b/{code}/eventsRecord a share-page funnel event (viewed / cta_clicked)Public Share
GET/api/v1/public/hall-of-fame-indexList public Hall of Fame season URLs (paged)Public Hall of Fame
GET/api/v1/public/hall-of-fame/{tenantSlug}List a tenant's finalized Hall of Fame seasonsPublic Hall of Fame
GET/api/v1/public/hall-of-fame/{tenantSlug}/{seasonId}One finalized season in the public Hall of FamePublic Hall of Fame
GET/api/v1/public/hosted-surfaces/{slug}Resolve a hosted surface slug to its public config (theme, layout, loader URL, auth requirement).Public Share
POST/api/v1/public/hosted-surfaces/{slug}/sessionExchange an access code or QR token for a short-lived widget session token.Public Share
GET/api/v1/public/returning-champion/welcome-backResolve a Returning Champion welcome-back token to a widget sessionPublic Returning Champion
GET/api/v1/public/share-indexList public share codes eligible for the sitemap (paged)Public Share
GET/api/v1/public/showroom/{slug}Resolve a Showroom slug to its public viewPublic Share
GET/api/v1/public/showroom/{slug}/qrReturn the QR payload for a Showroom (url + token). PNG rendering is client-side in v1.Public Share
GET/api/v1/skill-decay-rulesList skill decay rulesSkill Decay Rules
POST/api/v1/skill-decay-rulesCreate a skill decay ruleSkill Decay Rules
DELETE/api/v1/skill-decay-rules/{id}Delete a skill decay ruleSkill Decay Rules
PUT/api/v1/skill-decay-rules/{id}Update a skill decay ruleSkill Decay Rules
GET/api/v1/skill-decay-rules/{id}/historyRecent decay applications for a ruleSkill Decay Rules
GET/api/v1/skill-decay-rules/{id}/previewPreview the cumulative effect of a decay ruleSkill Decay Rules
POST/api/v1/skill-decay-rules/run-nowTrigger a decay sweep immediately for this customerSkill Decay Rules
GET/api/v1/skill-rulesList all skill rulesSkill Rules
POST/api/v1/skill-rulesCreate a skill ruleSkill Rules
DELETE/api/v1/skill-rules/{id}Delete a skill ruleSkill Rules
PUT/api/v1/skill-rules/{id}Update a skill ruleSkill Rules
POST/api/v1/skill-rules/apply-theme-packApply a theme-aware skill-rule pack (HTCH-128)Skill Rules
GET/api/v1/skill-setsList all skill setsSkill Sets
POST/api/v1/skill-setsCreate a skill setSkill Sets
DELETE/api/v1/skill-sets/{id}Delete a skill setSkill Sets
GET/api/v1/skill-sets/{id}Get a skill setSkill Sets
PUT/api/v1/skill-sets/{id}Update a skill setSkill Sets
POST/api/v1/skill-sets/generate-iconGenerate a skill icon with AISkill Sets
GET/api/v1/stage-assetsList per-customer stage assets (preset mode buddy art) plus the default library URLs resolved for the customer's creature_style.Stage Assets
DELETE/api/v1/stage-assets/{stage}Remove the preset asset for a stageStage Assets
PUT/api/v1/stage-assets/{stage}Commit an uploaded object as the preset asset for a stageStage Assets
POST/api/v1/stage-assets/{stage}/regenerateQueue AI generation for a customer preset stage assetStage Assets
POST/api/v1/stage-assets/upload-urlIssue a presigned PUT URL for a client-side stage asset uploadStage Assets
GET/api/v1/streak-definitionsList all streak definitionsStreak Definitions
POST/api/v1/streak-definitionsCreate a streak definitionStreak Definitions
DELETE/api/v1/streak-definitions/{id}Delete a streak definitionStreak Definitions
GET/api/v1/streak-definitions/{id}Get a streak definitionStreak Definitions
PUT/api/v1/streak-definitions/{id}Update a streak definitionStreak Definitions
GET/api/v1/token-configList token configurationsToken Config
POST/api/v1/token-configUpsert token configurationToken Config
GET/api/v1/webhook-configsList webhook configsWebhooks
POST/api/v1/webhook-configsCreate webhook configWebhooks
DELETE/api/v1/webhook-configs/{id}Delete webhook configWebhooks
GET/api/v1/webhook-configs/{id}Get webhook configWebhooks
PUT/api/v1/webhook-configs/{id}Update webhook configWebhooks
GET/api/v1/webhook-configs/{id}/deliveriesList webhook deliveriesWebhooks
POST/api/v1/webhook-configs/{id}/deliveries/{deliveryId}/redeliverRedeliver webhookWebhooks
POST/api/v1/webhook-configs/{id}/rotate-secretRotate webhook secretWebhooks
POST/api/v1/webhook-configs/{id}/testSend test webhookWebhooks
GET/api/v1/webhook-configs/eventsList webhook event typesWebhooks
GET/api/v1/webhook-configs/healthGet webhook delivery healthWebhooks
POST/api/v1/widget-sessionsCreate session tokenWidget Sessions
DELETE/api/v1/widget-sessions/{id}Revoke widget sessionWidget Sessions
GET/api/v1/widget-sessions/previewCreate automatic dashboard preview tokensWidget Sessions
POST/api/v1/widget-sessions/verify-installationVerify widget installationWidget Sessions
POST/api/v1/widget/appearance/rerenderRerender stage baseWidget API
GET/api/v1/widget/badgesGet widget badge catalogWidget API
GET/api/v1/widget/beginners-luck/resultGet the buddy's Beginner's Luck resultBeginner's Luck
GET/api/v1/widget/boosters/activeThe buddy’s currently active boostersWidget
GET/api/v1/widget/boosters/catalogBuyable boosters for this tenantWidget
POST/api/v1/widget/boosters/purchaseBuy a catalog booster — 400 insufficient_balance when too few coinsWidget
POST/api/v1/widget/brag/share-profileBuild the Brag Button "share my profile" payloadWidget
POST/api/v1/widget/brag/slack-postSend a Win-State brag to the tenant Slack/Teams webhookWidget
POST/api/v1/widget/brag/telemetryRecord one brag funnel eventWidget
POST/api/v1/widget/brag/win-stateBuild the full Brag Button Win-State payload + enabled channelsWidget
GET/api/v1/widget/buddyGet widget buddyWidget API
POST/api/v1/widget/buddy/equip-legacy-itemTemp-equip a legacy crown for the returning-champion sceneWidget
POST/api/v1/widget/buddy/hatchedRecord that the hatch ceremony completed for the widget buddyWidget API
POST/api/v1/widget/buddy/pausePut the current buddy on vacation until a dateWidget
GET/api/v1/widget/buddy/prestigeWhether the current buddy can prestige, and why not if it cannotWidget
POST/api/v1/widget/buddy/prestigePrestige the current buddy — reset to stage 0 for a prestige levelWidget
PATCH/api/v1/widget/buddy/profileUpdate the buddy public Profile Page preferencesWidget API
POST/api/v1/widget/buddy/resumeEnd the current buddy vacation earlyWidget
GET/api/v1/widget/buddy/returning-championGet the Returning Champion re-onboarding scene payloadWidget
POST/api/v1/widget/buddy/returning-champion/dismissDismiss the Returning Champion sceneWidget
PATCH/api/v1/widget/buddy/seoSet the per-buddy search-indexing preferenceWidget API
POST/api/v1/widget/buddy/shareMint (or fetch) the public share link for the widget buddyWidget API
POST/api/v1/widget/buddy/share/eventsRecord a share-sheet funnel event (opened)Widget API
GET/api/v1/widget/buddy/vacation-statusCurrent buddy vacation statusWidget
GET/api/v1/widget/causes/countersList symbolic cause counters for the current buddy / team / tenantWidget
GET/api/v1/widget/causes/surfacesHTCH-70 — cause counters grouped per opted-in surface (banner / buddy strip / profile)Widget
POST/api/v1/widget/council/proposalsSubmit a narrative proposal (Council members only)Widget
GET/api/v1/widget/council/proposals/mineThe buddy's own narrative proposals plus Council standing and quotaWidget
POST/api/v1/widget/equipEquip or unequip itemsWidget API
GET/api/v1/widget/evolutionsGet widget evolution timelineWidget API
GET/api/v1/widget/feed/team-eventsThe buddy's team feed — cursor-paginated, newest firstWidget
POST/api/v1/widget/feed/team-events/{id}/clapToggle a 👏 clap on a feed itemWidget
GET/api/v1/widget/foundationsList the tenant's active foundation selections — read-only for widget rendering.Foundations
GET/api/v1/widget/founding-cohort/statusFounding Cohort status for the current buddyWidget
POST/api/v1/widget/free-lunch/{id}/acknowledgeAcknowledge a Free Lunch bannerFree Lunch
GET/api/v1/widget/free-lunch/notificationGet the buddy's pending Free Lunch bannerFree Lunch
POST/api/v1/widget/group-quests/{id}/joinJoin a Group Quest — idempotent (already_joined on re-join)Widget
POST/api/v1/widget/group-quests/{id}/leaveLeave a Group Quest — the buddy’s prior contribution stays countedWidget
GET/api/v1/widget/group-quests/activeList the active Group Quests visible to the current buddyWidget
DELETE/api/v1/widget/hexad-survey/meDelete the buddy raw response (GDPR / consent withdrawal)Hexad survey
GET/api/v1/widget/hexad-survey/meFetch the current buddy Hexad responseHexad survey
GET/api/v1/widget/hexad-survey/questionsList Hexad survey question metadataHexad survey
POST/api/v1/widget/hexad-survey/responsesSubmit (or replace) the buddy Hexad survey responseHexad survey
POST/api/v1/widget/items/{id}/giftGift a marketplace item to a teammateWidget
POST/api/v1/widget/kudosSend a kudos to a teammateWidget
GET/api/v1/widget/kudos/givenList the buddy’s most recent sent kudos + lifetime countWidget
GET/api/v1/widget/kudos/receivedList the buddy’s most recent received kudosWidget
GET/api/v1/widget/kudos/typesList the effective kudo taxonomy for the composerWidget
GET/api/v1/widget/leaderboardGet leaderboardLeaderboard
GET/api/v1/widget/leagues/boss-fightThe season's Boss Fight challenge — progress, target, leaderboardWidget
GET/api/v1/widget/leagues/meThe buddy's live league standing — tier, cohort, countdownWidget
POST/api/v1/widget/leagues/off-season/scouting-questStart the cohort pre-season scouting quest with a predictionWidget
POST/api/v1/widget/leagues/off-season/scouting-quest/joinJoin the cohort's already-started scouting questWidget
GET/api/v1/widget/leagues/off-season/statusThe off-season window — Mystery Box boost, wardrobe drops, scouting questWidget
GET/api/v1/widget/leagues/seasons/{seasonId}/highlights/meThe buddy's personalized season-closing highlightsWidget
GET/api/v1/widget/leagues/seasons/latest/highlights/meThe buddy's latest closed season-closing highlightsWidget
GET/api/v1/widget/lottery/active-entriesThe buddy's live lottery entries with their next-draw timeWidget
GET/api/v1/widget/lottery/last-winThe buddy's most recent lottery win, if anyWidget
GET/api/v1/widget/marketplaceGet widget marketplaceWidget API
GET/api/v1/widget/marketplace/composition-statusPoll an outfit composition variantWidget API
POST/api/v1/widget/marketplace/fomoMarketplace FOMO pollWidget
POST/api/v1/widget/marketplace/items/{id}/track-viewTrack marketplace item impressionWidget API
GET/api/v1/widget/marketplace/outfitsList saved outfitsWidget API
POST/api/v1/widget/marketplace/outfitsSave a new outfitWidget API
DELETE/api/v1/widget/marketplace/outfits/{id}Delete a saved outfitWidget API
PATCH/api/v1/widget/marketplace/outfits/{id}/activateActivate a saved outfitWidget API
POST/api/v1/widget/marketplace/preview-outfitPreview an outfit compositionWidget API
POST/api/v1/widget/mentor/availabilityToggle the current buddy’s mentor availabilityWidget
POST/api/v1/widget/mentor/sessionsSelf-report a mentoring sessionWidget
GET/api/v1/widget/mentor/sessions/meList the buddy’s recent mentor sessions + hour aggregatesWidget
GET/api/v1/widget/mentor/team/{id}/mentorsList a team’s available mentors with contact deep linksWidget
GET/api/v1/widget/mission-anchorGet the Mission Anchor payloadWidget API
POST/api/v1/widget/mystery-box/claimOpen the Mystery Box — 409 with next_eligible_at when the daily cap is spentWidget
GET/api/v1/widget/mystery-box/stateMystery Box state — eligible / capped / lockedWidget
GET/api/v1/widget/narrativeGet the tenant narrativeWidget API
GET/api/v1/widget/narrative/arcGet the Program Chapters arcWidget API
GET/api/v1/widget/next-best-actionGet the single next-best-action recommendationWidget API
GET/api/v1/widget/notificationsPaginated notification feed for the current buddyWidget
POST/api/v1/widget/notifications/{id}/dismissRead + dismiss a single notification (HTCH-76)Widget
POST/api/v1/widget/notifications/{id}/readMark a single notification readWidget
POST/api/v1/widget/notifications/{id}/snoozeSnooze a notification for a number of hours (HTCH-76)Widget
POST/api/v1/widget/notifications/dismiss-allRead + dismiss every notification for the buddyWidget
GET/api/v1/widget/notifications/unread-countUnread, non-dismissed notification count (badge)Widget
GET/api/v1/widget/operations/{id}Get widget operationWidget API
GET/api/v1/widget/pathGet the active path for the buddy’s audienceWidget API
GET/api/v1/widget/path/{key}Get a specific path for a buddyWidget API
POST/api/v1/widget/path/{key}/sub-steps/{subKey}/completeManually mark a sub-step completeWidget API
GET/api/v1/widget/profile/historyVisual Grave history — faded lost streaks + reclaimable itemsWidget
POST/api/v1/widget/profile/history/items/{id}/reclaimEarn a relinquished starter-rare back — fires recovery.streak_restoredWidget
GET/api/v1/widget/profile/sunk-cost-summarySunk-Cost 'Your journey so far' summary for the current buddyWidget
POST/api/v1/widget/profile/sunk-cost-summary/acknowledgeAcknowledge the Sunk-Cost panel on first open — fires the paired White Hat celebration.milestone_acknowledged (idempotent per buddy)Widget
POST/api/v1/widget/purchasePurchase itemWidget API
POST/api/v1/widget/renderedRecord a successful widget renderWidget API
GET/api/v1/widget/social-norms/todayThe buddy's positive-framing team norms for todayWidget
GET/api/v1/widget/stateGet aggregate widget stateWidget API
GET/api/v1/widget/streak/{key}Get widget streakWidget API
POST/api/v1/widget/teams/{id}/leaveLeave a team — blocked for a sole lead until another is promotedWidget
GET/api/v1/widget/teams/meGet the current buddy’s team, role and membersWidget
GET/api/v1/widget/themeLive widget themeWidget API
GET/api/v1/widget/tokensGet the buddy’s token walletWidget API
POST/api/v1/widget/trackTrack event from browserWidget API
GET/healthzLiveness probe (top-level alias)Health
GET/readyzReadiness probe (top-level alias)Health
GET/versionBuild metadata (top-level alias)Health