Skip to main content
This recipe shows the recommended company-verification integration pattern.

What you will build

  1. Create a company verification from your server
  2. Store the public company verification ID
  3. Send the representative to the hosted link
  4. Handle progress and decision webhooks
  5. Reconcile the result in your own system

Step 1: Create the company verification

Store:
  • data.verificationId as the public company verification ID
  • data.link
  • your own vendorData

Step 2: Send the representative to the hosted flow

Use data.link exactly as returned. For company verifications, the hosted URL contains:
  • processId for the internal company verification ID
  • hostedToken for secure access to the hosted flow
Do not rebuild this URL manually.

Step 3: Listen for company webhooks

Progress events:
  • company_verification.submitted
  • company_verification.liveness_completed
  • company_verification.under_review
Decision events:
  • company_verification.successful
  • company_verification.failed

Step 4: Reconcile IDs correctly

Company verification uses both a public and internal ID.
  • create-response verificationId = public company verification ID
  • webhook companyVerificationId = internal company verification ID
  • webhook externalId = public company verification ID
For most customer-facing systems, externalId is the most useful long-term reference.

Step 5: Apply review logic

Recommended logic:
  • when you receive company_verification.submitted, mark the case as awaiting review
  • when you receive company_verification.under_review, mark the case as in review
  • when you receive company_verification.successful, mark the business as approved
  • when you receive company_verification.failed, mark the business as rejected and store the reason

Environment behavior

  • in test, customer admins can move company verifications through review and terminal states for integration testing
  • in live, Helium ID controls final terminal decisions
See Test vs Live Behavior.

Minimal Node.js handler example

For each company verification, store:
  • public verificationId from the create response
  • internal companyVerificationId when it first arrives by webhook
  • externalId
  • vendorData
  • current status
  • latest webhook event
  • raw webhook payload
  • environment used
That makes it much easier to tie together the API response, dashboard workflow, and webhook stream.