Built API-first.
Integrate it your way.
Widget embed, typed JavaScript SDK, REST API, signed webhooks and Slack — everything FitSignal knows, available to your stack.
Looking for the full reference? Read the docs →
Two lines. Done before your coffee.
Drop the script tag, initialize with your public key, and identify users when they log in. The widget handles eligibility, display rules and submission — nothing else to wire up. See the feature page →
@fitsignal/sdk — typed, versioned, on npm.
init(options)Boot the SDK with your public API key. Safe to call before the user is known.
identify(user)Attach email, external ID and persona. Creates or updates the customer record.
isEligible(surveyId?)True only if the user passes eligibility and was never surveyed before.
show(surveyId?) / hide()Open or close the survey modal programmatically — or let triggers do it.
on(event, handler)Subscribe to shown, dismissed, submitted for your own analytics.
reset()Clear identity on logout so shared devices never cross streams.
Everything in the dashboard, over HTTPS.
Versioned under /api/v1, authenticated with scoped keys, paginated, with rate-limit headers on every response. Full reference at /docs/api-reference.
/v1/customersList & filter customers/v1/customers/bulkUpsert up to 100 customers per request/v1/surveys/:id/sendTrigger a send to specific customers/v1/responsesResponses with full answer data, filterable/v1/analytics/pmfCurrent score, distribution & confidence/v1/analytics/trendsScore over time, weekly or monthlySigned events, retried like we mean it.
Every delivery is HMAC-signed and retried on failure with exponential backoff — 1 min → 5 min → 30 min → 2 h → 12 h. Endpoints that keep failing are auto-disabled and you’re told. A per-event test button and full delivery log live in Settings → Webhooks.
response.receivedpmf.threshold_crossedsurvey.completedexport.readyThe signal, where your team already looks.
Paste a webhook URL in Settings → Integrations and pick your events: every response as it lands, threshold crossings worth celebrating, and a Friday digest. Webhook URLs are encrypted at rest; each notification type can be toggled independently.