Skip to content

Changing a verification flow without shipping an app release

Mount the SDK with a workflow ID and the flow's configuration is fetched from the server on each verification. Re-publishing changes the steps, checks, copy and decision rules for the next verification, with no app release.

Charles Archibong

, Co-founder

· 5 min read

Headline "Change flows without a release" beside an illustration of a continuous circular arrow, on a vivid purple gradient.

Key takeaways

  • With a workflow ID, the SDK fetches the published configuration, so a re-publish changes the flow with no redeploy.
  • The workflow's settings win over overlapping props; per-user data and callbacks always stay in code.
  • New SDK capabilities, native permissions and callback logic still need a release.
  • Each verification records the workflow ID and version that ran, so every change stays attributable.

Mount the verification SDK with a workflow ID instead of spelling the flow out in code, and the flow's configuration comes from the server each time a verification starts. When you re-publish the workflow in the dashboard, the next verification in every installed copy of your app runs the new version. No build, no store review, no forced update.

That is what makes it practical to tighten a face-match threshold on a Tuesday afternoon, or add a proof-of-address step for one market, without a mobile release cycle. It does not remove releases entirely, and knowing the boundary is what keeps the approach safe.

How the SDK gets its configuration

A prop-configured mount carries the flow in your code: country, ID types, which steps run, branding, copy. Changing any of it means changing code, and on mobile that means an app-store round trip followed by weeks of users on old versions.

A workflow mount carries one identifier. The SDK sends it to the server when it mounts:

GET /api/kyc/workflows/:workflowId
Authorization: Bearer pk_…

The response contains the published configuration, the ID types enabled for your organisation and the branding, and the SDK builds the flow from that. According to the workflows documentation, the workflow must belong to the API key's organisation and environment and be published; anything else returns an indistinguishable 404 workflow_not_found, and the SDK reports it through onError rather than silently running a different flow.

In a React Native app, the whole integration is:

import { MyazaKYC } from "@myazahq/kyc-sdk-react-native";

<MyazaKYC
  apiKey="pk_live_…"
  workflowId="wf_AbC123dEf456"
  userId="user_42"
  userData={{ firstName: "Jane", lastName: "Doe" }}
  metadata={{ requestId: "order_1001" }}
  onSubmit={(submission) => console.log(submission.verificationId)}
  onError={(err) => console.error(err.code, err.message)}
>
  Verify Identity
</MyazaKYC>

The workflow's settings win over any overlapping props. If you pass a country and the workflow sets one, the workflow's value is used.

What you can change by re-publishing

Everything that describes the flow rather than the person:

  • Countries, ID types and the validation rules for each ID.

  • Capture steps and add-ons: contact codes, proof of address, the NFC chip step, questionnaires, address capture, multiple IDs in one run.

  • The liveness method (gestures, the screen-flash sequence, or both).

  • Branding, consent copy and success copy.

  • Policies such as age limits and how identity details that do not match are treated.

  • The decision graph: which results approve, which go to review, which decline.

A hypothetical example of the kind of change this makes routine: a lender sees a run of selfie mismatches caused by poor lighting and wants them in review rather than declined. They add a rule in the builder, check it in sandbox and re-publish. Every app version in the field applies the new rule from the next verification.

What still needs a release

Five things live in your code or your binary, and no amount of re-publishing moves them.

Per-user data. userId, userData and metadata are runtime values. A workflow is a template shared by everyone who runs it, so it cannot carry them.

Callbacks and what your app does with results. How you handle onSubmit, onError and the webhook on your backend is your code.

SDK versions. A workflow can only use capabilities the installed SDK understands. The documented minimums for workflowId are 2.2.0 for the web SDK, 2.1.0 for React Native and 2.2.0 for Flutter. Earlier web and React Native versions ignore the ID and run on props alone, which is the first thing to check if a workflow embed seems to do nothing.

Native capabilities and permissions. Reading a passport chip needs the React Native or Flutter SDK; a browser cannot do it. Address capture on iOS needs the location usage strings in your app, or the permission request crashes. If you plan to switch on a step that needs a native permission, ship the permission first.

The workflow ID itself. Workflows are scoped to one environment, so your sandbox and production workflows are different workflows. Keep the ID in configuration rather than hard-coded, so moving to a new workflow is a config change, not a code change.

Why changing live flows stays safe

Changing what every user sees from a dashboard sounds risky. Four properties of how workflows are versioned make it manageable.

Drafts are separate from what is live. Editing a published workflow only changes its draft. Integrations keep reading the last published snapshot until you publish again.

Every publish is versioned. Each publish bumps the version and appends an immutable history entry you can inspect or restore from. If a change goes wrong, you are restoring a known version, not reconstructing one.

Work in flight is not moved. A per-applicant session link carries the published configuration frozen when it was minted, so a re-publish never changes a link already in someone's inbox. A decision run is pinned to the version it started with, so a stricter graph does not re-decide an application that is part-way through.

Every result is attributable. Each verification records the workflow ID and the version that ran, and both appear on verification webhooks as workflowId and workflowVersion. Store the pair. Six months from now, when someone asks why an applicant was approved under looser rules, the version tells you exactly which rules applied.

One deliberate limit: a workflow's scope, what it verifies (for example an address-only or a face re-authentication flow), is editable until the first publish and then locked, because verifications and links already depend on what that ID means. To change scope, create a scoped copy, which starts as a new draft under a new workflow ID.

Rolling out a change

A workflow change reaches every user on their next verification, which is powerful and also means there is no gradual rollout by app version. Treat a publish like a deployment:

  1. Make the change in the sandbox workflow and exercise every affected path with published test IDs.

  2. Check that each branch of the decision graph ends on a status, and that any new step's native permissions are already in your shipped app.

  3. Apply the same change to the production workflow and publish.

  4. Watch the first results by workflowVersion: approval, review and decline rates, and review queue volume.

  5. If something is wrong, restore the previous version from the history and publish it.

  6. Tell your support team what changed; users will notice a new step before your dashboards do.

The rule of thumb

If it describes the flow, put it in the workflow and change it by publishing. If it describes the person, the device or what your app does with a result, it belongs in code and changes with a release. Build the integration once around a workflowId, keep your SDK reasonably current, and most of what used to be a release becomes a publish.

Sources

Charles Archibong

About the author

Charles Archibong

Co-founder

Charles Archibong co-founded Myaza Trust. He writes about identity verification, financial technology, and the practical work of building trusted digital services.

  • Headline "How decision graphs decide" beside an illustration of a decision graph splitting into approve and decline, on a vivid purple gradient.

    Product Updates

    How decision graphs turn checks into approve, review or decline

    When a verification finishes, the workflow's decision graph gathers the results, walks branches over a closed set of fields, and lands on approve, review or decline. The outcome sets the customer's disposition without rewriting what the checks found.

  • Headline "Where verification flows lose people" beside an illustration of a path of connected steps, on a soft lavender gradient.

    Identity Verification

    Where verification flows lose people, and how to fix each step

    People abandon verification at predictable moments: an unexplained start, the camera permission prompt, document capture, the desktop that has no camera, and being asked to redo everything after one failure. Measure abandonment per step, then fix the step, not the whole flow.

Build your product.We'll handle the rest.

Identity and compliance, end to end, built to global standards, priced for founders.

Change a verification flow without an app release · Myaza Trust