For AI agents
Certification exams as data: 343 current exams from 26 vendors, 341 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": 348,
"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-11-06",
"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-11-06",
"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": 26,
"vendors": [
{
"slug": "oracle",
"name": "Oracle",
"active": 48,
"minPrice": null,
"maxPrice": null,
"renewalPolicy": ""
}
]
}/api/changes
curl -s "https://certifications.fru.dev/api/changes?since=2026-01-01&limit=3"{
"count": 341,
"changes": [
{
"id": 110,
"cert": "atlassian-jira-administration-for-cloud",
"field": "version",
"old": "ACP-120 Exam Topics V2 (April 2025)",
"new": "Updated exam with select Managing Jira Projects for Cloud content",
"date": "2027-01-01",
"sourceUrl": "https://community.atlassian.com/learning/certifications/managing-jira-projects-for-cloud-certification",
"note": "Official page says the updated exam will be available in January 2027 (day not stated); Managing Jira Projects for Cloud (ACP-620) retires the same month and is half price until then.",
"foundBy": "official",
"review": "ok"
}
]
}/api/companies
curl -s "https://certifications.fru.dev/api/companies?since=2026-09-01"{
"companies": [
{
"slug": "oracle",
"name": "Oracle",
"domain": "oracle.com",
"site": "certifications",
"url": "https://certifications.fru.dev/vendors/oracle",
"updated_at": "2026-11-06 09:46:23",
"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.