Before you startYou need:
- A FlowPilot workspace.
- An app inside that workspace.
- An SDK API key for that app.
- The SDK installed in your Expo app, with its peer dependencies and the Reanimated Babel plugin.
- A placement key (for example
onboarding) with a published flow attached.
Steps
1
Configure at launch
Call
FlowPilot.configure(...) once, as early as possible, with your API key and App ID. See Configuration for every option.2
Resolve and render a placement
On the Expo SDK you present a flow declaratively: resolve a
FlowSession, then render it with <FlowPilotPresenter />. Use resolveSession, which returns null (instead of throwing) when there is no presentable flow, so your app can fall back to its own UI.3
Read the result
The presenter’s See Results and outcomes for the full shape.
onComplete hands you a FlowPresentationResult with an outcome of 'completed', 'dismissed', or 'error'. Switch on it to decide what to do next.Common mistakes
- Using a dashboard token instead of an SDK API key. The SDK authenticates with an SDK key that starts with
fp_. Your dashboard login will not work. Create an SDK key in app settings. - App ID mismatch. The
appIdyou configure must own the placement, or the resolve returns no flow. - Placement key typo, paused placement, or no flow attached. The key in code must match the placement key exactly, the placement must be active, and a published flow must be attached.
- Forgetting to publish. A draft flow is never served. Publish a version and attach it to the placement.
- Resolving before
configure.resolveSession/createSessionbeforeconfigure(...)throwsSDK_NOT_INITIALIZED. Configure first.
Troubleshooting
Nothing appears? Walk this checklist:- Is the API key an SDK key (it starts with
fp_) and valid for the environment you configured? - Is the App ID the one that owns the placement?
- Is the placement active (not paused) and targeting your platform?
- Is a published flow version attached to the placement?
- Is the placement key in your code an exact match?
- Is the device online? If it may be offline, configure caching or a bundled fallback.
logLevel: 'debug' in configure to see each resolve and why a flow was rejected. Still stuck? See Troubleshooting.