Stop automated sign-ups without slowing real customers.

OTCaptcha verifies every visitor in the background, raises the cost for suspicious traffic and tightens by itself during an attack.

For sign-up, login, password reset and any other form.

The slide puzzle as a card over a sign-up form: the piece is part way to its gap and the handle sits under the pointer
Card: the slide puzzle
The press and hold check as a single pill over a sign-up form: the round thumb is pressed and the fill is sweeping along the pill
Pill: press and hold
The check inline in a sign-up form, between the password field and the Create account button, showing a green tick and the word Verified
Inline: inside your own form

Most visitors see neither. The loader is under 16 KB compressed, and the background check finishes before anyone notices it ran.

The check steps up only as far as the risk warrants.

Each step looks like part of your page, in your colour and in the visitor's language.

Most visitors
Nothing at all. The check runs while they finish the form. The page stays responsive, and there is nothing to click.
Looks suspicious
A short press and hold. A small box asks them to press and hold until it fills. It says what to do if they let go early, and it works with a finger, a mouse or a keyboard.
Looks automated
A slide puzzle. They slide a piece into the gap. A miss shakes the handle and lets them try again. Anyone who cannot drag can switch to the hold.

What visitors see

The real box on a phone, over a plain sign-up form. First in motion: a press, the fill, the pass. Then the hold waiting and part way through, the slide puzzle, and the moment the check passes.

The press and hold check on a phone: a press starts the fill, it sweeps across the button over a second and a half, and a green tick with the word Verified replaces it
The hold, as it happens: press, fill, pass
The press and hold check as a sheet at the bottom of a phone screen, waiting for a press
The hold, waiting for a press
The press and hold check part way through on a phone: the button is filling from left to right
The hold, filling under the thumb
The slide puzzle on a phone: the piece is half way to its gap and the handle sits under the thumb
The slide puzzle
The check has passed on a phone: a green tick and the word Verified
Verified

Three layers, in order

Every attempt goes through all three. None of them asks a normal visitor to do anything.

  1. Proof of work

    The visitor's device completes a short calculation in the background. Trivial once, costly at scale.

  2. Risk signals

    Automation traces, network origin and inconsistent device details are scored together. No single signal decides.

  3. Server verification

    Your backend confirms each pass. A pass works once and expires in minutes.

Attack response that runs itself

OTCaptcha learns your usual traffic. When volume or suspicious activity jumps, it steps up protection, then steps back down once the attack ends. Nobody has to be woken up.

Sign-up attempts during an attackIllustration, not customer data
Normal protectionProtection raised automatically
StateWork per attemptSuspicious visitors
Normal1xStandard checks
Elevated2xHeld sooner
Severe4xHeld at the lowest risk score

What your developer does

On the page
One script, loaded with the page. It asks for a pass in the background.
On your server
One request to confirm the pass before the form is acted on. The secret never leaves your server.
Size
A loader under 16 KB, delivered compressed.
Hosting
Host the file yourself or load it from us.
Outage
Your sign-ups stay open if our service is unreachable.
Look
Brand colour, corner radius and light or dark, set per site.
The press and hold check on a dark page, in the dark palette the box takes from the system setting
On a dark page
The press and hold check in a teal accent with near-square corners, another site's brand settings
Another site's accent and corner radius
Read the developer guide
JavaScript
// When the sign-up form is shown. A box opens only if needed.
otcaptcha.init({ captchaId: '[SITE KEY]' }, (widget) => {
  form.addEventListener('submit', (event) => {
    event.preventDefault();
    widget
      .onReady(() => {
        if (!widget.getValidate()) widget.showBox();
      })
      .onSuccess(() => sendForm(form, widget.getValidate()));
  });
});

Shortened. The developer guide has the complete samples, with error handling and the outage policy.

What you get back

Protection you can read about, not just trust. Every check is recorded without personal data, and the reports answer the questions a team asks after an attack.

Weekly report

Traffic, outcomes, attacks, new suspicious networks and solve times, once a week.

Attack timelines

Every automatic escalation is kept as one event: when it started, what raised it, which networks and countries were involved, and when it ended.

Challenge funnel

How many visitors who saw a hold or a puzzle finished it, gave up, or switched to the other check. Visitors who leave never reach your server, so this is the only place they show up.

Sites that never verify

A site that shows the check but never confirms passes on its server is unprotected. We name it, so an integration gap is noticed before an attacker does.

What is recorded, and for how long

Request early access

We are onboarding a small number of teams first.

We email you when your place is ready. Nothing else.