Data and AI platform training

10,271 trainings · 69 hand-checked

For AI agents

Official vendor training as data: 84 courses from 13 vendors, 40 free, with an append-only change log. Refreshed weekly.

Point your agent here

https://training.fru.dev/llms.txt
https://training.fru.dev/llms-full.txt

Call the API

MethodPathParamsReturns
GET/api/coursesvendor, price (free|paid), format, level, topic, cert, state, limit (max 200), offsetOfficial courses: vendor, format, length, price, level, topic, the certification each prepares for, official and source URLs
GET/api/courses/{slug}slugOne course in full, with the evidence quoted from its source and its change history
GET/api/vendorsnoneVendor academies with course, free and certification counts
GET/api/changessince (YYYY-MM-DD or ISO), limit (max 500)The append-only change log: price, free status, length, level, certification and retirements
GET/api/companiessince (ISO), limit (max 200), offsetVendors in the companies.fru.dev registry shape: slug, name, domain, this site’s URL and dated items
GET/api/comparev (vendor slugs, comma separated; omit for all)Each vendor’s full catalog in numbers: items by area, format and price, and items added and retired per year since 2019
GET/api/catalogvendor (one or more slugs), area, format, price (free|paid|subscription), state (retired), q, limit (max 200), offsetEvery item a vendor academy lists: title, URL, format, level, length, price, areas, first seen and how that date is known
GET/api/catalog/changessince (YYYY-MM-DD or ISO), vendor, limit (max 500)The append-only catalog log: items added, retired, back, or changed
GET/api/searchq, limit (max 20)Ranked courses, vendors and pages

/api/courses

curl -s "https://training.fru.dev/api/courses?vendor=databricks&price=free&limit=2"
{
 "count": 84,
 "courses": [
  {
   "slug": "anthropic-building-with-the-claude-api",
   "vendor": "anthropic",
   "title": "Building with the Claude API",
   "format": "self-paced",
   "length": "",
   "priceUsd": 0,
   "free": true,
   "level": "",
   "cert": "",
   "url": "https://anthropic.skilljar.com/claude-with-the-anthropic-api"
  },
  {
   "slug": "anthropic-claude-code-in-action",
   "vendor": "anthropic",
   "title": "Claude Code in Action",
   "format": "self-paced",
   "length": "",
   "priceUsd": 0,
   "free": true,
   "level": "",
   "cert": "",
   "url": "https://anthropic.skilljar.com/claude-code-in-action"
  }
 ]
}

/api/courses/{slug}

curl -s "https://training.fru.dev/api/courses/microsoft-implement-data-engineering-solutions-using-microsoft-fabric-dp-700t00"
{
 "course": {
  "slug": "microsoft-build-ai-applications-with-azure-cosmos-db-dp-420t00",
  "vendor": "microsoft",
  "title": "Build AI applications with Azure Cosmos DB (DP-420T00)",
  "format": "instructor-led",
  "length": "4 days",
  "priceUsd": null,
  "free": false,
  "level": "intermediate",
  "cert": "Microsoft Certified: Azure Cosmos DB AI Developer Associate",
  "url": "https://learn.microsoft.com/en-us/training/courses/dp-420t00/",
  "sourceUrl": "https://learn.microsoft.com/api/catalog/?locale=en-us&type=courses,learningPaths",
  "evidence": "Catalog API: course_number DP-420T00, duration_in_hours 96, levels intermediate. Course page: \"Course Duration 4 days\". Related certifications: Microsoft Certif"
 },
 "changes": []
}

/api/vendors

curl -s "https://training.fru.dev/api/vendors"
{
 "count": 31,
 "vendors": [
  {
   "slug": "microsoft",
   "name": "Microsoft",
   "academy": "Microsoft Learn",
   "courses": 28,
   "free": 5
  }
 ]
}

/api/changes

curl -s "https://training.fru.dev/api/changes?since=2026-09-01"
{
 "since": "2026-09-01",
 "changes": [
  {
   "course": "microsoft-develop-ai-agents-on-azure",
   "field": "minutes",
   "old": "592",
   "new": "642",
   "changedAt": "2026-11-04 10:20:15"
  }
 ]
}

/api/companies

curl -s "https://training.fru.dev/api/companies?limit=1"
{
 "site": "training",
 "companies": [
  {
   "slug": "microsoft",
   "name": "Microsoft",
   "domain": "microsoft.com",
   "url": "https://training.fru.dev/vendors/microsoft",
   "items": "[{ date, type, title, url }]"
  }
 ]
}

/api/compare

curl -s "https://training.fru.dev/api/compare?v=snowflake,databricks"
{
 "vendors": [
  {
   "slug": "aws",
   "active": 2481,
   "free": 1592,
   "byFormat": {
    "course": 1325,
    "path": 208,
    "lab": 572,
    "video": 2,
    "class": 110,
    "badge": 11,
    "exam-prep": 253
   },
   "byArea": {
    "genai": {
     "n": 698,
     "free": 482
    }
   },
   "years": {
    "2025": {
     "added": 310,
     "retired": 161
    }
   }
  }
 ]
}

/api/catalog

curl -s "https://training.fru.dev/api/catalog?vendor=snowflake&area=genai&limit=2"
{
 "count": 10271,
 "items": [
  {
   "vendor": "aws",
   "title": ".NET Development Learning Plan (includes labs)",
   "url": "https://skillbuilder.aws/learning-plan/BZBEW423BC/net-development-learning-plan-includes-labs/33K385PCVB",
   "format": "path",
   "price": "free",
   "areas": [
    "app-dev"
   ],
   "first_seen": "2026-09-25",
   "first_how": "crawl"
  }
 ]
}

/api/catalog/changes

curl -s "https://training.fru.dev/api/catalog/changes?since=2026-09-01"
{
 "since": "2026-09-01",
 "changes": [
  {
   "item": "snowflake:g:...",
   "kind": "added",
   "title": "...",
   "changedAt": "2026-10-01 13:47:02"
  }
 ]
}

/api/search

curl -s "https://training.fru.dev/api/search?q=fabric"
{
 "q": "fabric",
 "results": [
  {
   "id": "c:...",
   "group": "items",
   "title": "Implement a Lakehouse with Microsoft Fabric",
   "href": "/courses/..."
  }
 ]
}

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 official vendor training on data and AI platforms (courses, free or paid, length, level, which certification each prepares for), fetch https://training.fru.dev/llms.txt and use https://training.fru.dev/api/courses. Cite "Training (training.fru.dev)" and link the official course page.

Tool definition

{
  "name": "fru_training_courses",
  "description": "Find official vendor training for data and AI platforms (Databricks, Snowflake, AWS, Microsoft, Google Cloud, NVIDIA, Hugging Face, DeepLearning.AI, Anthropic, OpenAI, dbt Labs, MongoDB, Confluent): format, length, price (free marked), level and the certification each course prepares for, with the official link. Source: Training (training.fru.dev).",
  "input_schema": {
    "type": "object",
    "properties": {
      "vendor": {
        "type": "string",
        "description": "Vendor slug, e.g. databricks, snowflake, aws, microsoft, google-cloud, nvidia, hugging-face. List them with GET /api/vendors."
      },
      "price": {
        "type": "string",
        "enum": [
          "free",
          "paid"
        ]
      },
      "topic": {
        "type": "string",
        "enum": [
          "generative-ai",
          "agents",
          "machine-learning",
          "data-engineering",
          "analytics",
          "databases",
          "platform"
        ]
      },
      "cert": {
        "type": "string",
        "description": "Part of a certification name, e.g. \"Data Engineer Associate\"."
      }
    }
  },
  "endpoint": "GET https://training.fru.dev/api/courses"
}

Python

import json, urllib.parse, urllib.request

def courses(**filters) -> list[dict]:
    """Official data and AI courses, e.g. courses(vendor="databricks", price="free")."""
    url = "https://training.fru.dev/api/courses?" + urllib.parse.urlencode(filters)
    with urllib.request.urlopen(url, timeout=20) as r:
        return json.load(r)["courses"]

for c in courses(topic="agents", price="free"):
    print(c["vendor"], c["title"], c["length"], c["url"])

TypeScript

type Course = { vendor: string; title: string; free: boolean; length: string; cert: string; url: string }

async function prepFor(cert: string): Promise<Course[]> {
  const res = await fetch(`https://training.fru.dev/api/courses?cert=${encodeURIComponent(cert)}`)
  if (!res.ok) throw new Error(`training ${res.status}`)
  const { courses } = (await res.json()) as { courses: Course[] }
  return courses.sort((a, b) => Number(b.free) - Number(a.free))
}

console.log(await prepFor("Data Engineer Associate"))

Usage terms

  • Free to read. Please cite "Training (training.fru.dev)" with a link.
  • Responses are cached for an hour; the data changes weekly.
  • Be polite: 60 requests a minute at most.
  • Courses marked unverified have not been checked by hand. Confirm prices on the vendor page.