One endpoint. Behavioral signals. A confidence score. No friction for your users — and no false positives.
The snippet silently collects behavioral signals (mouse, keyboard, scroll) and sends them with each verify call for a richer score.
All requests must include your API key in the Authorization header as a Bearer token.
Get your key from your dashboard →
/api/v1/verifyVerify a userAnalyzes a user's behavioral signals and returns a human confidence score. Call at critical moments — signups, logins, form submissions, high-value actions.
| Parameter | Type | Required | Description |
|---|---|---|---|
| userId | string | Yes | Your internal user identifier. Not stored — used only for behavioral analysis. |
| Field | Type | Description |
|---|---|---|
| human | boolean | True if the user is likely human (confidence ≥ 0.5). |
| confidence | number | Score from 0.0 to 1.0. Higher = more human-like behavior. |
| token | string | Unique verification token. Store for audit purposes. |
| pii_stored | boolean | Always false. HUMA never stores personal information. |
curl -X POST https://humaverify.com/api/v1/verify \
-H "Authorization: Bearer huma_live_your_key_here" \
-H "Content-Type: application/json" \
-d '{"userId": "user_abc123"}'{
"human": true,
"confidence": 0.92,
"token": "h_verified_Kd3mP8luYMC2Mi1x",
"pii_stored": false
}| Status | Code | Meaning |
|---|---|---|
| 200 | — | Verification successful. |
| 401 | MISSING_AUTH | No Authorization header provided. |
| 401 | INVALID_API_KEY_FORMAT | Key doesn't match format (huma_live_...). |
| 401 | INVALID_API_KEY | Key not found in database. Check your dashboard. |
| 400 | — | Missing or invalid userId in request body. |
| 402 | TRIAL_EXPIRED | Free trial has expired. Upgrade at humaverify.com/#pricing. |
| 429 | MONTHLY_LIMIT_EXCEEDED | Monthly plan limit reached. Upgrade your plan. |
| 429 | BURST_LIMIT_EXCEEDED | Too many requests per minute. Check Retry-After header. |
| 429 | USER_FLOOD_DETECTED | Same userId verified too many times per minute (max 10/min). |
| 503 | — | Service temporarily unavailable. Retry with exponential backoff. |
import Huma from "@usehuma/node";
const huma = new Huma("huma_live_your_key_here");
const result = await huma.verify("user_123");
if (result.human && result.confidence > 0.7) {
// ✅ Real human — allow the action
} else {
// 🚫 Bot — block or challenge
}import Huma, { HumaError } from "@usehuma/node";
try {
const result = await huma.verify("user_123");
} catch (err) {
if (err instanceof HumaError) {
if (err.status === 429) {
console.log(`Rate limited. Retry in ${err.retryAfter}s`);
}
if (err.status === 402) {
// Trial expired — redirect user to upgrade
}
}
}Get your API key in seconds. 14-day free trial. No credit card required.
GET YOUR API KEY →