Skip to content
Updated 12h ago

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.txt
https://certifications.fru.dev/llms-full.txt

Call the API

MethodPathParamsReturns
GET/api/certificationsvendor, level, track, status, limit (max 200), offsetExams: price, length, questions, validity, level, status, last checked, official source
GET/api/certifications/{slug}slugOne exam in full: renewal, prerequisites, format, evidence quotes, change history
GET/api/vendorsnoneCertification programs: exam count, price range, renewal and retake policy
GET/api/changessince (YYYY-MM-DD), limit (max 200), offsetThe append-only change log: exam, field, old, new, date, source, review state
GET/api/companiessince (YYYY-MM-DD or datetime)Vendors keyed by companies.fru.dev slug, with domain, page URL and dated items
GET/api/searchq, 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.

Exam changes by email

Thursdays, only in weeks when an exam's price, format or status changed.

Double opt-in. Unsubscribe any time.