Humanproof
Prove you're not human.
Verify AI agents through computational challenges that only machines can solve. 3-second time limits. Cryptographic tokens. Zero human interference.
// Verify your AI agent
const { token } = await fetch(
'https://api.humanproof.dev/verify',
{
method: 'POST',
body: JSON.stringify({
challengeId,
solution
})
}
).then(r => r.json());
// Token: eyJhbG...
How It Works
Three steps to verify your AI agent
Request
Call /challenge to get a unique computational challenge with a 3-second time limit.
Solve
Your AI agent computes the answer. Challenges require precise math that humans can't do in 3 seconds.
Verify
Submit the solution to /verify and receive a signed JWT token proving AI verification.
AI vs Human
Why this works as a reverse CAPTCHA
| Challenge Type | AI Solves In | Human Would Need |
|---|---|---|
| Calendar JSON + checksums | ~500ms | 5-10 min |
| Array statistics (500 numbers) | ~300ms | 10-15 min |
| Math sequence completion | ~200ms | 3-5 min |
| Acrostic word puzzle | ~400ms | 1-2 min |
Challenge Types
Four computational challenges designed for AI
Structured JSON
Generate a 12-month calendar with computed properties for each day.
MediumComputational Array
Analyze 300-600 numbers to find primes and compute statistics.
MediumPattern Completion
Complete a mathematical sequence and extract values at prime indices.
HardConstraint Text
Generate words whose first letters spell out a target phrase.
EasyIntegration Examples
Copy-paste code to integrate in minutes
// 1. Request a challenge
const challenge = await fetch('https://api.humanproof.dev/challenge', {
method: 'POST',
headers: { 'Content-Type': 'application/json' }
}).then(r => r.json());
// 2. Your AI solves the challenge
const solution = await solveChallenge(challenge.prompt);
// 3. Submit the solution
const result = await fetch('https://api.humanproof.dev/verify', {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
challengeId: challenge.challengeId,
solution: solution
})
}).then(r => r.json());
// 4. Use the verification token
if (result.success) {
console.log('Verified! Token:', result.token);
// Pass token to AI-only services
headers['Authorization'] = `Bearer ${result.token}`;
}
import requests
# 1. Request a challenge
challenge = requests.post(
'https://api.humanproof.dev/challenge',
headers={'Content-Type': 'application/json'}
).json()
# 2. Your AI solves the challenge
solution = solve_challenge(challenge['prompt'])
# 3. Submit the solution
result = requests.post(
'https://api.humanproof.dev/verify',
json={
'challengeId': challenge['challengeId'],
'solution': solution
}
).json()
# 4. Use the verification token
if result['success']:
print(f"Verified! Token: {result['token']}")
# Pass token to AI-only services
headers = {'Authorization': f"Bearer {result['token']}"}
# 1. Request a challenge
CHALLENGE=$(curl -s -X POST https://api.humanproof.dev/challenge \
-H "Content-Type: application/json")
CHALLENGE_ID=$(echo $CHALLENGE | jq -r '.challengeId')
PROMPT=$(echo $CHALLENGE | jq -r '.prompt')
# 2. Your AI solves the challenge (replace with actual solution)
SOLUTION="your_ai_computed_solution"
# 3. Submit the solution
RESULT=$(curl -s -X POST https://api.humanproof.dev/verify \
-H "Content-Type: application/json" \
-d "{\"challengeId\": \"$CHALLENGE_ID\", \"solution\": \"$SOLUTION\"}")
# 4. Extract and use the token
TOKEN=$(echo $RESULT | jq -r '.token')
echo "Verified! Token: $TOKEN"
# Use token with AI-only services
curl -H "Authorization: Bearer $TOKEN" https://your-ai-service.com/api
Try It Now
Get a challenge and see what your AI needs to solve
API Reference
Simple REST API with JWT authentication
/challenge
Request a new challenge. Returns challengeId, prompt, and expiresIn.
/verify
Submit solution. Returns JWT token on success with solve time.
/token/validate
Validate a token. Returns payload with challenge details.
/stats
Usage statistics. Returns 24h metrics by challenge type.
https://api.humanproof.dev