AI Certificates

Developers

Calling this site from code

Everything public here is available as JSON or markdown. No key, no signup, no rate limit worth worrying about if you are reading rather than writing.

Start here

Guides as markdown

Every study guide has a markdown source and will hand it over rather than making you parse the page. Two equivalent ways to ask:

Both return text/markdown and carry Vary: Accept, so a shared cache will not hand you the HTML by accident. Guide slugs are listed in llms.txt.

Practice inside Claude or ChatGPT

There is an MCP server, so an assistant can quiz you directly. It speaks Streamable HTTP and offers four tools: list_exams, get_practice_question, check_answer and my_progress.

There are two endpoints, and which one you want depends on what you have.

The second one exists because a client only offers to sign you in after a server has refused it once, and the open endpoint never refuses anybody. Point at the one that matches what you own.

There is a page for this with the steps laid out per client: Practice inside Claude or ChatGPT.

Connecting it

Paste into an assistant and it will walk you through your own client.

Claude Code. claude mcp add --transport http ai-certificates https://aicertificates.study/api/mcp/full, then authenticate it from /mcp.

claude.ai. Customize → Connectors → +→ Add custom connector, then paste the URL. Advanced settings can stay empty — the server describes its own sign-in. Free plans get one custom connector; on Team and Enterprise an Owner adds it once under Organization settings → Connectors and everyone else then clicks Connect.

ChatGPT.Turn on Developer mode under Settings → Security and login, then add a plugin, choose Public endpoint and paste the URL. OpenAI notes that developer mode depends on your account and workspace policy, so it is not available on every plan.

Sign-in is handled by Clerk over OAuth 2.1 with PKCE; the endpoint advertises itself at /.well-known/oauth-protected-resource so a client can discover the rest without being told.

Browser-based clients are welcome: the endpoint answers CORS preflight and allows any origin, and it deliberately does not send Access-Control-Allow-Credentials. A page you did not open therefore cannot borrow your session cookie to read your sets — identity has to arrive as a bearer token whoever is calling chose to hold.

Answers recorded through the authenticated endpoint are the outcome only — which question, which domain, right or wrong. No conversation is stored. The privacy page says what is kept and how to have it deleted.

Readiness statistics

GET /api/readiness-stats returns the current monthly cohort statistics for every exam in one body. It takes no parameters and is cached for five minutes.

Read show first. An exam with too few attempts to report honestly returns { "show": false } and no other fields — that is a real answer, not an error, and inventing a number to fill the gap is exactly what the flag exists to prevent. The readiness quiz is 12 questions and 8 answered is the minimum for a percentile.

Valid exam slugs: ccar-p ccdv-f ccao-f ccar-f

Errors

Every API error is JSON with the same shape: a machine-readable code, a human message, a hint naming the fix, and retryable telling you whether backing off can help. A 400 will never pass however long you wait; a 429 or 503 will.

Ground rules

Something missing?

If you need an endpoint that does not exist, say what you are building — the contact page has the address.