Clearer for people
Characters stay upright while drifting smoothly in different directions.
HUMAN VERIFICATION
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.
LIVE DEMO
Follow the moving window, then enter all four characters.
FEATURES
A normal text CAPTCHA can be read from one picture. NexaCAPTCHA spreads the useful parts across an animation.
Characters stay upright while drifting smoothly in different directions.
No single moment shows the complete answer. Automated tools must inspect more than one image.
Load one script, add one element, then verify two values from your backend.
SETUP
The CAPTCHA handles its own display and answer checking.
Add this script and place the CAPTCHA where you want it.
<script src="https://nexacaptcha.zone.id/v1/captcha.js" defer></script>
<div class="nexa-captcha" data-callback="onNexaComplete"></div>
After success, send only verificationId and responseToken to your server.
function onNexaComplete(result) {
if (!result.success) return;
sendToYourBackend({
verificationId: result.verificationId,
responseToken: result.responseToken
});
}
BACKEND VERIFICATION
Your backend sends the two values to one endpoint before accepting the form, signup, or login.
/api/v1/siteverify{
"verificationId": "ver_...",
"responseToken": "GD8dR4qbKj7s0LmPWz2YxT5eU9nAcFhV"
}{
"success": true,
"verifiedAt": "2026-08-07T12:30:00.000Z"
}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");
}