PERM Tracker
Live DOL data · Automatic deadlines
Skip to main content

API and AI assistants

The federal records behind this site, as JSON for your code and as tools for Claude, Cursor and other assistants.

  1. 1 Make a key

    Sign in, then Settings, API keys. Free, no card. It’s shown once.

    pt_live_…
  2. 2 Call the API

    Send the key in a header, from your server: browsers on other sites can't call it, which keeps keys out of web pages. Every answer names its source, its date and the page it came from.

    curl -H "Authorization: Bearer YOUR_KEY" \
    https://permtracker.app/v1/queue
  3. 3 Or connect an assistant

    Add this address as a connector. It works without a key; a key gives an assistant your own limits.

    https://permtracker.app/mcp

Free plan

A minute
10
A day
300
A month
3,000
Keys
1

Calls, counted per account and reset at midnight UTC. Need more? Write to us.

Endpoints

All GET, all under https://permtracker.app/v1. The OpenAPI description has the same list for tools that read it.

Endpoint What it answers Example
/cases/{caseNumber} One case by number: its status, filing date, employer and, once decided, DOL's record. Covers PERM, prevailing wage, H-1B LCA and H-2A/H-2B. /cases/G-100-26045-123456
/estimate When a pending PERM case is likely to be decided, with the range, the model and its caveats. An estimate, not a promise. /estimate?filed=2026-02-15
/queue DOL's processing times (the month each queue is working on, average days) and the pending PERM cases by filing month. /queue
/visa-bulletin A visa bulletin's employment and family charts, as printed. The newest by default. /visa-bulletin?month=2026-10
/employers Search employers by name. Each result carries its PERM record and its page's name for /employers/{slug}. /employers?q=acme
/employers/{slug} One employer's PERM record: cases, certified and denied, median days to decision, filings in the last 12 months, and how many of its cases are pending at DOL now, by stage. /employers/google-llc
/law-firms Search law firms by name. /law-firms?q=fragomen
/law-firms/{slug} One law firm's PERM record, and how many of its cases are pending at DOL now, by stage. /law-firms/fragomen-del-rey-bernsen-loewy-llp
/occupations Search occupations by title. /occupations?q=software
/occupations/{slug} One occupation's PERM record, with its SOC code and median offered wage. /occupations/software-developers
/me Your key's plan, its limits and what you've used today and this month. Not counted. /me
The shape of every answer
{
  "data": { ... },
  "meta": {
    "source": "Who published the records",
    "asOf": "YYYY-MM-DD, the date the data is true for",
    "url": "The page on permtracker.app showing the same thing"
  }
}

Headers carry the limits: RateLimit-Remaining for the minute, X-Calls-Today and X-Calls-Month as used out of allowed.

Errors

Every error is JSON with a code and a sentence saying what happened and what to do.

400 bad_request The request isn't valid: the message says which part. Not counted.
401 missing_key, invalid_key, revoked_key No key, or one we don't recognise.
404 not_found No such record. Counted, because the lookup ran.
429 rate_limited, daily_limit, monthly_limit A limit. Retry-After says how many seconds until it lifts.
503 unavailable, busy A source isn't loaded, or the site is busy. Try again shortly.

AI assistants

Six read-only tools over the Model Context Protocol. Each calls the same code as its endpoint, so an assistant and the API can’t disagree.

  • lookup_case

    One case by number, any of the four programs.

  • estimate_decision

    When a pending PERM case is likely to be decided.

  • queue_status

    DOL's processing times and the pending queue by filing month.

  • visa_bulletin

    A visa bulletin's charts, the newest by default.

  • search_sponsors

    Find an employer, law firm or occupation by name.

  • employer_profile

    One employer's, law firm's or occupation's PERM record, and its cases pending at DOL now.

Claude

Add a custom connector with this address. No key needed.

https://permtracker.app/mcp

Claude Code

The header is optional.

claude mcp add --transport http permtracker \
https://permtracker.app/mcp \
--header "Authorization: Bearer YOUR_KEY"

Cursor

In mcp.json.

{
  "mcpServers": {
    "permtracker": {
      "url": "https://permtracker.app/mcp",
      "headers": {
        "Authorization": "Bearer YOUR_KEY"
      }
    }
  }
}

The rules

Use it under the API terms. Credit “PERM Tracker (permtracker.app)” where you show what it returns, keep your key out of public code, and don’t use it to copy the whole compilation. The records come from DOL and the State Department; estimates are ours and say so.