> ## Documentation Index
> Fetch the complete documentation index at: https://veriqa.app/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# A website form with a verified contact

> Recipe: a visitor confirms a form submission in a messenger, and the lead carries a verified contact. No CMS plugin does this — you need a server-side handler.

Your site has a lead or feedback form. You want visitors to confirm the submission in a messenger so
that each lead carries a verified contact rather than a mistyped address or a bot.

<Warning>
  **A CMS plugin cannot do this.** OIDC plugins handle sign-in to an account, while forms such as
  Contact Form 7 or WPForms are not tied to an account at all. You need a small server-side handler
  next to the form, and on a SaaS builder you also need hosting for it.
</Warning>

## What you need

* a Veriqa server with a channel enabled;
* hosting where you can run a server-side handler, for example in PHP;
* access to the page with the form.

## Steps

<Steps>
  <Step title="Decide whether you need a sign-in">
    A confirmed submission without a sign-in and a sign-in with channel linking are different
    solutions; they are compared in
    [Two ways](/docs/scenarios/lead-capture#two-ways-and-they-are-different-solutions).
  </Step>

  <Step title="Deploy the server and enable a channel">
    Follow the [self-hosted quickstart](/docs/quickstart/self-hosted) and [Channel setup](/docs/guides/channels).
  </Step>

  <Step title="Declare a client for the handler">
    The client's `redirect_uri` is a regular page of your site where the visitor returns —
    [step 4 of the self-hosted quickstart](/docs/quickstart/self-hosted#4-declare-your-client).
  </Step>

  <Step title="Put the handler next to the form">
    A button under the form starts the sign-in, and the handler exchanges the code for tokens and
    checks them — [The flow](/docs/integrations/confirmed-form#the-flow).
  </Step>

  <Step title="Store the confirmation with the lead">
    Save `sub` and `channel_type` next to the lead; the bot flag lets you drop a lead before it is
    stored — [What the site gets](/docs/scenarios/lead-capture#what-the-site-gets).
  </Step>
</Steps>

## How to check

Fill in the form, press the button under it and confirm the submission in the messenger. The lead
should be stored with `sub` and `channel_type`, and no session should open on the site.

## Next steps

* [Your own buttons on your own page](/docs/integrations/confirmed-form#your-own-buttons-on-your-own-page) —
  a button for a specific messenger under the form;
* [Sign-in and channel linking](/docs/scenarios/channel-linking) — if your site has user accounts;
* [Leads and feedback without CAPTCHA](/docs/scenarios/lead-capture) — what the use case gives you as a
  whole.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.