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.txthttps://training.fru.dev/llms-full.txtCall the API
| Method | Path | Params | Returns |
|---|---|---|---|
| GET | /api/courses | vendor, price (free|paid), format, level, topic, cert, state, limit (max 200), offset | Official courses: vendor, format, length, price, level, topic, the certification each prepares for, official and source URLs |
| GET | /api/courses/{slug} | slug | One course in full, with the evidence quoted from its source and its change history |
| GET | /api/vendors | none | Vendor academies with course, free and certification counts |
| GET | /api/changes | since (YYYY-MM-DD or ISO), limit (max 500) | The append-only change log: price, free status, length, level, certification and retirements |
| GET | /api/companies | since (ISO), limit (max 200), offset | Vendors in the companies.fru.dev registry shape: slug, name, domain, this site’s URL and dated items |
| GET | /api/compare | v (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/catalog | vendor (one or more slugs), area, format, price (free|paid|subscription), state (retired), q, limit (max 200), offset | Every item a vendor academy lists: title, URL, format, level, length, price, areas, first seen and how that date is known |
| GET | /api/catalog/changes | since (YYYY-MM-DD or ISO), vendor, limit (max 500) | The append-only catalog log: items added, retired, back, or changed |
| GET | /api/search | q, 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.