Provide a writing sample, chat log or transcript for our tool to guess the writer's age using AI trained on hundreds of thousands of writers. The most unique way to verify age and gather insight passively. Test for free now and easily integrate via API.
1.59B
messages behind the model
no PII
collected or stored
$0.02/call
$0.01 after 100K
The mechanism differs from identity-verification services. Three properties follow from inferring age from writing instead of documents.
The API reads writing the user produces for other reasons — chat messages, bios, posts. It does not require the user to upload, photograph, or confirm anything.
No ID. No selfie. No PII.
Identity-verification services check at signup and return a single boolean. This API can be called on every message, so confidence accumulates across a user's history as more text becomes available.
Single signal, repeatable.
The model was trained on SMS but the features it learned — vocabulary, sentence structure, punctuation, idioms — generalize to any user-written text: human chat, AI chat, email, forum posts, bios, support tickets.
Any text the user wrote.
Paste a sample of writing — a chat message, email, or forum post — and see the verdict, confidence score, and the signals the demo flagged.
Live API
free tierFree tier — 10/hr, 50/day per IP
Quick samples:
ID-and-selfie verification works well for high-friction, high-trust moments (banking, healthcare). The same mechanism imposes a different cost structure when applied to consumer-platform age assurance.
Document upload and selfie capture add a multi-step interrupt to signup. Published abandonment rates at the verification step range from 30–50% depending on demographic.
Vendors typically charge $0.10–$0.50 per verification. Applied to every signup, the majority of spend goes to verifying users who would have passed without it.
Government documents and biometric data fall under GDPR, BIPA, CCPA, and equivalent regimes. Storage, retention, and breach notification add operational overhead.
Identity verification confirms who held the documents at one moment. A 14-year-old using a parent's verified account is indistinguishable from the verified parent.
Products without a discrete signup step — open chat surfaces, AI assistants — lack the moment in which an ID flow conventionally fits.
SMS bots, embeddable widgets, and feature-phone deployments cannot render the smartphone webview that ID vendors require.
Identity verification establishes who a user was at one moment. Text-based inference establishes how a user writes across a session. The two answer different questions.
Identity verification (Yoti / Persona / Veriff)
Text-based inference (this API)
Categories are different — text-based inference is intended to be deployed alongside identity verification, not in place of it.
| Our API | Yoti | Persona | Veriff | |
|---|---|---|---|---|
| Detection method | Writing-style ML | ID + selfie | ID + selfie + db | ID + selfie |
| User friction | None — passive | High — upload flow | High — upload flow | High — upload flow |
| PII collected | None | Photo ID + biometric | Photo ID + biometric | Photo ID + biometric |
| Cost per check | $0.01–$0.02 | $0.10–0.50 | $0.10–0.40 | $0.20–1.50 |
| Speed | Instant — no user action | Minutes of user effort | Minutes of user effort | Minutes of user effort |
| Continuous monitoring | Yes — every message | No | No | No |
| Works in chat / SMS / AI products | Yes | Needs webview | Needs webview | Needs webview |
| Catches account handoffs | Yes | No | No | No |
| Regulator-recognized | As supplementary signal | As primary | As primary | As primary |
| Best used as | Pre-gate + background | Fallback for flagged | Fallback for flagged | Fallback for flagged |
Each row is a property of the deployment mechanism, not a value judgment. Different deployments call for different tools.
Any text the user produces — bio at signup, first chat messages, AI conversation, support ticket. The text needs no preparation beyond what is normally collected.
Send the text. The API returns a verdict (over_18 / under_18 / uncertain), a confidence score, a predicted age range, and a decision_id for your audit trail.
Users with a clear over_18 verdict complete the flow without further checks. The threshold for what counts as "clear" is configurable per integration.
Users flagged under_18 — or uncertain at the threshold you set — are routed to your existing identity-verification vendor for the stronger check. The decision_id forms part of the audit chain.
Call the endpoint on subsequent messages and compare verdicts over time. This surfaces account handoffs and behavioral drift long after the initial check.
Cost arithmetic
On the validation set, the text-based gate clears the majority of adults at high confidence. If identity verification is reserved for the flagged subset, the per-signup spend at a representative ID rate of $0.30 falls from $0.30 to $0.02 (text gate) + $0.018 (ID on the flagged 6%) ≈ $0.04. The result is a reduction in ID-verification cost; it is not a replacement.
Categories where text-based age inference fits the deployment surface. Each has different latency, cost, and accuracy requirements.
ChatGPT-style products with no signup ID flow. The model reads the user's first messages and flags minors before sensitive content is generated.
Adult-only platforms facing Ofcom OFA-1 and payment-processor (Fibonatix, etc.) age-assurance demands. Our API + ID-fallback satisfies the layered-assurance test.
Match, Bumble, Hinge — our model monitors continuously to catch underage users who pass initial age gates with a parent's ID.
KOSA-relevant platforms (TikTok, Discord, Snapchat). The classifier runs on every post and DM, detecting age drift and account handoff.
Roblox, Steam — minor protections at scale. The model reads in-game chat passively to flag accounts inconsistent with claimed age.
Carriers running AI on subscriber SMS. Works on raw SMS — no webview required for ID upload.
Held-out evaluation against users with confirmed self-reported ages. A v2 retrain on the full corpus is underway and is expected to raise recall on the minor class.
94%
Specificity — legitimate adults pass invisibly
85%
Precision on minor flags
6%
False positive rate
These are single-shot numbers — one message, one verdict. The signal compounds with use: across five or more messages from the same user, the effective false-positive rate falls below 1%. A v2 retrain on the full corpus (17,000+ confirmed ages) is underway and is expected to raise recall on the minor class substantially.
Most published stylometric age-inference work uses snapshot datasets — Twitter dumps, blog corpora, forum scrapes. These capture how different individuals at different ages wrote during a single time window; they support cross-sectional comparison but not within-person modeling.
This corpus is constructed differently. A consumer messaging app, with explicit user consent, uploaded each user's entire SMS history. For a user who installed at age 25, the dataset contains their messages from age 15, 17, 20, 23 — bound to one identity.
Two consequences. First, the classifier can be trained on within-person age progression rather than cross-sectional age class, which separates writing-style variance from individual style. Second, validation pairs are stronger: more than 17,000 confirmed self-reported ages cross-referenced against the user's longitudinal text record.
Why this works
A single endpoint, POST JSON in and JSON out. Authentication via bearer token in the Authorization header.
POST /api/v1/age-gate
curl -X POST https://www.textmei.com/api/v1/age-gate \
-H "Authorization: Bearer YOUR_API_KEY" \
-H "Content-Type: application/json" \
-d '{
"text": "hey lol ikr that movie was so cringe my mom wont let me go out tonight 😭"
}'Response (HTTP 200)
{
"verdict": "under_18",
"confidence": 0.87,
"predicted_age_range": "14-17",
"model_version": "age-v1",
"decision_id": "agd_01HZK4PYR2X9JFQ8N4C0M",
"ms": 1450,
"tier": "free"
}Request fields
Verdict values
Billing
Continuous monitoring — recommended pattern
Call the endpoint on every meaningful user-written message (initial signup form, first 5–10 chat messages, periodic re-checks) and aggregate verdicts per user on your side. The signal compounds: one careful message can fool a classifier, but a user's natural style reasserts itself across messages two, three, and four.
Server-side rolling confidence per user is on the roadmap. Talk to us about high-volume integration.
Text is processed in-memory and discarded post-classification. No raw text retained. No biometric data ever.
Every classification gets a unique decision_id. Logs are retained for audit and exportable for regulator review.
All API traffic and stored data encrypted, hosted on SOC2-compliant infrastructure.
API keys can be scoped per environment, rotated on demand, and revoked instantly. Per-key rate limits and per-key usage analytics.
For high-compliance customers: even decision_ids stripped. Suitable for GDPR Article 17 / CCPA right-to-delete workflows by default.
Status page and email incident reports. Enterprise customers get a production SLA and a named on-call contact.
A free tier rate-limited per source IP for evaluation, a usage-based tier for production deployment, and a custom tier for higher volume.
Free
No signup required
Pay-as-you-go
Drops to $0.01/call after 100K lifetime
Skip the $0.02 ramp. $1,000 = 100,000 calls at the locked rate.
Enterprise
For 1M+ calls/mo or contract terms
All tiers run the same production model. Pay-as-you-go and Free share one API; the only differences are rate limit and billing.
The age model is one of seven demographic classifiers we've trained on the same corpus over the past decade.
The backstory
We started in 2016 building a consumer messaging app that helped users understand their text conversations. Along the way we built emotion detection, relationship analysis, and demographic classifiers — including a text-based age predictor that ran on every user's entire SMS history with their consent.
Our work was profiled by DatingAdvice in 2021 for an earlier API product that exposed our crush-detection model to dating platforms. The age predictor was the next thing on deck. Then COVID, then regulatory uncertainty, then a pivot to telecom partnerships (now live with MTN Congo).
Ofcom's OFA-1 going live in 2025 and OpenAI's January 2026 publication of their own age-prediction work both contributed to current category demand. The data and models existed prior to either event; the product is what wraps them in a callable API.
Those are ID-verification services — they require government documents, selfies, and a one-time check at signup. This API is fundamentally different: a passive, continuous classifier reading writing style. No ID, no selfie, no PII. Runs on every message, not just signup. Best paired with an ID vendor as the fallback for flagged users.
Anything the user wrote: chat (with humans or with AI), email, signup bios, customer-service tickets, forum posts, in-app comments. Trained on SMS but generalizes broadly because the model learns vocabulary and stylistic patterns that hold across channels.
You call the endpoint on every meaningful message and compare verdicts over time on your side. Because the read is per-message, you can catch account handoffs (a minor on a parent's verified account), age drift, and inconsistencies between claimed age and actual behavior — things a one-shot signup check can never see. Server-side rolling confidence per user is on the roadmap.
Its standout property is specificity — about 94% of genuine adults pass through invisibly, so you're not adding friction for the people who don't need it. Accuracy compounds with continuous use: across five or more messages from the same user, the effective false-positive rate drops below 1%. A v2 retrain on the full corpus is underway.
Best used as one layer in a layered age-assurance stack — the regulator-recognized pattern. Pair this API (passive pre-gate) with an ID-verification vendor (fallback for flagged users) plus full audit logs to meet meaningful-effort tests across all four jurisdictions.
Processed in-memory, not persisted by default. Hashed decision IDs are retained for audit. Enterprise customers can opt for zero-retention mode where no record of input text exists post-classification.
Yes. Because you can run it across many messages, it's resistant to one-shot deception — a 14-year-old typing one careful adult-sounding sentence reverts to their natural style across messages two, three, four. Aggregate the verdicts and the truth surfaces. Single-shot evasion here is much harder than evading ID-based vendors with a parent's documents.
It's live now. The free tier (rate-limited, no signup) is callable immediately, and paid API keys are emailed instantly after checkout. A retrained v2 model is on the way; all keys get the upgrade automatically.
Two ways. (1) The browser demo above runs a lightweight version of the classifier client-side — paste in any text. (2) The Free tier on the API is IP-rate-limited (10/hour, 50/day per IP) and requires no signup or credit card — just hit the endpoint from your terminal. Same model, same response shape as paid tiers.
Each API key has a lifetime call counter. The first 100,000 calls bill at $0.02 each from your prepaid balance. After 100,000, all subsequent calls bill at $0.01 — permanently, no monthly reset. If you'd rather skip the ramp, the $1,000 prepay starts you on $0.01 immediately and credits $1,000 toward calls. Heavier usage moves to a custom enterprise rate below $0.01.
The free tier is callable from any IP without signup, subject to the 10/hour, 50/day rate limit. Production usage bills at $0.02/call from a prepaid balance ($10 minimum), dropping to $0.01/call after 100,000 lifetime calls per key.