HUMAN VERIFICATION

Stronger verification.
Built to resist automation.

NexaCAPTCHA shows four characters a little at a time. People follow the movement and read them naturally, while automated tools need to process the full animation.

  • 4 uppercase letters or digits
  • 5 minutes to complete
  • One-time result

LIVE DEMO

Try NexaCAPTCHA

Ready

Follow the moving window, then enter all four characters.

Your result will appear here.

FEATURES

Why NexaCAPTCHA?

A normal text CAPTCHA can be read from one picture. NexaCAPTCHA spreads the useful parts across an animation.

Clearer for people

Characters stay upright while drifting smoothly in different directions.

The full animation matters

No single moment shows the complete answer. Automated tools must inspect more than one image.

Simple to add

Load one script, add one element, then verify two values from your backend.

SETUP

Add it in two small steps

The CAPTCHA handles its own display and answer checking.

1

Load the widget

Add this script and place the CAPTCHA where you want it.

HTML
<script src="https://nexacaptcha.zone.id/v1/captcha.js" defer></script>

<div class="nexa-captcha" data-callback="onNexaComplete"></div>
2

Send the result to your backend

After success, send only verificationId and responseToken to your server.

JavaScript
function onNexaComplete(result) {
  if (!result.success) return;

  sendToYourBackend({
    verificationId: result.verificationId,
    responseToken: result.responseToken
  });
}

The two values you need

verificationId
Identifies which completed CAPTCHA is being checked.
responseToken
A 32-character, one-time proof returned after the correct answer.

BACKEND VERIFICATION

Confirm the result

Your backend sends the two values to one endpoint before accepting the form, signup, or login.

POST/api/v1/siteverify

Request

{
  "verificationId": "ver_...",
  "responseToken": "GD8dR4qbKj7s0LmPWz2YxT5eU9nAcFhV"
}

Response

{
  "success": true,
  "verifiedAt": "2026-08-07T12:30:00.000Z"
}
Node.js
const response = await fetch(
  "https://nexacaptcha.zone.id/api/v1/siteverify",
  {
    method: "POST",
    headers: { "Content-Type": "application/json" },
    body: JSON.stringify({
      verificationId,
      responseToken
    })
  }
);

const result = await response.json();
if (!result.success) {
  return res.status(403).send("Verification failed");
}