A CAPTCHA whose letters exist only as motion. Screenshots, OCR and image models see uniform noise; people read it in a second.
Keys are free and instant. Keep the secret on your server.
1. Put the widget inside your form:
<script src="ORIGIN/motion-captcha.js" async defer></script> <div class="motion-captcha" data-sitekey="SITEKEY"></div>
When a visitor solves it, a hidden field named motion-captcha-response is filled in and posts with your form.
2. Verify from your backend before trusting the submission (same shape as reCAPTCHA’s siteverify):
POST ORIGIN/siteverify
Content-Type: application/x-www-form-urlencoded
secret=SECRET&response=<value of motion-captcha-response>
→ {"success": true, "challenge_ts": "…"}
→ {"success": false, "error-codes": ["timeout-or-duplicate"]}
Each response token verifies once and expires after 5 minutes. Optional attributes on the div: data-callback="fnName" (receives the token, for SPAs), data-label / data-reload / data-play / data-checking / data-verified / data-wrong / data-error (translate the UI), data-speed, data-density, data-size.