canonical: https://jentic.com/apis/permtracker.app/permtracker

# Permtracker App PERM Tracker API

The PERM Tracker API returns US Department of Labor PERM, prevailing wage, H-1B LCA, and H-2A, H-2B and CW-1 case records as JSON. It looks up a single case by its DOL case number, estimates when a pending PERM case is likely to be decided, and reports DOL processing queues alongside the printed visa bulletin charts back to 2005. Employer, law firm, and occupation records summarise certified and denied cases, median days to decision, and median offered wage, and webhooks can watch a case number or employer for status changes.

## For AI agents

Look up DOL PERM and H-1B case records by case number, estimate PERM decision dates, read processing queues and visa bulletins, and search employer, law firm, and occupation PERM records.

## Scope

Does not file PERM or visa applications, give legal advice, or submit anything to DOL or USCIS. Use for reading DOL case records, estimates, and visa bulletin data only.

## Capabilities

- Look up a PERM, prevailing wage, or H-1B LCA case by its DOL case number, such as G-100-26045-123456
- Estimate when a pending PERM case is likely to be decided from its case number or filing date
- Read DOL processing times and pending PERM cases by filing month from the queue endpoint
- Pull the employment and family charts of a visa bulletin for any month back to 2005-06
- Search employers, law firms, and occupations by name and read their certified and denied PERM counts
- Export a full case, employer, law firm, or occupation search as CSV or JSON
- Watch a case number or employer page and receive webhook events like case.status_changed

## Use cases

### Immigration case assistant agent through Jentic

An AI agent answering an applicant's questions about a pending green card case needs DOL records, not guesswork. Through Jentic the agent searches for 'check a PERM case status', loads the PERM Tracker case lookup operation with its input schema, and reads the case's status, filing date, and employer, then calls the estimate operation for a likely decision window with its stated caveats. The bearer key is injected at call time by your own Jentic One instance.

Example prompt: Call GET `/cases/{caseNumber}` with caseNumber G-100-26045-123456, then call GET /estimate with case=G-100-26045-123456 and report the status, filing date, and estimated decision range

### Employer sponsorship research

A job seeker or recruiter comparing companies wants to know which employers sponsor PERM and how those cases fare. The employer search returns matching employers with their PERM record and page slug, and the employer detail operation reports certified and denied cases, median days to decision, filings in the last 12 months, and cases pending at DOL by stage.

Example prompt: Call GET /employers with q=Acme and limit=5, then call GET `/employers/{slug}` for the top result and summarise its certified and denied PERM cases and median days to decision

### Visa bulletin and queue tracking

Applicants waiting on a priority date track two moving numbers: the visa bulletin cut-off dates and how far DOL has worked through its PERM queue. The visa bulletin operation returns the employment and family charts as printed for a chosen month, and the queue operation returns the month each DOL queue is working on with average days.

Example prompt: Call GET /visa-bulletin with month=2026-11 and GET /queue, then report the employment-based chart and the month the PERM analyst review queue is working on

### Case watch alerts by webhook

A paralegal tracking dozens of filings wants a push when DOL changes a case's status. After adding an https webhook endpoint for the events it wants, a watch on a case number fires case.status_changed when DOL's status for that case changes, and a watch on an employer page follows that employer's filings. Webhook operations need a key with the webhooks scope.

Example prompt: Call POST /webhooks with an https endpoint for case events, then call POST /watches with case number P-100-26045-123456 and confirm the watch appears in GET /watches

## Key endpoints

| Method | Path | Description |
| --- | --- | --- |
| GET | `/cases/{caseNumber}` | Get one DOL case by number |
| GET | `/estimate` | Estimate a pending PERM decision date |
| GET | `/queue` | Get DOL processing times and pending cases |
| GET | `/visa-bulletin` | Get a visa bulletin's charts |
| GET | `/employers` | Search employers by name |
| GET | `/employers/{slug}` | Get an employer's PERM record |
| GET | `/exports/{kind}` | Export a search as CSV or JSON |
| POST | `/watches` | Watch a case number or employer |

## Key resources

- **Cases** — PERM, prevailing wage, H-1B LCA, H-2A, H-2B, and CW-1 case records looked up by DOL case number
- **Employers, law firms, and occupations** — Searchable PERM records with certified and denied counts, pending cases by stage, SOC code, and median offered wage
- **Queue and visa bulletin** — DOL processing times by queue and the printed employment and family visa bulletin charts
- **Webhooks and watches** — Endpoints, signing secrets, and watched case numbers or employers for status-change events

## AI readiness

This API is usable in Jentic One now. Its AI-readiness score against Jentic's framework shows where it stands today and where improvements would make it even easier for agents to use.

- **Score:** 40 / 100
- **Maturity:** Non-Ready
- **Dimensions:**
  - Foundational Compliance: 74 / 100
  - Developer Experience & Jentic Compatibility: 63 / 100
  - AI-Readiness & Agent Experience: 17 / 100
  - Agent Usability: 94 / 100
  - Security: 60 / 100
  - AI Discoverability: 59 / 100
- **View full report:** https://jentic.com/apis/permtracker.app/permtracker/scorecard
- **How the score is calculated:** https://docs.jentic.com/reference/api-readiness-framework/overview/
- **More about the dimensions:** https://docs.jentic.com/reference/api-readiness-framework/specification/#dimensional-model-overview

### Score it yourself

Every API in the directory is allowlisted, so you can re-score it with no key required.

- **Score your own API:** https://jentic.com/scorecard.md
- **Scoring CLI agent skill:** https://github.com/jentic/jentic-api-scorecard/blob/main/skills/jentic-api-scorecard/SKILL.md

```sh
npx @jentic/api-scorecard-cli score <openapi-url>
```

## Why Jentic

- **Setup:** Wiring PERM Tracker by hand means generating a pt_live_ key, sending it as a bearer token, and tracking which operations need the export, webhooks, or live_lookup scopes. Through Jentic you install once, import the PERM Tracker API from the API Directory, store the key once, and your agent calls it.
- **Permission scoping:** PERM Tracker puts the case number and employer slug in the URL path (`/cases/{caseNumber}`, `/employers/{slug}`), so a rule can pin your agent to the read operations it needs. You choose the operations it may call, so changes like DELETE `/webhooks/{id}` or DELETE `/watches/{target}` are not included unless you add them.
- **Credential handling:** Your PERM Tracker key is stored once, encrypted, by your own Jentic One instance and injected at execution time. It never enters the agent's prompt, logs, or context.
- **Discovery method:** Agents search Jentic by intent such as 'check a PERM case status' or 'get the latest visa bulletin', and Jentic returns the matching PERM Tracker operation with its input schema so the agent calls the right endpoint without browsing the reference docs.

## Related APIs

- **Bureau of Labor Statistics** — Federal wage and employment statistics to set alongside PERM offered wages
- **USAJOBS API** — Open US federal job announcements from the government's hiring site
- **Adzuna API** — Aggregated job listings and salary data across many job boards

## FAQ

### What authentication does the PERM Tracker API use?

The PERM Tracker API authenticates with an HTTP bearer token per its OpenAPI spec: your pt_live_ key from Settings > API keys, sent in the Authorization header. The employer lookup at GET `/lookup/employer` is open and needs no key, and some operations need extra key scopes, such as export for GET `/exports/{kind}` and webhooks for the webhook and watch operations. Through Jentic the key is stored by your own instance and attached at call time.

### Can I estimate when a pending PERM case will be decided with the PERM Tracker API?

Yes. GET /estimate takes a PERM case number in the case parameter, or a filing date in the filed parameter for a case in analyst review, and returns a likely decision range with the model and its caveats. The spec describes it as an estimate, not a promise.

### What are the rate limits for the PERM Tracker API?

Per the OpenAPI spec, the free plan allows 10 calls a minute, 300 a day, and 3,000 a month. The keyless GET `/lookup/employer` runs under shared limits of 60 calls a minute per address, and GET /me reports your key's plan, limits, and usage without counting against them. See https://permtracker.app/developers for current plan details.

### Is there a PERM Tracker MCP server?

You don't need an MCP server to give your agent the PERM Tracker API. Jentic connects it directly from the API Directory: import it, store your key once, and your agent calls the case, estimate, and employer operations on demand without loading another server's tool definitions into its context.

### How do I look up a PERM case through Jentic?

Search Jentic for 'check a PERM case status', load the GET `/cases/{caseNumber}` operation, and execute it with the case number as DOL prints it, for example G-100-26045-123456. The response carries the status, filing date, employer, and DOL's record once decided. To run it on your own infrastructure, install Jentic One from its GitHub repo.

### Can I limit what my agent is allowed to do with the PERM Tracker API?

Yes. Write a rule that allows only GET `/cases/{caseNumber}` and GET /estimate, and the agent can read case records and decision estimates while webhook and watch changes stay out of reach. Each call it makes is logged for you to review.
