Skip to main content
The package has a small surface — one singleton (MicroSurvey), one React provider (<InsitoProvider>), one hook (useInsito), and one navigation helper (useInsitoScreenTracking), plus theme/label helpers.

Imports

MicroSurvey

The named-export singleton (import { MicroSurvey }). Holds the SDK state machine and the imperative methods you call from your app.

MicroSurvey.init(config)

Boots the SDK. Call once, as early as possible (module top-level is fine). Subsequent calls are silently ignored; a console warning is emitted only when debug: true was set on the first successful init().
config.apiKey
string
required
Project API key. Format: proj_xxx. Throws synchronously if malformed.
config.apiUrl
string
default:"https://api.insito.app"
Override the API base URL — useful for staging environments or self-hosted instances. Default points to production.
config.requestTimeoutMs
number
default:"5000"
Per-request timeout in milliseconds. Lowering this on flaky networks will route more responses through the offline queue.
config.debug
boolean
default:"false"
Toggles internal console.log output. Recommended: debug: __DEV__.
config.environment
string
Optional environment tag (e.g. "production", "staging") sent as device metadata and usable in audience filters.
config.theme
object
{ preset?: 'light' | 'dark' | 'minimal' | 'rounded', overrides?: Partial<InsitoTheme> }. See Theming.
config.labels
Partial<SdkLabels>
In-code overrides for the built-in UI strings. See Labels.
config.events
InsitoVariableDeclaration[]
Event keys to pre-declare into the registry on the next identify().
config.screens
InsitoVariableDeclaration[]
Screen names to pre-declare into the registry on the next identify().

MicroSurvey.identify(args)

Associates subsequent triggers with a stable user. Cached for 24 hours per userId so repeat calls don’t hit the network.
args.userId
string
required
Stable, unique identifier for your user. Most teams pass their database user ID. Do NOT pass an email or anything PII unless you’ve configured PII handling on your account.
args.platform
string
e.g. "ios", "android", "web". Used by analytics for platform breakdowns.
args.appVersion
string
Your app’s build version, e.g. "2.7.0". Surfaces in the dashboard so you can correlate feedback with releases.
args.metadata
Record<string, unknown>
Free-form device-level key/value pairs. Merged on top of the SDK’s auto-captured device metadata — your keys win on a collision.
args.properties
Record<string, string | number | boolean>
Custom, business-level user properties (e.g. plan: "premium", transactionsThisMonth: 14, hasLinkedCard: true). Stored on the respondent and discovered into the dashboard User Properties registry, where they become type-aware audience filters. Only string / number / boolean values are kept. Call identify() again whenever a value changes — the API always uses the most recent value.
Even with no metadata or properties, every identify() auto-captures device + lifecycle metadata (locale, timezone, osVersion, sessionCount, daysSinceInstall). See Configure.

MicroSurvey.trigger(eventName)

Fires a trigger by name. The server decides whether to show a survey. trigger() is async (Promise<void>) and sets the state to loading while the request is in flight; the modal appears once the server responds. Fire it fire-and-forget with void.
eventName
string
required
Event name configured against a survey in the dashboard (e.g. "checkout_completed"). Allowed characters are A–Z a–z 0–9 _; keys are case-sensitive. See Triggers.
Guards:
  • Not initialised → no-op + debug warning.
  • No identify() call yet → no-op + debug warning.
  • A survey is already active → no-op + debug log.

MicroSurvey.submitResponse(surveyId, answers, options?)

Used internally by the built-in modal. You’d only call this directly if you’re rendering your own question UI.
surveyId
string
required
The active survey’s ID — usually MicroSurvey.activeSurvey?.surveyId.
answers
Answer[]
required
Array of { questionId, type, value }. See Answer type below.
options
SubmitResponseOptions
{ keepModalOpen?: boolean; responseId?: string }. Pass responseId to complete an existing partial response.
Returns Promise<SubmitResponseResult>:

MicroSurvey.evaluate(reason?, options?)

Runs the auto-evaluated trigger check (app open, session start, screen visit). The SDK calls this automatically on identify and screen visits; call it directly only for custom lifecycle hooks. Returns Promise<void>.

MicroSurvey.savePartialProgress(surveyId, answers, existingResponseId?)

Persists in-progress answers for autosave-enabled surveys. Used internally by the modal as the user advances; returns the partial response id.

MicroSurvey.dismissSurvey()

Closes the active modal without submitting. Emits survey_dismissed. Used by the close button in the built-in UI.

MicroSurvey.on(event, listener) / MicroSurvey.off(event, listener)

Subscribe to lifecycle events. on() returns an unsubscribe function.
See Lifecycle events for the full event matrix.

MicroSurvey.onNavigationStateChange(state)

Bridges React Navigation v6/v7 state into the screen-map system. Subscribe in your NavigationContainer.onStateChange:
Expo Router users should use useInsitoScreenTracking() instead.

Read-only state

MicroSurvey.config returns only the runtime API settings (apiKey, apiUrl, requestTimeoutMs, debug, environment) — not the theme, labels, events, or screens you passed to init().

React layer

<InsitoProvider>

Renders the survey bottom sheet. Wrap your app inside one (under a GestureHandlerRootView). Children render normally; the survey sheet mounts on top via @gorhom/bottom-sheet.
Optional appearance prop drives the light/dark scheme for themeMode: "auto" surveys. Defaults to "system" (follow the device); pass "light" / "dark" to mirror your app’s own theme. See Theming.

useInsito()

Hook that returns reactive state: { activeSurvey, dismissSurvey, theme, sdkState, labels }. Re-renders when any of them change. Throws if called outside <InsitoProvider>.

useInsitoScreenTracking()

Auto-tracks screen visits for Expo Router apps. Call it in your root layout — no arguments needed.
See Screen tracking for the React Navigation alternative and the data model.

Theme helpers

resolveTheme(preset, overrides?)

Builds an InsitoTheme from a preset name ('light' | 'dark' | 'minimal' | 'rounded') plus optional overrides. Useful if you want to preview a theme outside the SDK.

themePresets

The raw preset map: { light, dark, minimal, rounded }. Each entry is a complete InsitoTheme. Use this if you want to start from a preset and tweak it deeply.

Types

Answer

  • nps: value is a number 0–10.
  • rating: value is a number 1–5.
  • multiple_choice: value is a string (single-select) or string[] (multi-select).
  • open_text: value is a string.

SdkState

State machine:
  • idle → user can fire trigger().
  • loading → trigger in flight to the server.
  • survey_active → modal is on screen.
  • completed → response submitted, modal closed (transient).

InsitoEventName

See Lifecycle events for the payload of each.