Skip to main content

Quickstart

This is the fastest path to a working verification: drop a script tag in a page, then read the verdict from your own backend.

What you'll have at the end

  • A page with the Veridia widget rendered
  • A real document + selfie capture flow
  • A verificationId your server can look up
  • A verdict of approved, review, or rejected with a confidence score

About 10 minutes. Add 10 more if you want to wire up webhooks.

Three steps

  1. Installation — get your keys, embed the widget on a page
  2. First verification — run a test verification end-to-end
  3. Handling results — read the verdict via polling or webhooks

What you'll need

  • A Veridia account (sign up here)
  • Two API keys from the dashboard's API keys section — a publishable one and a secret one. See below.
  • A page where you can drop a couple of script tags (any framework, or plain HTML)
  • A real device with a camera for testing

You need two keys, not one

This trips up nearly every first integration, so it comes before anything else.

Key familyPrefix (test / live)Where it runsWhat it can do
Publishableqv_pubt_ / qv_pub_Browser, mobile appStart a verification (/v1/verify/init) and submit it (/v1/verify/submit)
Secretqv_sect_ / qv_sec_Your server onlyEverything above, plus reading verdicts (GET /v1/verify/{id})

The publishable key goes in your HTML. It is meant to be visible — the widget can't work otherwise.

The secret key never leaves your server. GET /v1/verify/{id} rejects a publishable key with HTTP 401 and the error code secret_key_required, on purpose: a publishable key sits in your page source, so accepting it there would publish every one of your customers' KYC verdicts to anyone who opens developer tools.

The test prefixes are qv_pubt_ and qv_sect_

Not qv_pub_test_. The t is inserted into the prefix itself, before the underscore. If you are working in test mode, both of your keys carry that t — a qv_sec_ key does not exist in your test environment and will come back as invalid_api_key.

Use the test pair while you're integrating; switch both keys to the live pair when you ship.

Already integrated something similar?

If you've integrated Stripe Elements, Sumsub, or Onfido before, the mental model is the same:

ConceptStripe / Sumsub equivalentVeridia
Publishable keypk_test_*qv_pubt_*
Secret keysk_test_*qv_sect_*
Frontend widgetStripe Elements / Sumsub WebSDK<veridia-widget>
Server confirmationWebhook + signatureWebhook + HMAC-SHA256
Poll statusGET /v1/payment_intents/:idGET /v1/verify/:id

The main difference: Veridia's browser side is a single HTML tag — no SDK install or framework wrapper required.

Ready? Step 1 →