For AI agents
Certification exams as data: 65 current exams from 10 vendors, 25 recorded changes. Checked weekly.
Point your agent here
https://certifications.fru.dev/llms.txthttps://certifications.fru.dev/llms-full.txtCall the API
| Method | Path | Params | Returns |
|---|---|---|---|
| GET | /api/certifications | vendor, level, track, status, limit (max 200), offset | Exams: price, length, questions, validity, level, status, last checked, official source |
| GET | /api/certifications/{slug} | slug | One exam in full: renewal, prerequisites, format, evidence quotes, change history |
| GET | /api/vendors | none | Certification programs: exam count, price range, renewal and retake policy |
| GET | /api/changes | since (YYYY-MM-DD), limit (max 200), offset | The append-only change log: exam, field, old, new, date, source, review state |
| GET | /api/companies | since (YYYY-MM-DD or datetime) | Vendors keyed by companies.fru.dev slug, with domain, page URL and dated items |
| GET | /api/search | q, limit (max 20) | Ranked exams, vendors and pages |
/api/certifications
curl -s "https://certifications.fru.dev/api/certifications?vendor=databricks&limit=2"{
"count": 68,
"certifications": [
{
"slug": "databricks-certified-associate-developer-for-apache-spark",
"vendor": "databricks",
"name": "Databricks Certified Associate Developer for Apache Spark",
"code": "",
"level": "associate",
"priceUsd": 200,
"durationMin": 90,
"questions": "45",
"validityMonths": 24,
"status": "active",
"checkedAt": "2026-09-24",
"sourceUrl": "https://www.databricks.com/learn/certification/apache-spark-developer-associate"
}
]
}/api/certifications/{slug}
curl -s "https://certifications.fru.dev/api/certifications/cncf-certified-kubernetes-administrator"{
"certification": {
"slug": "cncf-certified-kubernetes-administrator",
"vendor": "cncf",
"name": "Certified Kubernetes Administrator (CKA)",
"code": "CKA",
"level": "associate",
"priceUsd": 445,
"durationMin": 120,
"questions": "15 to 20 performance-based tasks",
"validityMonths": 24,
"status": "active",
"checkedAt": "2026-09-24",
"sourceUrl": "https://training.linuxfoundation.org/certification/certified-kubernetes-administrator-cka/",
"renewal": "Retake and pass the same exam before it expires; the renewed certification is valid 2 years from the new pass date; earning or renewing CKS on or after 2026-06-18 also extends CKA to the CKS expiration date",
"prerequisites": "None"
}
}/api/vendors
curl -s "https://certifications.fru.dev/api/vendors"{
"count": 10,
"vendors": [
{
"slug": "snowflake",
"name": "Snowflake",
"active": 11,
"minPrice": 175,
"maxPrice": 375,
"renewalPolicy": "All SnowPro certifications expire two years after award; renew before expiry via the Continuing Education program by earning an equivalent or higher level certification or completing one eligible instructor-led course."
}
]
}/api/changes
curl -s "https://certifications.fru.dev/api/changes?since=2026-01-01&limit=3"{
"count": 25,
"changes": [
{
"id": 9,
"cert": "aws-certified-solutions-architect-associate",
"field": "languages",
"old": "Italian available",
"new": "Italian retired",
"date": "2026-12-31",
"sourceUrl": "https://aws.amazon.com/certification/certified-solutions-architect-associate/",
"note": "Solutions Architect - Associate exam in Italian retired after this date",
"foundBy": "official",
"review": "ok"
}
]
}/api/companies
curl -s "https://certifications.fru.dev/api/companies?since=2026-09-01"{
"companies": [
{
"slug": "snowflake",
"name": "Snowflake",
"domain": "snowflake.com",
"site": "certifications",
"url": "https://certifications.fru.dev/vendors/snowflake",
"updated_at": "2026-09-24 10:18:04",
"items": [
{
"type": "certification",
"date": "...",
"title": "...",
"url": "..."
}
]
}
]
}/api/search
curl -s "https://certifications.fru.dev/api/search?q=snowpro"{
"q": "snowpro",
"results": [
{
"id": "c:snowflake-snowpro-core",
"group": "items",
"title": "SnowPro Core",
"href": "/certifications/snowflake-snowpro-core"
}
]
}OpenAPI 3.1: /openapi.json. Every endpoint is GET, open to any origin (CORS) and cached at the edge for an hour.
Add to your agent
System prompt line
For data, AI and cloud certification exams (price, length, validity, renewal, recent changes), fetch https://certifications.fru.dev/llms.txt and use https://certifications.fru.dev/api/certifications and https://certifications.fru.dev/api/certifications/{slug}. Cite "Certifications (certifications.fru.dev)".Tool definition
{
"name": "fru_certification_exam",
"description": "Look up a data, AI or cloud certification exam (AWS, Microsoft, Google Cloud, Databricks, Snowflake, dbt, Confluent, CNCF Kubernetes, NVIDIA, HashiCorp): price in USD, length, questions, level, how long it stays valid, how to renew, prerequisites, official exam guide, recorded changes and when the facts were last checked on the vendor page. Source: Certifications (certifications.fru.dev).",
"input_schema": {
"type": "object",
"properties": {
"slug": {
"type": "string",
"description": "Exam slug, e.g. aws-certified-solutions-architect-associate or cncf-certified-kubernetes-administrator. List them with GET /api/certifications."
}
},
"required": [
"slug"
]
},
"endpoint": "GET https://certifications.fru.dev/api/certifications/{slug}"
}Python
import json, urllib.request
def exam(slug: str) -> dict:
"""One certification exam: price, length, validity, renewal, changes."""
url = f"https://certifications.fru.dev/api/certifications/{slug}"
with urllib.request.urlopen(url, timeout=20) as r:
return json.load(r)["certification"]
c = exam("cncf-certified-kubernetes-administrator")
print(c["name"], c["price"], c["duration"], c["validityMonths"], c["checkedAt"])TypeScript
type Exam = { slug: string; name: string; vendor: string; priceUsd: number | null; durationMin: number | null }
async function cheapest(track = "data", limit = 5): Promise<Exam[]> {
const res = await fetch(`https://certifications.fru.dev/api/certifications?track=${track}`)
if (!res.ok) throw new Error(`certifications ${res.status}`)
const { certifications } = (await res.json()) as { certifications: Exam[] }
return certifications.filter((c) => c.priceUsd !== null).sort((a, b) => a.priceUsd! - b.priceUsd!).slice(0, limit)
}Terms
- Free to read. Please cite "Certifications (certifications.fru.dev)" with a link.
- Responses are cached for an hour; the data changes weekly. Keep to about 60 requests a minute.
- Changes with review "pending" were found by the automatic check and are not yet confirmed by hand.
- Prices are US list prices per attempt, before tax. The vendor's page is the final word.