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

# How it works

> How the one-time password gate works, and why it holds up.

<a className="vy-next" href="/setup"><span className="vy-next-step">2 of 6</span><span className="vy-next-label">Next: Alchemer setup</span><span className="vy-next-arrow"><Icon icon="arrow-right" iconType="light" size={14} /></span></a>

One idea holds the whole thing up: **every password is tied to one unique human and works exactly once.**

<div>
  <div className="vy-car-wrap vy-car-narrow mt-8">
    <div className="vy-st-row">
      <button id="st1" className="vy-st vy-on" onClick={() => { for (const el of document.querySelectorAll('.vy-car-slide')) el.setAttribute('data-pos', String((parseInt(el.id.slice(2), 10) - 1 + 3) % 3)); for (const el of document.querySelectorAll('.vy-st')) el.classList.remove('vy-on'); document.getElementById('st1').classList.add('vy-on'); }}><span className="vy-num">1</span><span className="vy-st-label">A passcode per human</span></button>
      <button id="st2" className="vy-st" onClick={() => { for (const el of document.querySelectorAll('.vy-car-slide')) el.setAttribute('data-pos', String((parseInt(el.id.slice(2), 10) - 2 + 3) % 3)); for (const el of document.querySelectorAll('.vy-st')) el.classList.remove('vy-on'); document.getElementById('st2').classList.add('vy-on'); }}><span className="vy-num">2</span><span className="vy-st-label">Fakes locked out</span></button>
      <button id="st3" className="vy-st" onClick={() => { for (const el of document.querySelectorAll('.vy-car-slide')) el.setAttribute('data-pos', String((parseInt(el.id.slice(2), 10) - 3 + 3) % 3)); for (const el of document.querySelectorAll('.vy-st')) el.classList.remove('vy-on'); document.getElementById('st3').classList.add('vy-on'); }}><span className="vy-num">3</span><span className="vy-st-label">Pay only for real</span></button>
    </div>

    <div className="vy-car">
      <div className="vy-car-glow" />

      <div id="sl1" className="vy-car-slide" data-pos="0">
        <span className="vy-num vy-car-num">1</span>
        <p className="vy-sp-text text-gray-900 dark:text-zinc-50">Each verified respondent receives a one-time passcode, created for their face alone and dropped onto their link. It fills itself in at your study's gate.</p>

        <div className="vy-viz">
          <div className="vy-viz-head"><span className="vy-viz-headico"><Icon icon="lock" iconType="light" size={13} /></span>One-time passcode</div>
          <div className="vy-viz-field"><span className="vy-viz-code">vyp\_k2•••••••4qt</span><span className="vy-viz-check"><Icon icon="circle-check" iconType="light" size={16} /></span></div>
          <div className="vy-viz-sub">Filled in from their link. Used once, then dead.</div>
        </div>
      </div>

      <div id="sl2" className="vy-car-slide" data-pos="1">
        <span className="vy-num vy-car-num">2</span>
        <p className="vy-sp-text text-gray-900 dark:text-zinc-50">Bots and returning humans get locked out. A duplicate face never earns a second passcode, and a spent passcode is dead forever.</p>

        <div className="vy-viz">
          <div className="vy-viz-lane">
            <span className="vy-viz-ico">
              <Icon icon="user" iconType="light" size={17} />
            </span>

            <svg className="vy-viz-arrow" viewBox="0 0 64 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
              <path d="M2 8 h52" stroke="currentColor" strokeWidth="1.5" />

              <path d="M48 3 L56 8 L48 13" stroke="currentColor" strokeWidth="1.5" strokeLinecap="round" strokeLinejoin="round" />
            </svg>

            <span className="vy-viz-out vy-viz-pass"><span className="vy-viz-outico"><Icon icon="check" iconType="light" size={13} /></span>Into the study</span>
          </div>

          <div className="vy-viz-lane">
            <span className="vy-viz-ico">
              <Icon icon="robot" iconType="light" size={17} />
            </span>

            <svg className="vy-viz-arrow" viewBox="0 0 64 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
              <path d="M2 8 h38" stroke="currentColor" strokeWidth="1.5" />

              <path d="M46 2 v12" stroke="currentColor" strokeWidth="2" strokeLinecap="round" />
            </svg>

            <span className="vy-viz-out vy-viz-fail"><span className="vy-viz-outico"><Icon icon="xmark" iconType="light" size={13} /></span>Blocked</span>
          </div>

          <div className="vy-viz-lane">
            <span className="vy-viz-ico">
              <Icon icon="user-group" iconType="light" size={17} />
            </span>

            <svg className="vy-viz-arrow" viewBox="0 0 64 16" fill="none" xmlns="http://www.w3.org/2000/svg" aria-hidden="true">
              <path d="M2 8 h38" stroke="currentColor" strokeWidth="1.5" />

              <path d="M46 2 v12" stroke="currentColor" strokeWidth="2" strokeLinecap="round" />
            </svg>

            <span className="vy-viz-out vy-viz-fail"><span className="vy-viz-outico"><Icon icon="xmark" iconType="light" size={13} /></span>Same face, second try</span>
          </div>
        </div>
      </div>

      <div id="sl3" className="vy-car-slide" data-pos="2">
        <span className="vy-num vy-car-num">3</span>
        <p className="vy-sp-text text-gray-900 dark:text-zinc-50">You only pay for real, first-time respondents. Blocked traffic never enters your data and never gets paid.</p>

        <div className="vy-viz">
          <div className="vy-viz-row"><span className="vy-viz-id">rsp\_78421</span><span className="vy-viz-tag">Verified</span><span className="vy-viz-pill vy-viz-hi">92%</span></div>
          <div className="vy-viz-row"><span className="vy-viz-id">rsp\_78422</span><span className="vy-viz-tag">Blocked</span><span className="vy-viz-pill vy-viz-no"><Icon icon="xmark" iconType="light" size={11} /></span></div>
          <div className="vy-viz-row"><span className="vy-viz-id">rsp\_78424</span><span className="vy-viz-tag">Verified</span><span className="vy-viz-pill vy-viz-mid">61%</span></div>
        </div>
      </div>

      <div className="vy-car-prog">
        <span id="vyprog" />
      </div>
    </div>

    <div className="vy-car-nav">
      <img src="https://mintcdn.com/verify-you-alchemer-flow/zUTLQSis4SUVT9n_/logo/light.svg?fit=max&auto=format&n=zUTLQSis4SUVT9n_&q=85&s=964934c18a54d8e5f32eab1205746b17" alt="" style={{ display: 'none' }} onLoad={() => { if (window.__vyAuto) return; window.__vyAuto = true; if (window.matchMedia('(prefers-reduced-motion: reduce)').matches) return; let prog = 0; let paused = false; document.addEventListener('pointerover', (e) => { const inCar = e.target && e.target.closest && e.target.closest('.vy-car'); if (inCar && !paused) { paused = true; const b = document.getElementById('vyprog'); if (b) b.style.opacity = '0.35'; } else if (!inCar && paused) { paused = false; const b = document.getElementById('vyprog'); if (b) b.style.opacity = '1'; } }); document.addEventListener('click', (e) => { if (e.target && e.target.closest && e.target.closest('.vy-car-arrow, .vy-st')) prog = 0; }, true); setInterval(() => { const bar = document.getElementById('vyprog'); if (!bar) return; if (paused || document.hidden) return; prog += 50 / 7000; if (prog >= 1) { prog = 0; const btns = document.querySelectorAll('.vy-car-arrow'); if (btns[1]) btns[1].click(); } bar.style.width = String(Math.min(prog * 100, 100)) + '%'; }, 50); }} data-og-width="202" width="202" data-og-height="44" height="44" data-path="logo/light.svg" data-optimize="true" data-opv="3" srcset="https://mintcdn.com/verify-you-alchemer-flow/zUTLQSis4SUVT9n_/logo/light.svg?w=280&fit=max&auto=format&n=zUTLQSis4SUVT9n_&q=85&s=8d93f4769b84d68c89a8d0bf12b66f7e 280w, https://mintcdn.com/verify-you-alchemer-flow/zUTLQSis4SUVT9n_/logo/light.svg?w=560&fit=max&auto=format&n=zUTLQSis4SUVT9n_&q=85&s=36886f99e79a52066317093a7300dfe5 560w, https://mintcdn.com/verify-you-alchemer-flow/zUTLQSis4SUVT9n_/logo/light.svg?w=840&fit=max&auto=format&n=zUTLQSis4SUVT9n_&q=85&s=bf524dd3f01a979a87e204272974eace 840w, https://mintcdn.com/verify-you-alchemer-flow/zUTLQSis4SUVT9n_/logo/light.svg?w=1100&fit=max&auto=format&n=zUTLQSis4SUVT9n_&q=85&s=29f20c149eae24a57ea72d737192423b 1100w, https://mintcdn.com/verify-you-alchemer-flow/zUTLQSis4SUVT9n_/logo/light.svg?w=1650&fit=max&auto=format&n=zUTLQSis4SUVT9n_&q=85&s=bbbda7bb68f14bb6500dc16d654b5bfb 1650w, https://mintcdn.com/verify-you-alchemer-flow/zUTLQSis4SUVT9n_/logo/light.svg?w=2500&fit=max&auto=format&n=zUTLQSis4SUVT9n_&q=85&s=591fbe71f6f2be0c17596d703483806c 2500w" />

      <button className="vy-car-arrow" aria-label="Previous stage" onClick={() => { const s = Array.from(document.querySelectorAll('.vy-car-slide')); for (const el of s) el.setAttribute('data-pos', String((parseInt(el.getAttribute('data-pos'), 10) + 1) % 3)); for (const el of document.querySelectorAll('.vy-st')) el.classList.remove('vy-on'); const f = s.find((el) => el.getAttribute('data-pos') === '0'); document.getElementById('st' + f.id.slice(2)).classList.add('vy-on'); }}>
        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.4" strokeLinecap="round" strokeLinejoin="round">
          <path d="m15 5-7 7 7 7" />
        </svg>
      </button>

      <button className="vy-car-arrow" aria-label="Next stage" onClick={() => { const s = Array.from(document.querySelectorAll('.vy-car-slide')); for (const el of s) el.setAttribute('data-pos', String((parseInt(el.getAttribute('data-pos'), 10) + 2) % 3)); for (const el of document.querySelectorAll('.vy-st')) el.classList.remove('vy-on'); const f = s.find((el) => el.getAttribute('data-pos') === '0'); document.getElementById('st' + f.id.slice(2)).classList.add('vy-on'); }}>
        <svg width="20" height="20" viewBox="0 0 24 24" fill="none" stroke="currentColor" strokeWidth="2.4" strokeLinecap="round" strokeLinejoin="round">
          <path d="m9 5 7 7-7 7" />
        </svg>
      </button>
    </div>
  </div>
</div>

## Why the gate holds

Each password is a claim ticket. We only hand one to a person who just proved, on camera, that they are **live** and **unique**. Your study enforces the ticket with Alchemer's own <a href="https://help.alchemer.com/help/login-password-action">Login/Password action</a>, set to individual one-time passwords that deactivate after use. Alchemer's feature, Alchemer's wording.

So every cheap trick fails: a shared link carries a spent password, a guessed password does not exist, a bot never earns one, and the same face can never get a second one for the same study, on any device.

One honest limit: the check proves who they are, not how carefully they answer. Keep your speeder and attention checks.

## What we never touch

No photo is shared with you or with Alchemer, only a yes or no. Your study receives a verdict and a password, never a face, a name, or personal information.

## Start here

<div className="grid md:grid-cols-2 gap-5 mt-6">
  <a href="/setup" className="vy-card bg-gray-50 dark:bg-zinc-900 border border-gray-200 dark:border-zinc-800 text-gray-900 dark:text-zinc-50">
    <span className="vy-card-wm">
      <Icon icon="sliders" iconType="light" size={250} />
    </span>

    <span className="vy-card-icon">
      <Icon icon="sliders" iconType="light" size={22} />
    </span>

    <span className="vy-card-title">Set it up</span>
    <span className="vy-card-sub text-gray-500 dark:text-zinc-400">Five steps, no code.</span>
  </a>

  <a href="/respondent-flow" className="vy-card bg-gray-50 dark:bg-zinc-900 border border-gray-200 dark:border-zinc-800 text-gray-900 dark:text-zinc-50">
    <span className="vy-card-wm">
      <Icon icon="mobile-screen" iconType="light" size={250} />
    </span>

    <span className="vy-card-icon">
      <Icon icon="mobile-screen" iconType="light" size={22} />
    </span>

    <span className="vy-card-title">What your respondent sees</span>
    <span className="vy-card-sub text-gray-500 dark:text-zinc-400">Pass, blocked, and the return, on real product screens.</span>
  </a>
</div>
