Migrating from Persona
If you’re integrating Verifa and coming from Persona, this page maps the Persona concepts you already know to the Verifa equivalents. The two platforms are structurally similar enough that most migrations are a string swap rather than a refactor.
TL;DR
- Persona’s Inquiry → Verifa’s Session
- Persona’s Template → Verifa’s Workflow
Persona.Client({...})→Verifa.Client({...})(same constructor shape, same callbacks)- Webhook event names + HMAC scheme are functionally equivalent
- Verifa is per-session billed, no per-check or per-report multiplication
You can keep your existing backend session-create / webhook handler architecture; only the JS snippet and a handful of API field names change.
Concept mapping
JS widget migration
Before — Persona
After — Verifa
Differences:
- Verifa’s recommended path is
captureUrl(server-created), matching Persona’s production mode withinquiryId. Persona’stemplateId-only quickstart maps to Verifa’spublishableKey+templateId(also supported — see JavaScript SDK → Quickstart). onReadyis optional. The SDK opens automatically on.open(); you don’t need anonReady → open()pattern like Persona’s.onCompletepayload is{ sessionId, status }. Field-level results live server-side (fetch viaGET /api/v1/sessions/:id); they’re never delivered to the browser, matching Persona’s “no PII in the browser” stance.onErrorreceives{ code, message }with string codes you can switch on. See the error reference.
Backend migration
Creating a Session (Persona’s POST /api/v1/inquiries)
Persona:
Verifa:
Response shape differs slightly — Persona returns JSON:API style with
data.id and data.attributes.fields-as-array. Verifa returns flat JSON
with id, capture_url, status, etc.
Fetching results
Persona:
Verifa:
Both return the structured result plus all the per-check fields. The Verifa response is flatter (no JSON:API envelope).
Webhooks
Both platforms sign with HMAC-SHA256. Verifa’s verification snippet:
Event-name mapping:
Full Verifa event list in the Webhooks Guide.
Pricing model
Persona bills per report. A single Inquiry that runs document verification
- database checks + selfie + government ID + watchlist screening can produce 4-5 line items, each billed separately. Reattempts re-charge.
Verifa bills per session. The same multi-check session is one charge; reattempts within a session don’t re-bill. AML screening + 12 months of monitoring is a separate annual line item.
If you’re migrating from Persona for cost reasons, expect ~30-50% lower all-in cost on equivalent volume, plus removal of the “per-check budget forecast” mental overhead.
Differences worth knowing
- No JSON:API envelope. Verifa’s responses are plain
{ id, ... }objects. If you have JSON:API parsing helpers, drop them. - Webhooks have idempotent delivery via event IDs. Persona doesn’t publish a stable retry-once contract; Verifa does (see Idempotency).
- No Persona-Connect equivalent yet (reusable cross-org identity). On the roadmap.
- Native mobile SDKs. Persona has iOS + Android SDK; Verifa has a React Native SDK shipping now, iOS/Android coming. If your integration is mobile-first, talk to us about timing.
- Field names are snake_case by default, with opt-in
camelCasevia theVerifa-Key-Inflectionheader. Persona useskebab-case. The shift is mostly cosmetic but check your JSON parsers. - No template-versioning UI yet. Workflow edits are immediate on the
workflow; for staged rollout, clone the workflow + flip your
workflow_idin code.
Help
If you hit something during migration that this page doesn’t cover, email support@withverifa.com with your Persona inquiry template and a description of what you’re trying to reproduce. We’ve done enough Persona migrations to have most edge cases mapped.
Related
- JavaScript SDK — Full Verifa.Client reference
- Webhooks Guide — Event payloads + HMAC verification
- Choosing an Integration Method — Compare integration options
- Authentication — Key types and scopes