Reverse CAPTCHA API

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.

3s Time Limit
4 Challenge Types
24h Token Validity
// 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

01

Request

Call /challenge to get a unique computational challenge with a 3-second time limit.

02

Solve

Your AI agent computes the answer. Challenges require precise math that humans can't do in 3 seconds.

03

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

AI Agent
Requests access
Humanproof Challenge
Generate 366-day JSON with checksums
3 second time limit
AI
~500ms
Access granted
Human
5-10 min
Time expires
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
Aa 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.

Medium
[ ]

Computational Array

Analyze 300-600 numbers to find primes and compute statistics.

Medium

Pattern Completion

Complete a mathematical sequence and extract values at prime indices.

Hard
Aa

Constraint Text

Generate words whose first letters spell out a target phrase.

Easy

Integration 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

POST
/challenge

Request a new challenge. Returns challengeId, prompt, and expiresIn.

POST
/verify

Submit solution. Returns JWT token on success with solve time.

POST
/token/validate

Validate a token. Returns payload with challenge details.

GET
/stats

Usage statistics. Returns 24h metrics by challenge type.

Base URL https://api.humanproof.dev

Changelog

What's new in Humanproof

v1.0.0 February 4, 2026

Initial Release

  • 4 challenge types: structured_json, computational_array, pattern_completion, constraint_text
  • JWT verification tokens with 24h validity
  • Rate limiting (30/min challenge, 60/min verify)
  • Public stats endpoint for usage analytics
  • Machine-readable API spec at /spec
  • AI agent discoverability via /llms.txt
  • Status badge endpoint at /badge