AI Resilience API & MCP
API v1.0Free, public API for AI career resilience data. No API key required. Rate limited to 100 requests per minute per IP.
Full Dataset Download
Bulk CSV export of the latest quarterly snapshot — all scored occupations, sub-scores, and per-source values. Licensed under CC BY 4.0.
1,597 careers · Snapshot: 2026-05-19
API Playground
This API uses 2019 SOC codes. You can look up codes at bls.gov/soc.
Resilience scores are generated by the AI Resilience Model v1.5 (returned as data.airm.version). See the Changelog for version history.
Single-Career Endpoint
Path Parameter
| Parameter | Type | Description |
|---|---|---|
| code | string | SOC code in format XX-XXXX or XX-XXXX.XX |
Response Format
Success (200)
Fields are grouped by concern. All numeric scores are on a 0-1 scale unless otherwise noted. Any field can be null when the underlying data is unavailable for that occupation.
Core
| Field | Type | Description |
|---|---|---|
| data.code | string | SOC code |
| data.name | string | Career name |
| data.nameShort | string | Short display name |
| data.slug | string | URL slug used on airesilience.org |
| data.level | string | SOC hierarchy level: "major", "minor", "broad", or "detailed" |
| data.description | string | Plain-text occupation description |
| data.url | string | Link to the full career report page |
| data.lastUpdated | string | Date (YYYY-MM-DD) of the latest data snapshot |
aiResilience
| Field | Type | Description |
|---|---|---|
| data.aiResilience.score | number | Combined AI resilience score (0-1, higher = more resilient) |
| data.aiResilience.label | string | One of: "Highly Resilient" (80.1-100%), "Resilient" (65.1-80%), "Mostly Resilient" (50.1-65%), "Somewhat Resilient" (35.1-50%), "Not Very Resilient" (22.1-35%), or "Vulnerable" (0-22%) |
| data.aiResilience.confidence | string | Confidence level (High, Medium-high, Medium, Low-medium, Low) |
| data.aiResilience.explanation | string | Human-readable explanation of the resilience label |
airm (AI Resilience Model)
| Field | Type | Description |
|---|---|---|
| data.airm.version | string | AI Resilience Model version (e.g., "v1.5"). See the Changelog for version history. |
| data.airm.percentile | number | CareerVillage internal model percentile (0-1) |
| data.airm.label | string | "High", "Medium", or "Low" |
| data.airm.rawScore | number | Raw weighted percentile from the CV model |
sources
Per-source signals that feed the combined resilience score. Percentiles are 0-1 within their respective populations.
| Field | Type | Description |
|---|---|---|
| data.sources.anthropic | object | Anthropic Economic Index: percentile, rawScore |
| data.sources.microsoft | object | Microsoft AI Applicability: percentile, rawScore |
| data.sources.wrtmj | object | Will Robots Take My Job: percentile, label, riskPercent, growth, volume |
| data.sources.althoff | object | Althoff wage-bill exposure: wageBillPercentile |
| data.sources.manning | object | Manning adaptive capacity: adaptiveCapacityPercentile |
| data.sources.blsOpportunity | object | BLS opportunity: score, label |
subscores
| Field | Type | Description |
|---|---|---|
| data.subscores.meaningfulHumanContribution | object | score (0-1), label (High/Medium/Low) |
| data.subscores.sustainedEconomicOpportunity | object | score (0-1), label (High/Medium/Low) |
stepsToTake
| Field | Type | Description |
|---|---|---|
| data.stepsToTake | string[] | AI-generated suggested actions for students. Empty array when not available. |
tasks
Populated for detailed occupations only. Sorted by automationLikelihood ascending (most resilient first).
| Field | Type | Description |
|---|---|---|
| data.tasks[].id | string | O*NET task ID |
| data.tasks[].task | string | Task description |
| data.tasks[].taskType | string | "Core" or "Supplemental" |
| data.tasks[].automationLikelihood | number | 0-1; lower = more resilient |
| data.tasks[].resilienceScore | number | Convenience: 1 − automationLikelihood |
| data.tasks[].analysisDate | string | Date the automation estimate was generated (ISO 8601) |
laborMarket
BLS employment and wage data. Employment counts are absolute (not in thousands).
| Field | Type | Description |
|---|---|---|
| data.laborMarket.medianWage | number | string | Annual median wage in USD (string for capped ">= $239,200" values) |
| data.laborMarket.employment2024 | number | Total jobs in 2024 |
| data.laborMarket.employment2034 | number | Projected total jobs in 2034 |
| data.laborMarket.employmentChangePct | number | Projected % change in employment 2024-2034 |
| data.laborMarket.annualOpenings | number | Projected average annual openings |
| data.laborMarket.educationRequired | string | Typical entry-level education |
| data.laborMarket.experienceRequired | string | Required work experience |
| data.laborMarket.trainingRequired | string | On-the-job training requirements |
| data.laborMarket.dataSource | string | "direct", "mapped_via_crosswalk", "aggregated_from_children", or "inherited_from_parent" |
hierarchy
SOC hierarchy relationships. Each reference is a minimal {code, name, slug, url} object.
| Field | Type | Description |
|---|---|---|
| data.hierarchy.parents.major | object | SOC Major Group parent |
| data.hierarchy.parents.minor | object | SOC Minor Group parent |
| data.hierarchy.parents.broad | object | SOC Broad Occupation parent |
| data.hierarchy.siblings | object[] | Related careers sharing the same parent and level |
| data.hierarchy.children | object[] | Direct children. Empty for detailed-level occupations. |
Example Response
{
"success": true,
"data": {
"code": "15-1252.00",
"name": "Software Developers",
"nameShort": "Software Developers",
"slug": "software-developers",
"level": "detailed",
"description": "Develop, create, and modify general computer applications software...",
"url": "https://www.airesilience.org/career/software-developers",
"aiResilience": {
"score": 0.62,
"label": "Mostly Resilient",
"confidence": "High",
"explanation": "Software developers..."
},
"airm": {
"version": "v1.5",
"percentile": 0.45,
"label": "Medium",
"rawScore": 0.52
},
"sources": {
"anthropic": { "percentile": 0.42, "rawScore": 0.18 },
"microsoft": { "percentile": 0.38, "rawScore": 0.45 },
"wrtmj": { "percentile": 0.55, "label": "Medium", "riskPercent": "65", "growth": "...", "volume": "..." },
"althoff": { "wageBillPercentile": 0.61 },
"manning": { "adaptiveCapacityPercentile": 0.58 },
"blsOpportunity": { "score": 0.7, "label": "High" }
},
"subscores": {
"meaningfulHumanContribution": { "score": 0.65, "label": "High" },
"sustainedEconomicOpportunity": { "score": 0.70, "label": "High" }
},
"stepsToTake": [
"Build a portfolio of projects that show end-to-end problem solving...",
"Develop fluency with AI-assisted coding tools..."
],
"tasks": [
{
"id": "1",
"task": "Confer with systems analysts, engineers, programmers and others...",
"taskType": "Core",
"automationLikelihood": 0.18,
"resilienceScore": 0.82,
"analysisDate": "2026-05-16"
}
],
"laborMarket": {
"medianWage": 130160,
"employment2024": 1656000,
"employment2034": 1800000,
"employmentChangePct": 8.7,
"annualOpenings": 140100,
"educationRequired": "Bachelor's degree",
"experienceRequired": "None",
"trainingRequired": "None",
"dataSource": "direct"
},
"hierarchy": {
"parents": {
"major": { "code": "15-0000", "name": "Computer and Mathematical Occupations", "slug": "computer-and-mathematical-occupations", "url": "https://www.airesilience.org/career/computer-and-mathematical-occupations" },
"minor": { "code": "15-1200", "name": "Computer Occupations", "slug": "computer-occupations", "url": "https://www.airesilience.org/career/computer-occupations" },
"broad": { "code": "15-1250", "name": "Software and Web Developers, Programmers, and Testers", "slug": "software-and-web-developers-programmers-and-testers", "url": "https://www.airesilience.org/career/software-and-web-developers-programmers-and-testers" }
},
"siblings": [
{ "code": "15-1253.00", "name": "Software Quality Assurance Analysts and Testers", "slug": "software-quality-assurance-analysts-and-testers", "url": "https://www.airesilience.org/career/software-quality-assurance-analysts-and-testers" }
],
"children": []
},
"lastUpdated": "2026-05-16"
}
}Bulk (List) Endpoint
Returns a summary list of all occupations. Useful for syncing the dataset or building filtered views client-side. Each entry is a compact summary (resilience score, label, confidence) — for the full per-occupation payload, call the single-career endpoint with the SOC code.
Query Parameters
All parameters are optional. When neither page nor pageSize is supplied, the endpoint returns the full unpaginated list.
| Parameter | Type | Description |
|---|---|---|
| page | integer | 1-indexed page number. Triggers paginated response. |
| pageSize | integer | Items per page. Default 100, max 500. Triggers paginated response. |
| level | string | Filter by SOC hierarchy level: major, minor, broad, detailed. |
| label | string | Filter by resilience label. One of the 6 labels (URL-encode spaces): "Highly Resilient", "Resilient", "Mostly Resilient", "Somewhat Resilient", "Not Very Resilient", "Vulnerable". |
Response Fields
| Field | Type | Description |
|---|---|---|
| data[] | object[] | Array of career summaries, sorted by SOC code ascending |
| data[].code | string | SOC code |
| data[].name | string | Career name |
| data[].slug | string | URL slug |
| data[].level | string | SOC hierarchy level |
| data[].url | string | Link to the career report page |
| data[].aiResilience.score | number | Combined AI resilience score (0-1, higher = more resilient) |
| data[].aiResilience.label | string | One of the 6 resilience labels |
| data[].aiResilience.confidence | string | Confidence level |
| meta.total | number | Total matching careers after filters |
| meta.lastUpdated | string | Date (YYYY-MM-DD) of the latest data snapshot |
| meta.page | number | Paginated responses only |
| meta.pageSize | number | Paginated responses only |
| meta.totalPages | number | Paginated responses only |
| meta.hasMore | boolean | Paginated responses only. True if more pages exist. |
Example Response (paginated)
GET /ext/api/careers?level=detailed&page=1&pageSize=2
{
"success": true,
"data": [
{
"code": "11-1011.00",
"name": "Chief Executives",
"slug": "chief-executives",
"level": "detailed",
"url": "https://www.airesilience.org/career/chief-executives",
"aiResilience": {
"score": 0.78,
"label": "Resilient",
"confidence": "High"
}
},
{
"code": "11-1021.00",
"name": "General and Operations Managers",
"slug": "general-and-operations-managers",
"level": "detailed",
"url": "https://www.airesilience.org/career/general-and-operations-managers",
"aiResilience": {
"score": 0.61,
"label": "Mostly Resilient",
"confidence": "Medium-high"
}
}
],
"meta": {
"total": 867,
"page": 1,
"pageSize": 2,
"totalPages": 434,
"hasMore": true,
"lastUpdated": "2026-05-16"
}
}Error Responses
| Status | Code | Description |
|---|---|---|
| 400 | INVALID_SOC_CODE | SOC code doesn't match expected format |
| 400 | INVALID_LEVEL | Bulk endpoint: level must be one of major, minor, broad, detailed |
| 400 | INVALID_LABEL | Bulk endpoint: label must be one of the 6 resilience labels |
| 400 | INVALID_PAGE | Bulk endpoint: page must be a positive integer (1-indexed) |
| 400 | INVALID_PAGE_SIZE | Bulk endpoint: pageSize must be between 1 and 500 |
| 404 | CAREER_NOT_FOUND | No career exists for the given SOC code |
| 429 | RATE_LIMITED | Exceeded 100 requests/minute. Includes Retry-After header. |
Rate Limiting
The API is rate limited to 100 requests per minute per IP address using a sliding window. If you hit the limit, you'll receive a 429 response with a Retry-After header indicating how many seconds to wait.
CORS
This API supports cross-origin requests from any domain. You can call it directly from browser-based applications without a proxy.
MCP Server for AI Assistants
We provide a Model Context Protocol (MCP) server that wraps this API, allowing AI assistants like Claude to look up career resilience data directly. No API key required.
Install via npm: ai-resilience-mcp
Configuration
Add the following to your MCP client configuration:
Claude Desktop
Add to your claude_desktop_config.json:
{
"mcpServers": {
"ai-resilience": {
"command": "npx",
"args": ["-y", "ai-resilience-mcp"]
}
}
}Claude Code
Add to your project's .mcp.json:
{
"mcpServers": {
"ai-resilience": {
"command": "npx",
"args": ["-y", "ai-resilience-mcp"]
}
}
}Available Tool
| Tool | Input | Description | |
|---|---|---|---|
| lookup_career | lookup_career | code (SOC code) | Returns the full career payload: AI resilience score, label, confidence, explanation, AIRM data (airm), per-source signals, subscores, suggested actions, task-level resilience, labor market data, and hierarchy |
Changelog
Notable changes to the API. Breaking changes are called out explicitly.
2026-05-26
bulk endpointAdded a new bulk (list) endpoint: GET /ext/api/careers. Returns summary entries (code, name, slug, level, url, resilience score/label/confidence) for all occupations.
- Optional filters:
?level=and?label=. - Optional pagination:
?page=N&pageSize=N(default 100, max 500). When neither is supplied, returns the full unpaginated list. - New 400 error codes:
INVALID_LEVEL,INVALID_LABEL,INVALID_PAGE,INVALID_PAGE_SIZE.
2026-05-26
API v1.0Formally declared the REST API contract version as v1.0. This is distinct from the AI Resilience Model version (data.airm.version), which remains at v1.5.
- Added an
X-API-Versionresponse header on all responses so clients can detect the contract version without parsing the body. - Breaking changes to the REST contract will bump the major version (v2.0, v3.0, etc.); additive changes will bump the minor.
2026-05-26
expanded responseSignificantly expanded the response with additional data exposed from the site. All previously-existing fields are unchanged.
- Added
data.sourceswith per-source signals (Anthropic, Microsoft, WRTMJ, Althoff, Manning, BLS opportunity). - Added
data.subscores(meaningful human contribution, sustained economic opportunity). - Added
data.stepsToTake— AI-generated suggested actions for students. - Added
data.taskswith task-level automation likelihood / resilience scores (detailed occupations only). - Added
data.laborMarketwith BLS employment, wage, education, and experience data. - Added
data.hierarchy(parents, siblings, children) for navigating the SOC tree. - Added
data.lastUpdated,data.nameShort,data.slug,data.level, anddata.description.
2026-05-26
airm v1.5- Breaking: Renamed
data.cvModeltodata.airmin the response. - Added
data.airm.versionfield reporting the AI Resilience Model version.
Questions? Contact us at air@careervillage.org.
Share your feedback