DEV Community

Cover image for Claude Won't Talk to Minors, But Your App Can (If You Do the Work).
Samod Alex
Samod Alex

Posted on Originally published at zyvop.com

Claude Won't Talk to Minors, But Your App Can (If You Do the Work).

Headlines this year compressed a year-long story into one sentence: "Claude is no longer available for minors." True, but misleading by omission: Claude.ai has required users to be 18+ since its earliest terms. What actually changed is how hard that wall is enforced, and what most coverage skips is whether any of this applies to you if you're building on the Claude API rather than claude.ai directly.

If you're building something that might reach teenagers (a tutoring app, a coding tool for a high school, a support bot with a mixed-age audience), the consumer 18+ rule and your obligations as a developer are two separate systems under two separate terms, and conflating them is the most common error in how this story gets told. This piece separates the two, covers how the enforcement side got here, and ends with a practical checklist for shipping something that isn't strictly adults-only.

Mermaid Diagram

Claude.ai enforcement flow: from sign-up affirmation through classifier flagging to ID-based appeal.

1. What Actually Changed, and When

The age floor isn't news, and neither is the conversation-scanning classifier: Anthropic doesn't publish a start date, and the post usually cited as this story's origin actually describes it as already-standard practice, not something newly switched on.

What that post (titled "Protecting the wellbeing of our users,", published December 18, 2025) announced as genuinely new was a second classifier in development for subtler signals (beyond an explicit "I'm in 8th grade"), plus Anthropic joining the Family Online Safety Institute (FOSI). Age policy was actually a small subsection there, not the focus: the post was mainly about suicide/self-harm safeguards and reducing sycophancy.

OpenAI made a parallel announcement the same week with a sharply different approach (covered in section 7). So "Claude is no longer available for minors" describes a policy that predates this news cycle by years, and the enforcement behind it isn't as new as the coverage implies either. The real escalation is biometric identity verification, a few months later.

2. How Anthropic Enforces the Wall on Claude.ai

The mechanics, as Anthropic has described them, stack up like this:

  • Sign-up affirmation. Every Claude.ai account holder checks a box confirming they're 18 or older.

  • Conversational classifiers. Self-identifying as under 18 in a chat gets the conversation flagged for human review, which can lead to suspension.

  • App-store age signals. In certain US states, the App Store or Play Store now passes age signals directly to Claude's mobile app, blocking sign-up or sign-in before a conversation happens, a parallel checkpoint that bypasses the classifier entirely.

  • Formal ID and age verification. In June 2026, Anthropic added a "Verification Data" category to its privacy policy, giving itself grounds to ask any Free, Pro, or Max user to confirm age or identity "in certain circumstances." Two vendors: Yoti handles age estimation (selfie estimate, ID scan, or "over 18" credential); Persona handles fuller identity checks, including a government-ID scan and a facial-geometry template some states classify as biometric data. Effective July 8, 2026.

The detail most writeups bury: this update explicitly does not apply to commercial Team, Enterprise, or API customers: it's Free/Pro/Max only. That line is the hinge the rest of this article turns on.

3. When Enforcement Backfired: the April 2026 False-Flag Wave

Active monitoring has a false-positive problem. Starting in April 2026, Reddit and X filled up with reports from adult, paying Pro-plan users incorrectly flagged and locked out. The suspension email told them: "Our team found signals that your account was used by a child," with a 30-day window to verify age through Yoti before the link expired. Some lost access to project histories in the process.

MediaNama put a formal list of questions to Anthropic: what signals the classifiers rely on beyond self-identification, the measured false-positive rate, how often suspensions get overturned. Anthropic hadn't answered publicly as of that reporting.

The backlash wasn't only about accuracy. An open letter signed by 400+ scientists and researchers warns that age-verification systems expand collection of sensitive data (biometrics, behavioral signals, context) and add risk of misuse, third-party access, and breach. The precedent: an October 2025 breach at Discord exposed roughly 70,000 government IDs submitted for age verification.

Users also flagged Persona itself, Anthropic's identity-verification vendor: it's backed by Founders Fund, the firm Peter Thiel co-founded, which is also an Anthropic investor, a disclosed potential conflict of interest, not an established wrongdoing, but part of why the rollout landed badly.

There's more behind that unease than the funding chain. In February 2026, two months before Anthropic named Persona as its vendor, researchers found part of Persona's front-end code exposed on a government-linked server, revealing capabilities including facial-recognition watchlist screening and the anti-money-laundering (AML) and know-your-customer (KYC) checks Persona also sells to financial and other institutions.

Persona's CEO disputed the core claims to Fortune, denying that Persona links biometrics to law-enforcement databases or has government or Palantir ties, and saying the files weren't a real vulnerability. Discord, which had been piloting Persona, ended the arrangement, though both said the trial had already wound down before the files surfaced. Anthropic picked Persona anyway, two months later.

4. The July 2026 ID Verification Rollout

Anthropic frames the July identity-verification rollout defensively: it lets flagged users prove their age rather than face a flat ban. But the timing stands out: published mid-June 2026, effective July 8, squarely inside a separate, unrelated dispute over model access.

That dispute: the U.S. Department of Commerce ordered Anthropic to suspend Claude Mythos 5 and Fable 5 over export-control concerns: launched June 9, suspended June 12, restriction lifted June 30, access restored July 1 (Anthropic's account here).

TechCrunch reported that being able to verify exactly who its users are gave Anthropic a stronger hand in that standoff. Whether that was a motivation or a side effect is interpretation; the timing overlap is record.

Practically, the data this flow can collect: a government-ID image plus its details (ID number, date of birth), a selfie photo or video, and a facial-geometry template, data that some jurisdictions, including Illinois under its biometric privacy law, treat as legally sensitive by default.

5. What the Claude API Actually Requires

The split that matters if you're a developer: Claude.ai (Free, Pro, Max, including Claude Code from those plans) falls under Consumer Terms and the 18+ wall above. Claude for Work/Government/Education and direct API access (including Bedrock and Vertex AI) fall under Commercial Terms and the Usage Policy instead, with no blanket age wall.

Anthropic's own policy page puts it cleanly: Claude.ai isn't offered to under-18 users, but developers on the API are bound by the Usage Policy: those serving minors face additional requirements, not a prohibition.

That's deliberate design, not a loophole. Anthropic updated its Usage Policy to let organizations build for minors on the API if they implement safety features and disclose the AI system to users. The operative document, Guidelines for Organizations Serving Minors, lays out four categories: age verification, content moderation and filtering, monitoring and reporting, and regulatory compliance and disclosure. There's no fixed template: what's appropriate scales with your product.

Separately, Anthropic's child safety guidance for developers spells out what's non-negotiable: the Usage Policy bans creating or distributing CSAM (including AI-generated), facilitating grooming, trafficking, or sextortion of a minor, and sexualizing minors "in any context, including fiction or roleplay," regardless of deployment size. You're responsible for your own end users misusing the product this way; Anthropic monitors API usage independently and takes its own enforcement action.

One more layer: Claude's own constitution instructs the model, absent signals otherwise, to treat messages as coming from what it calls a "relatively (but not unconditionally) trusted adult member of the public," but to adjust for strong signals of a minor. That's a useful backstop baked into training, but it isn't age verification and isn't a substitute for your own safeguards.

6. Building a Youth-Facing Product on Claude: a Checklist

If your product might have under-18 users on the Claude API rather than claude.ai, the four safeguard categories from section 5 break down into seven concrete things worth building. Three (age assurance, disclosure, monitoring) are less checklist items than small pieces of code. Here's how they wire together in a NestJS app.

The parts worth coding

Start with a guard gating the feature on your own age-assurance signal, not Anthropic's: the consumer classifiers only run against claude.ai conversations, so API traffic gets none of that by default:

import { Injectable, CanActivate, ExecutionContext, ForbiddenException } from '@nestjs/common';

type AgeBand = 'under13' | '13-17' | '18plus';

@Injectable()
export class AgeAssuranceGuard implements CanActivate {
  canActivate(context: ExecutionContext): boolean {
    const req = context.switchToHttp().getRequest();
    const ageBand: AgeBand | undefined = req.user?.ageBand;

    if (!ageBand) {
      throw new ForbiddenException('Age assurance required before using this feature.');
    }
    if (ageBand === 'under13') {
      throw new ForbiddenException('This feature is not available for this account.');
    }

    req.moderationTier = ageBand === '13-17' ? 'strict' : 'standard';
    return true;
  }
}
Enter fullscreen mode Exit fullscreen mode

ageBand comes from whatever your product does for age assurance: self-attestation, a parent or guardian flow, a KYC vendor. The Usage Policy doesn't mandate the mechanism, just that one exists and matches your risk profile.

That guard only matters if something downstream reads what it sets. Here's the controller wiring it to the service call (the piece most samples skip):

import { Controller, Post, Body, Req, UseGuards } from '@nestjs/common';
import type { Request } from 'express';
import { AgeAssuranceGuard } from './age-assurance.guard';
import { ClaudeMinorSafeService } from './claude-minor-safe.service';

interface ChatRequestDto {
  message: string;
}

interface RequestWithModeration extends Request {
  user: { id: string };
  moderationTier: 'standard' | 'strict';
}

@Controller('chat')
export class ChatController {
  constructor(private readonly claude: ClaudeMinorSafeService) {}

  @UseGuards(AgeAssuranceGuard)
  @Post()
  async chat(@Req() req: RequestWithModeration, @Body() dto: ChatRequestDto): Promise<{ reply: string }> {
    const reply = await this.claude.reply(dto.message, req.moderationTier, req.user.id);
    return { reply };
  }
}
Enter fullscreen mode Exit fullscreen mode

Inside reply(), disclosure and moderation both key off that same moderationTier, since both depend on who's on the other end:

import { Injectable } from '@nestjs/common';
import Anthropic from '@anthropic-ai/sdk';
import { AuditLogService } from './audit-log.service';

type ModerationTier = 'standard' | 'strict';

// Your own moderation heuristics or classifier calls go here. This list
// is illustrative, not a real safety layer on its own.
const FLAGGED_PATTERNS: RegExp[] = [/meet\s?up in person/i, /don't tell (your|my) parents/i];

@Injectable()
export class ClaudeMinorSafeService {
  private readonly client = new Anthropic();

  constructor(private readonly auditLog: AuditLogService) {}

  async reply(userMessage: string, moderationTier: ModerationTier, userId: string): Promise<string> {
    const disclosure =
      'You are an AI assistant, not a human; say so plainly if asked. ' +
      (moderationTier === 'strict'
        ? 'This user is a teenager. Keep responses age-appropriate: no mature themes, ' +
          'no unsupervised meetup suggestions, no requests for personal contact details.'
        : '');

    const response = await this.client.messages.create({
      model: 'claude-sonnet-5',
      max_tokens: 1024,
      system: disclosure,
      messages: [{ role: 'user', content: userMessage }],
    });

    const block = response.content[0];
    const text = block?.type === 'text' ? block.text : '';

    if (moderationTier === 'strict' && this.looksFlaggable(userMessage, text)) {
      await this.auditLog.record({ userId, userMessage, reply: text, reason: 'strict-tier pattern match' });
    }

    return text;
  }

  private looksFlaggable(input: string, output: string): boolean {
    return FLAGGED_PATTERNS.some((pattern) => pattern.test(input) || pattern.test(output));
  }
}
Enter fullscreen mode Exit fullscreen mode

FLAGGED_PATTERNS is deliberately weak: a placeholder, not a moderation system; route this to a real classifier past prototype stage. What matters structurally is that a flagged interaction goes somewhere a human can act on it (the piece most implementations skip):

import { Inject, Injectable, Logger } from '@nestjs/common';
import { randomUUID } from 'crypto';

interface FlaggedInteraction {
  userId: string;
  userMessage: string;
  reply: string;
  reason: string;
}

// Wherever your restricted-access review store actually lives -- a
// dedicated table, a queue, a ticketing system. Full conversation
// content belongs only here, never in general application logs.
export interface ReviewQueue {
  enqueue(caseId: string, entry: FlaggedInteraction): Promise<void>;
}

@Injectable()
export class AuditLogService {
  private readonly logger = new Logger(AuditLogService.name);

  constructor(@Inject('REVIEW_QUEUE') private readonly reviewQueue: ReviewQueue) {}

  async record(entry: FlaggedInteraction): Promise<void> {
    const caseId = randomUUID();
    await this.reviewQueue.enqueue(caseId, entry);
    // The application log gets a case ID only -- never the minor's
    // message or Claude's reply. Those live in the restricted queue above.
    this.logger.warn('Flagged interaction queued for review', { caseId, reason: entry.reason });
  }
}
Enter fullscreen mode Exit fullscreen mode

Notice what doesn't happen: the raw conversation never touches the application logger, only a case ID does. Logging a minor's actual message into general-purpose logs would be its own compliance problem. ReviewQueue is wherever your trust-and-safety process actually watches; a flagged interaction nobody reviews creates a paper trail showing you knew and didn't act, worse than not detecting it.

The rest is process, not code

  • Map your COPPA, GDPR-K, and state-law obligations before you ship: these vary by where your users are, not your company.

  • Treat the Guidelines for Organizations Serving Minors as a floor, not a template: the specifics are on you.

  • Don't assume Claude's defaults fit your audience: baseline safety training is calibrated for a general adult; your moderation tier has to do the rest.

  • Decide who owns escalation before you need them: wiring up the service is easy, having someone actually watch it is what teams skip.

7. How This Compares: OpenAI and Google

OpenAI took a different shape from the same December 2025 news cycle: rather than a hard wall, it updated ChatGPT's Model Spec with new principles for detected users under 18: age-tiered defaults for 13-17, safety prioritized over other goals, use prohibited outright only under 13. Age indication at sign-up has historically been voluntary, versus Anthropic's classifier-driven approach to catching self-IDs after the fact.

Google goes further the other way: Gemini reaches under-13 children via supervised Family Link accounts, plus a separate "teen experience" for 13-17-year-olds on their own accounts, the most permissive of the three, not a middle path.

The pattern: on the consumer side the three companies landed in genuinely different places: hard wall, age-tiered access, supervised access. On the developer side, all three converge on the same idea: build safeguards for whatever audience you're actually serving, since the consumer-facing rules won't do it for you.

8. The Regulatory Backdrop

None of this is a vacuum: the EU's Digital Services Act, Australia's under-16 ban (since December 2025), Malaysia's Online Safety Act (since January 2026, with an under-16 ban and eKYC mandate), and a US state-law wave tracing to Utah's 2023 Social Media Regulation Act (the same wave behind the app-store signal in section 2) all point one way: Anthropic is getting ahead of a locked-in trend, not inventing one. Context for section 3's enforcement problems, not an excuse for them.

9. What This Means for Your Roadmap

Two separate systems: the 18+ wall on Claude.ai is real, actively enforced, and (based on the false-positive wave) still rough. None of it applies to what you build on the API. If your product might reach a minor, you're not blocked; you're handed specific obligations under the Usage Policy and the Guidelines for Organizations Serving Minors, and implementing them is on you, not Anthropic's classifiers.

Given how fast the regulatory backdrop moves (the EU, Australia, Malaysia, a growing list of US states), the durable move is decoupling your own age-verification and consent layer from whatever Anthropic's consumer product is doing at any given moment. Build to the direction of travel, not today's ruleset, and revisit the linked sources periodically: every policy here has already changed at least once in the past year.

Mermaid Diagram

Two governance tracks: Consumer Terms with the 18+ wall versus Commercial Terms under the Usage Policy.


Published via ZyVOP — Write once in Markdown, auto-backup to GitHub, and syndicate to Dev.to, Medium & Hashnode in 1 click.

Top comments (0)