Dashboard
Manage your TapHuman integration and view quick stats.
Configure Your Keys
Your Client ID and Secret Key authenticate your requests and secure your integration. Use this section to regenerate keys if they are compromised, and define the specific domains (CORS) where your widgets are allowed to render.
Danger Zone
Warning: Generating new keys will immediately break any live integrations using your current keys.
Comma-separated list of domains allowed to use your widget (e.g. mygame.com, example.com). Localhost and your Sandbox are implicitly allowed. By default, you are capped at 50 domains. Please contact support if you require an expanded limit.
Test in the Sandbox
Before writing any code, try out the different gamified experiences here. Note: If you select multiple games, our system will randomly deliver them to your users on every load, further complicating targeted attacks by machine-learning bots. This sandbox is connected to your live keys and simulates exactly what your users will see. It also outputs the raw payload data in real-time so you can understand the cryptographic handshake.
Payload Explorer
Age Verification
Protect age-restricted content and purchases with a privacy-minimal age gate. Choose a self-declared minimum-age check (L1) or a server-calculated age check from a birthdate (L2) that never stores the birthdate. Try it in the preview, then copy the embed snippet.
Policy
Presentation only. This choice changes the embed URL and preview, not the saved age policy or server threshold.
Allowed Domains
Comma-separated list of domains allowed to embed your widgets. This list is shared between the CAPTCHA widgets and the age gate. Localhost and the sandbox are implicitly allowed.
Keys
Sandbox Preview
This preview embeds the age gate against your live keys and simulates exactly what your users will see. It shows only the threshold result — no birthdate is displayed or stored.
Embed Snippet
Copy the frontend widget into your HTML, and verify the signed grant on your backend using your secret key.
Frontend (HTML/JS)
Backend Verification (Node.js)
Add to Your App
We've generated custom code snippets for you below. These snippets automatically update based on the game you select in the sandbox. Simply copy the frontend widget into your HTML, and use the backend snippet to cryptographically verify the payloads.
Frontend Integration (HTML/JS)
Backend Verification
<?php
$payload = $_POST['payload']; // raw string
$signature = $_POST['signature']; // hex digest
$parsed = json_decode($payload, true);
// 1. Prevent Replay Attacks (5-minute expiration)
$age_ms = abs(time() * 1000 - $parsed['timestamp']);
if ($age_ms > 5 * 60 * 1000) {
http_response_code(403);
die('Expired Token');
}
// 2. Verify HMAC-SHA256 Signature
$expected = hash_hmac('sha256', $payload, $_ENV['TAPHUMAN_SECRET_KEY']);
if (!hash_equals($expected, $signature)) {
http_response_code(403);
die('Invalid Signature');
}
// 3. Verified — proceed with form submission
echo json_encode(['success' => true]);
import hmac, hashlib, json, time, os
from flask import request, jsonify
@app.route('/api/verify-captcha', methods=['POST'])
def verify_captcha():
payload = request.form['payload'] # raw string
signature = request.form['signature'] # hex digest
parsed = json.loads(payload)
# 1. Prevent Replay Attacks (5-minute expiration)
age_ms = abs(time.time() * 1000 - parsed['timestamp'])
if age_ms > 5 * 60 * 1000:
return 'Expired Token', 403
# 2. Verify HMAC-SHA256 Signature
expected = hmac.new(
os.environ['TAPHUMAN_SECRET_KEY'].encode(),
payload.encode(),
hashlib.sha256
).hexdigest()
if not hmac.compare_digest(expected, signature):
return 'Invalid Signature', 403
# 3. Verified — proceed with form submission
return jsonify(success=True)
Monitor & Scale
You're ready for production! Your first 1,000 successful human solves every calendar month are completely free. Monitor your usage here, configure alert notifications, and add a payment method when you're ready to scale beyond the free tier.
TapHuman Plans
- ✓ 1,000 verified solves per month
- ✓ Full playable challenge library
- ✓ Server-side HMAC verification
- ✓ Accessibility path included
- ✓ 100,000 CAPTCHA solves per month — free, forever
- ✓ 100x the standard free tier
- ✓ Locked in for life — never expires, never downgrades
- ✓ Priority support from the founding team
- ✓ Claim with an early-adopter invitation
- ✓ Unlimited monthly solves
- ✓ Pay only for verified human solves — bots are free
- ✓ No flat fees, no contracts
- ✓ Everything in Free, at any scale
Plans and pricing as shown on taphuman.io/pricing.
Notifications
Feedback that feels playable.
Build a branded NPS campaign, tune the post-score experience, and preview the customer journey without leaving your TapHuman dashboard.
Apply a complete campaign direction, then tune every detail in the builder.