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 Make a key
Sign in, then Settings, API keys. Free, no card. It’s shown once.
pt_live_…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/queue3 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/mcpClaude 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.