Skip to main content
Company verifications can be followed through public fetch endpoints, dashboard review, and webhooks. The webhooks are still the most useful option when you want downstream systems to react automatically. This page explains the statuses and events you should expect.

How a company verification moves through the flow

The typical lifecycle looks like this:
  1. You create a company verification with POST /v1/company-verifications
  2. The representative opens the hosted link
  3. The representative uploads documents, reviews extracted data, and submits the flow
  4. Helium ID reviews the submission
  5. Helium ID issues a final outcome

Company verification statuses

The company verification flow currently uses these statuses: In practice:
  • submitted means the representative finished their part
  • under review means a reviewer is now handling the case
  • successful and failed are the conclusive outcomes you should treat as final

Company verification webhook events

Company verification uses dedicated webhook event names so they can be handled separately from individual verification events.

Events webhook

The following events are sent to the API key’s events webhook URL:
  • company_verification.submitted
  • company_verification.liveness_completed
  • company_verification.under_review
These are progress events. They tell you that work is moving forward, but they are not final outcomes.

Decision webhook

The following events are sent to the API key’s decision webhook URL:
  • company_verification.successful
  • company_verification.failed
These are the terminal outcome events.

Payload shape

Company-verification webhook payloads are sent in the standard Helium ID wrapper:
The important change is that company-verification events include a normalized companyProfile block and a review block. That shape is designed to help downstream systems, including bank-account or business-customer providers, consume the important company details in a stable shape. The example above uses company_verification.submitted, but company_verification.successful uses the same normalized payload shape as well. In practice, the event, status, and review/readiness values change to reflect the successful outcome, while the top-level structure and the normalized companyProfile and review blocks remain the same. Those fields may come from:
  • data entered directly in the hosted flow
  • document extraction and normalization
  • future internal review enrichment
The review block helps you interpret how ready the payload currently is, especially when some nested fields still depend on review or follow-up evidence.

Live vs test company verifications

There is an important difference between live and test company verifications:
  • Live company verifications: Helium ID controls terminal decisions.
  • Test company verifications: customer admins can move the verification through review states in the dashboard to test integrations and webhook handling.
If your integration is listening for company webhooks, treat live and test traffic the same way on your side, but make sure your business logic knows whether the source API key is live or test.

What to store on your side

For reliable correlation, store at least:
  • your own internal business or application ID in vendorData
  • the returned verificationId from the create response
  • the webhook data.companyProfile if you plan to provision downstream business accounts
  • the webhook event
  • the webhook data.status
That gives you enough information to match each update to the correct company verification in your system.