Migrate from hCaptcha

Drop-in replacement. The h-captcha-response field is supported natively, so most form code keeps working unchanged.

Why teams move from hCaptcha.

The most common reason we hear: hCaptcha's image-grid challenges have gotten harder over the years, and user-completion rates have suffered. The underlying reason is that hCaptcha's free tier is funded by data labelling — your users solve image grids that contribute training data to hCaptcha's customers. As the labelling demand has grown, the difficulty has crept up.

Other reasons: predictable EUR pricing, EU data residency, mode flexibility (smart-click default vs hCaptcha's image-grid default), and the desire to use a CAPTCHA whose business model is just charging for the CAPTCHA service.

Before you start.

You'll need: an existing hCaptcha integration, your dashboard credentials for hCaptcha (to copy the existing sitekey and secret for parallel-run testing if desired), and ten minutes. The actual code changes are smaller than reCAPTCHA's because hCaptcha's API is already very close to reCAPTCHA's — and ours.

Step 1 — Sign up.

Create a free account at trustedcaptcha.com/signup. Add your site (production hostnames, comma-separated). You'll get a sitekey and a secret. The secret is shown once.

Step 2 — Replace the script tag.

Find your hCaptcha script:

<!-- OLD -->
<script src="https://hcaptcha.com/1/api.js" async defer></script>

Replace with:

<!-- NEW -->
<script src="https://cdn.trustedcaptcha.com/widget/v1/api.js" async defer></script>

Step 3 — Update the widget div.

<!-- OLD -->
<div class="h-captcha" data-sitekey="..."></div>

<!-- NEW -->
<div class="trustedcaptcha" data-sitekey="0x..."></div>

Like reCAPTCHA's case, the widget loader will populate any existing h-captcha-response hidden input on success. If your server-side code reads $_POST['h-captcha-response'] directly, that keeps working — we fill that field name in addition to our native trustedcaptcha-response.

The data-theme, data-size, data-callback, data-expired-callback, and data-error-callback attributes work identically.

Step 4 — Server-side verify URL.

// OLD
$endpoint = 'https://hcaptcha.com/siteverify';

// NEW
$endpoint = 'https://challenges.trustedcaptcha.com/api/v1/siteverify';

POST body shape: secret, response, remoteip — identical to hCaptcha. Response JSON: {success, challenge_ts, hostname, error-codes, ...} — also identical, with the addition of a score field for compatibility with code that previously used reCAPTCHA v3.

Update your environment variable. Existing variable name HCAPTCHA_SECRET works fine; rename if you want.

Step 5 — Test and deploy.

Submit a test form. Verify success in the dashboard. Deploy. Monitor for an hour. If anything looks wrong, support is at support@trustedcaptcha.com.

Common gotchas.

Privacy Pass. If your previous hCaptcha integration relied heavily on the Privacy Pass mechanism for repeat users, you'll see a slight UX difference: TrustedCaptcha doesn't use Privacy Pass tokens. Instead, our smart-click default tends to pass legitimate users on the first attempt without a visible challenge, achieving similar friction levels through different means.

Image difficulty. If you'd been hand-tuning challenge difficulty to balance bot blocking against user-completion rates, TrustedCaptcha's image grid uses different parameters. The default is generally less difficult than late-period hCaptcha grids; user completion rates typically improve.

"Always Challenge" mode. hCaptcha's "Always Challenge" mode (force visible challenge regardless of risk) maps to setting data-mode="image" on the TrustedCaptcha widget div, or to setting the site's default mode to "image" in the dashboard.

Pricing comparison.

If you've been on hCaptcha's free tier (1M/month image grids), and your volumes are below ~33k/day, you'll fit in our 1k/day free tier. If you're above that, the €25/month Pro plan is unlimited and is materially cheaper than hCaptcha's $99/mo Pro tier. We don't have a per-call enterprise pricing schedule.

Rolling back.

Reversible by undoing Steps 2 and 4. Your hCaptcha account remains intact. We'd love feedback if you bounce off — email support@trustedcaptcha.com.

Start the migration →   Read the API docs →