AI Resilience API & MCP

API v1.0

Free, 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-06-19

API Playground

/ext/api/career/

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

GET https://www.airesilience.org/ext/api/career/{code}

Path Parameter

ParameterTypeDescription
codestringSOC 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

FieldTypeDescription
data.codestringSOC code
data.namestringCareer name
data.nameShortstringShort display name
data.slugstringURL slug used on airesilience.org
data.levelstringSOC hierarchy level: "major", "minor", "broad", or "detailed"
data.descriptionstringPlain-text occupation description
data.urlstringLink to the full career report page
data.lastUpdatedstringDate (YYYY-MM-DD) of the latest data snapshot

aiResilience

FieldTypeDescription
data.aiResilience.scorenumberCombined AI resilience score (0-1, higher = more resilient)
data.aiResilience.labelstringOne 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.confidencestringConfidence level (High, Medium-high, Medium, Low-medium, Low)
data.aiResilience.explanationstringHuman-readable explanation of the resilience label

airm (AI Resilience Model)

FieldTypeDescription
data.airm.versionstringAI Resilience Model version (e.g., "v1.5"). See the Changelog for version history.
data.airm.percentilenumberCareerVillage internal model percentile (0-1)
data.airm.labelstring"High", "Medium", or "Low"
data.airm.rawScorenumberRaw weighted percentile from the CV model

sources

Per-source signals that feed the combined resilience score. Percentiles are 0-1 within their respective populations.

FieldTypeDescription
data.sources.anthropicobjectAnthropic Economic Index: percentile, rawScore
data.sources.microsoftobjectMicrosoft AI Applicability: percentile, rawScore
data.sources.wrtmjobjectWill Robots Take My Job: percentile, label, riskPercent, growth, volume
data.sources.althoffobjectAlthoff wage-bill exposure: wageBillPercentile
data.sources.manningobjectManning adaptive capacity: adaptiveCapacityPercentile
data.sources.blsOpportunityobjectBLS opportunity: score, label

subscores

FieldTypeDescription
data.subscores.meaningfulHumanContributionobjectscore (0-1), label (High/Medium/Low)
data.subscores.sustainedEconomicOpportunityobjectscore (0-1), label (High/Medium/Low)

stepsToTake

FieldTypeDescription
data.stepsToTakestring[]AI-generated suggested actions for students. Empty array when not available.

tasks

Populated for detailed occupations only. Sorted by automationLikelihood ascending (most resilient first).

FieldTypeDescription
data.tasks[].idstringO*NET task ID
data.tasks[].taskstringTask description
data.tasks[].taskTypestring"Core" or "Supplemental"
data.tasks[].automationLikelihoodnumber0-1; lower = more resilient
data.tasks[].resilienceScorenumberConvenience: 1 − automationLikelihood
data.tasks[].analysisDatestringDate the automation estimate was generated (ISO 8601)

laborMarket

BLS employment and wage data. Employment counts are absolute (not in thousands).

FieldTypeDescription
data.laborMarket.medianWagenumber | stringAnnual median wage in USD (string for capped ">= $239,200" values)
data.laborMarket.employment2024numberTotal jobs in 2024
data.laborMarket.employment2034numberProjected total jobs in 2034
data.laborMarket.employmentChangePctnumberProjected % change in employment 2024-2034
data.laborMarket.annualOpeningsnumberProjected average annual openings
data.laborMarket.educationRequiredstringTypical entry-level education
data.laborMarket.experienceRequiredstringRequired work experience
data.laborMarket.trainingRequiredstringOn-the-job training requirements
data.laborMarket.dataSourcestring"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.

FieldTypeDescription
data.hierarchy.parents.majorobjectSOC Major Group parent
data.hierarchy.parents.minorobjectSOC Minor Group parent
data.hierarchy.parents.broadobjectSOC Broad Occupation parent
data.hierarchy.siblingsobject[]Related careers sharing the same parent and level
data.hierarchy.childrenobject[]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.

GET https://www.airesilience.org/ext/api/careers

Query Parameters

All parameters are optional. When neither page nor pageSize is supplied, the endpoint returns the full unpaginated list.

ParameterTypeDescription
pageinteger1-indexed page number. Triggers paginated response.
pageSizeintegerItems per page. Default 100, max 500. Triggers paginated response.
levelstringFilter by SOC hierarchy level: major, minor, broad, detailed.
labelstringFilter by resilience label. One of the 6 labels (URL-encode spaces): "Highly Resilient", "Resilient", "Mostly Resilient", "Somewhat Resilient", "Not Very Resilient", "Vulnerable".

Response Fields

FieldTypeDescription
data[]object[]Array of career summaries, sorted by SOC code ascending
data[].codestringSOC code
data[].namestringCareer name
data[].slugstringURL slug
data[].levelstringSOC hierarchy level
data[].urlstringLink to the career report page
data[].aiResilience.scorenumberCombined AI resilience score (0-1, higher = more resilient)
data[].aiResilience.labelstringOne of the 6 resilience labels
data[].aiResilience.confidencestringConfidence level
meta.totalnumberTotal matching careers after filters
meta.lastUpdatedstringDate (YYYY-MM-DD) of the latest data snapshot
meta.pagenumberPaginated responses only
meta.pageSizenumberPaginated responses only
meta.totalPagesnumberPaginated responses only
meta.hasMorebooleanPaginated 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"
  }
}

Search Endpoint

Search occupations by title keyword. Returns the same summary shape as the bulk endpoint, ranked by where the match occurs (earlier in the title = higher rank).

GET https://www.airesilience.org/ext/api/careers/search?q={keyword}

Query Parameters

ParameterTypeDescription
qstringRequired. Search keyword (min 2 chars). Case-insensitive substring match against career name and short name.
limitintegerMax results. Default 50, max 200.
levelstringOptional filter by SOC level: major, minor, broad, detailed.

Example Response

GET /ext/api/careers/search?q=software&limit=2

{
  "success": true,
  "data": [
    {
      "code": "15-1252.00",
      "name": "Software Developers",
      "slug": "software-developers",
      "level": "detailed",
      "url": "https://www.airesilience.org/career/software-developers",
      "aiResilience": { "score": 0.62, "label": "Mostly Resilient", "confidence": "High" }
    },
    {
      "code": "15-1253.00",
      "name": "Software Quality Assurance Analysts and Testers",
      "slug": "software-quality-assurance-analysts-and-testers",
      "level": "detailed",
      "url": "https://www.airesilience.org/career/software-quality-assurance-analysts-and-testers",
      "aiResilience": { "score": 0.58, "label": "Mostly Resilient", "confidence": "Medium-high" }
    }
  ],
  "meta": {
    "query": "software",
    "total": 7,
    "limit": 2,
    "truncated": true,
    "lastUpdated": "2026-05-16"
  }
}

Tasks Endpoint

Tasks-only view of a single occupation. Returns the same tasks array as the single-career endpoint, plus minimal occupation identity. Useful when you only need task-level resilience scores and want a smaller payload.

GET https://www.airesilience.org/ext/api/career/{code}/tasks

Example Response

GET /ext/api/career/15-1252.00/tasks

{
  "success": true,
  "data": {
    "code": "15-1252.00",
    "name": "Software Developers",
    "slug": "software-developers",
    "level": "detailed",
    "url": "https://www.airesilience.org/career/software-developers",
    "tasks": [
      {
        "id": "1",
        "task": "Confer with systems analysts, engineers, programmers and others...",
        "taskType": "Core",
        "automationLikelihood": 0.18,
        "resilienceScore": 0.82,
        "analysisDate": "2026-05-16"
      }
    ]
  }
}

Report Endpoint

The narrative "Career Report" for an occupation — the written analysis shown on the career page. Returns an ordered array of content sections: the AI resilience summary, the deep-research analysis paragraphs, the AI replacement verdict, and suggested actions. Section content is markdown-formatted text.

GET https://www.airesilience.org/ext/api/career/{code}/report

Response Fields

Alongside the occupation identity (code, name, slug, level, reportUrl), the content lives in data.careerReport, an ordered array of sections.

FieldTypeDescription
data.careerReport[].typestringSection type: "Summary", "resilienceParagraph", "replacementVerdict", or "suggestedActions"
data.careerReport[].titlestringDisplay heading for the section
data.careerReport[].contentstringSection body as markdown-formatted text

Example Response

GET /ext/api/career/15-1252.00/report

{
  "success": true,
  "data": {
    "code": "15-1252.00",
    "name": "Software Developers",
    "slug": "software-developers",
    "level": "detailed",
    "reportUrl": "https://www.airesilience.org/career/software-developers",
    "careerReport": [
      {
        "type": "Summary",
        "title": "AI Resilience Summary",
        "content": "Software developers are mostly resilient to AI impacts..."
      },
      {
        "type": "resilienceParagraph",
        "title": "How is AI changing Software Developers jobs?",
        "content": "How is AI changing Software Developers jobs?\n\nRight now, AI in software development is leaning much more toward augmentation than full automation..."
      },
      {
        "type": "replacementVerdict",
        "title": "AI Replacement Verdict",
        "content": "Will AI replace software developers? Not in the near term..."
      },
      {
        "type": "suggestedActions",
        "title": "Suggested Actions",
        "content": "- Build a portfolio of end-to-end projects...\n- Develop fluency with AI-assisted coding tools..."
      }
    ]
  }
}

Error Responses

StatusCodeDescription
400INVALID_SOC_CODESOC code doesn't match expected format
400INVALID_LEVELBulk endpoint: level must be one of major, minor, broad, detailed
400INVALID_LABELBulk endpoint: label must be one of the 6 resilience labels
400INVALID_PAGEBulk endpoint: page must be a positive integer (1-indexed)
400INVALID_PAGE_SIZEBulk endpoint: pageSize must be between 1 and 500
400INVALID_QUERYSearch endpoint: q is required and must be at least 2 characters
400INVALID_LIMITSearch endpoint: limit must be between 1 and 200
404CAREER_NOT_FOUNDNo career exists for the given SOC code
429RATE_LIMITEDExceeded 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

ToolInputDescription
lookup_careerlookup_careercode (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-06-22

report endpoint

Added the narrative career-report endpoint.

  • Added GET /ext/api/career/{code}/report. Returns the written career report as an ordered careerReport array of { type, title, content } sections.
  • Section types: Summary, resilienceParagraph (analysis Q&A), replacementVerdict, and suggestedActions. Content is markdown-formatted text.

2026-06-09

search + tasks endpoints

Two new endpoints plus internal usage analytics.

  • Added GET /ext/api/careers/search?q=. Title/keyword search. Supports limit (default 50, max 200) and level filter. Returns the same summary shape as the bulk endpoint.
  • Added GET /ext/api/career/{code}/tasks. Tasks-only view of an occupation, smaller payload than the full single-career endpoint.
  • New 400 error codes: INVALID_QUERY, INVALID_LIMIT.
  • Internal: per-endpoint usage counters now tracked in Upstash Redis. MCP traffic is bucketed separately via the User-Agent header (ai-resilience-mcp). No user-visible change.

2026-05-26

bulk endpoint

Added 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.0

Formally 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-Version response 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 response

Significantly expanded the response with additional data exposed from the site. All previously-existing fields are unchanged.

  • Added data.sources with 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.tasks with task-level automation likelihood / resilience scores (detailed occupations only).
  • Added data.laborMarket with 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, and data.description.

2026-05-26

airm v1.5
  • Breaking: Renamed data.cvModel to data.airm in the response.
  • Added data.airm.version field reporting the AI Resilience Model version.

Questions? Contact us at air@careervillage.org.

Share your feedback

The AI Resilience Report is a project from CareerVillage.org®, a registered 501(c)(3) nonprofit.

Built with ❤️ by Sandbox Web

The AI Resilience Report is governed by CareerVillage.org’s Privacy Policy and Terms of Service. This site is not affiliated with Anthropic, Microsoft, or any other data provider and doesn't necessarily represent their viewpoints. This site is being actively updated, and may sometimes contain errors or require improvement in wording or data. To report an error or request a change, please contact air@careervillage.org.