What you will build
- Create a company verification from your server
- Store the public company verification ID
- Send the representative to the hosted link
- Handle progress and decision webhooks
- Reconcile the result in your own system
Step 1: Create the company verification
data.verificationIdas the public company verification IDdata.link- your own
vendorData
Step 2: Send the representative to the hosted flow
Usedata.link exactly as returned.
For company verifications, the hosted URL contains:
processIdfor the internal company verification IDhostedTokenfor secure access to the hosted flow
Step 3: Listen for company webhooks
Progress events:company_verification.submittedcompany_verification.liveness_completedcompany_verification.under_review
company_verification.successfulcompany_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
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
Minimal Node.js handler example
Recommended stored fields
For each company verification, store:- public
verificationIdfrom the create response - internal
companyVerificationIdwhen it first arrives by webhook externalIdvendorData- current status
- latest webhook event
- raw webhook payload
- environment used