UTO※Auth:0™ API
Developers
One authenticated call tells you whether a person in front of you is a verified human, how strongly they were verified, and which modules they cleared. Every call is metered and billed against your plan.
Authentication
Issue a key from your business account. Keys look like uto_live_… and are stored only as a hash — copy it the moment it is shown. Send it as a bearer token.
POST /api/public/v1/verify
curl -X POST https://uto.bio/api/public/v1/verify \
-H "Authorization: Bearer uto_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{ "iverifyNumber": "USA#458945984589489TFO" }'Response
{
"valid": true,
"status": "verified",
"score": 88,
"tier": "Gold",
"verifiedAt": "2026-02-11T09:14:22.108Z",
"modules": ["biometric", "id_doc", "face_match", "identity", "address", "phone", "email"]
}An unknown or malformed iVerify™ number returns valid: false with a 200 so you can branch without try/catch. Bad keys return 401.
POST /api/auth/uto — JSON Web Tokens
Mint a signed identity assertion any UTO™ system can verify offline. Tokens are compact HS256 JWTs — header.payload.signature — carrying the holder’s iVerify™ number, tier and credibility score.
curl -X POST https://uto.bio/api/auth/uto \
-H "x-api-key: uto_live_xxxxxxxxxxxxxxxxxxxx" \
-H "Content-Type: application/json" \
-d '{
"action": "token",
"iverify_number": "USA#458945984589489TFO",
"audience": "ibank",
"scope": "identity:read wallet:read",
"ttl_seconds": 3600
}'Response
{
"token_type": "Bearer",
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.…",
"alg": "HS256",
"issuer": "https://uto.bio/auth0",
"audience": "ibank",
"expires_in": 3600,
"jti": "0f2c…",
"uto_user_id": "1c6f…"
}Send { "action": "verify_token", "token": "…" } to check one you received; expired, mis-audienced or tampered tokens return 401 with a reason. Same endpoint also serves signup, link and lookup.
iVerify™ SDK
One import, every endpoint — with timeouts, retries and 429 back-off built in. Works in Node 18+, Bun, Deno, Cloudflare Workers and modern browsers (keep the key server-side).
import { IVerify } from "https://uto.bio/sdk/iverify.js";
const iv = new IVerify({ apiKey: process.env.IVERIFY_API_KEY });
const who = await iv.verify("USA#458945984589489TFO");
if (who.verified && who.credibility_score >= 88) grantAccess();
const { access_token } = await iv.token({
iverify_number: who.iverify_number,
audience: "ibank",
scope: "identity:read wallet:read",
});Methods: verify, signup, link, lookup, token, verifyToken.
ArcJet™ security layer
Every public endpoint sits behind three gates: a shield against hostile payloads, a bot filter for keyless automated clients, and a sliding-window limiter keyed to your API key (300/min on verify, 120/min on auth). Denials return 429 with a Retry-After header — the SDK waits and retries for you. Every decision is logged for audit.
Socure RiskOS™ hosted document check
The ID and face-match modules run inside Socure’s hosted flow (docv_socure_pass), including Socure Pass reuse for returning people. We never decide from the browser: the final ACCEPT / REJECT arrives on /api/public/socure-webhook and is written straight onto the verification record.
UTO⌘BIO™ profiles
Every verified holder gets uto.bio/theirname carrying their iVerify™ number, tier and score — and can point a bought domain at it with a CNAME to backlinks.uto.bio plus a TXT ownership record.
Billing webhook
Point Chargebee at /api/public/chargebee-webhook with the shared token. Events are de-duplicated by event id, so retries are safe, and subscription state lands on the matching account within seconds.
Rate limits and residency
Deployed on Spaceship™ HyperLift™ edge regions. Starter allows 1,000 verifications a month, White-Label 10,000, Enterprise unlimited with a 99.99% SLA.