FastDOL website screenshot

FastDOL

Federal workplace enforcement records on 2.3M US employers across 16 federal agencies — OSHA, WHD, MSHA, EPA ECHO, NLRB, FMCSA, OFLC, BLS SOII, SAM.gov, CMS, USAspending, CPSC, NHTSA, SEC, and the UVA Corporate Prosecution Registry — exposed as a single normalized JSON API. Query inspections, violations, penalties, wage theft cases, severe injury reports, federal contract awards, and recalls.

1 APIs 17 Features
OSHAComplianceWorkplace SafetyPublic RecordsFederal EnforcementLabor

APIs

FastDOL API

Unified REST API for federal workplace enforcement records — employer search and profile lookup, OSHA inspections and violations, WHD wage theft cases, severe injury reports, SE...

Collections

Pricing Plans

Fastdol Plans Pricing

2 plans

PLANS

Rate Limits

Fastdol Rate Limits

10 limits

RATE LIMITS

FinOps

Features

Unified Employer Search

Fuzzy search across 2.3M US employers by name, EIN, ZIP, state, or NAICS code with risk-ranked results.

Cross-Agency Enforcement Profile

Single employer profile aggregating OSHA inspections and violations, WHD wage theft, MSHA mine safety, EPA ECHO, NLRB labor practice, FMCSA, OFLC, BLS SOII, SAM.gov debarment, CMS, USAspending, CPSC, NHTSA, SEC enforcement, and federal prosecutions.

Risk Scoring

Composite per-employer risk score with risk-history endpoint exposing month-over-month changes.

Parent Company Rollup

Aggregate enforcement across all locations of a parent company via parent-name lookup.

Peer Comparison

Compare an employer against industry peers within the same NAICS code and state.

Batch Lookup

Submit up to 100 employer queries in one POST for high-throughput backfills.

CSV Upload

Upload up to 500 rows / 5MB for bulk match against the employer index.

Async Bulk Export

Enterprise-only export job pipeline returning downloadable CSV/JSON of up to 100,000 rows.

Inspection Violations Detail

Drill into individual OSHA inspection activity numbers for citation-level violations.

Severe Injuries Reporting

OSHA Form 300A and severe-injury report data per employer.

SEC Enforcement Linkage

SEC enforcement actions joined to publicly traded parent companies.

NAICS Industry Metadata

Lookup NAICS-4 industry codes and BLS SOII industry injury rate benchmarks.

State and Industry Statistics

Pre-aggregated stats by US state and NAICS code, plus a dedicated nursing-home (CMS CCN) statistics index.

API Key Self-Service

Dashboard endpoints to create, list, rotate (48-hour grace), and revoke API keys (up to 5 active per account).

Usage Telemetry

Self-reported lookup logging and PDF report claim endpoints with retrievable usage history.

Sitemap Feed

Crawler-friendly employer sitemap endpoint for SEO and search-index ingestion.

Feedback Submission

Per-employer feedback submission for data corrections.

Use Cases

Journalism and Investigations

Reporters investigating workplace safety, wage theft, or environmental violations at specific employers or industries.

ESG and Responsible Investment

Investment funds screening portfolio companies for material labor, safety, and compliance liabilities.

Insurance Underwriting

Workers compensation and commercial casualty underwriters pricing risk based on federal enforcement history.

Procurement and Vendor Risk

Procurement teams vetting suppliers and contractors against federal debarment, OSHA, and EPA records.

Labor Organizing and Worker Advocacy

Unions and worker advocates identifying chronic violators and industry-wide enforcement patterns.

Academic Research

Labor economists, public health researchers, and policy analysts studying enforcement effectiveness and worker safety outcomes.

Legal Discovery and Litigation Support

Plaintiffs counsel and defense firms researching defendant enforcement history.

Compliance and Audit Functions

Corporate compliance teams benchmarking their own facilities against industry peers.

Integrations

OSHA Enforcement Data

Inspections, violations, penalties, fatalities, and severity classifications.

OSHA ITA Form 300A

Self-reported DART and TRIR injury rates by establishment.

WHD (Wage and Hour Division)

Wage violations, back wages, and affected-employee counts.

MSHA

Mine safety violations and penalties.

EPA ECHO

Environmental compliance covering air, water, waste, and drinking water.

NLRB

Labor practice charges and union representation cases.

FMCSA

Motor carrier safety data.

OFLC

Foreign labor certifications including H-1B, H-2A, and H-2B.

BLS SOII

Bureau of Labor Statistics industry injury rate benchmarks.

SAM.gov

Federal debarment and suspension exclusions.

CMS

Nursing home ratings and deficiencies indexed by CCN.

USAspending.gov

25-year history of federal contract awards.

CPSC

Product recall data.

NHTSA

Vehicle recall and defect complaint data.

SEC EDGAR

SEC enforcement actions and public-company filings.

UVA Corporate Prosecution Registry

Federal prosecutions and plea agreement records.

Stripe

Billing webhook intake is wired into the API for subscription lifecycle events.

Hugging Face Datasets

Several FastDOL datasets are mirrored on the FastDOLz Hugging Face organization for ML and bulk research workflows.

Solutions

Free Tier

50 monthly API lookups per key, no credit card required, for evaluation and light research use.

Enterprise Data Licensing

Custom-quota API access, bulk export, dataset licensing, and custom integrations contracted directly with FastDOL.

Semantic Vocabularies

Fastdol Context

21 classes · 17 properties

JSON-LD

API Governance Rules

FastDOL API Rules

32 rules · 8 errors 18 warnings 6 info

SPECTRAL

JSON Structure

Fastdol Batch Lookup Item Structure

6 properties

JSON STRUCTURE

Fastdol Batch Lookup Request Structure

1 properties

JSON STRUCTURE

Fastdol Create Key Request Structure

2 properties

JSON STRUCTURE

Fastdol Delete Account Request Structure

2 properties

JSON STRUCTURE

Fastdol Export Filters Structure

17 properties

JSON STRUCTURE

Fastdol Export Request Structure

5 properties

JSON STRUCTURE

Fastdol Feedback Request Structure

3 properties

JSON STRUCTURE

Fastdol Forgot Password Request Structure

1 properties

JSON STRUCTURE

Fastdol Login Request Structure

2 properties

JSON STRUCTURE

Fastdol Reset Password Request Structure

2 properties

JSON STRUCTURE

Fastdol Signup Request Structure

3 properties

JSON STRUCTURE

Fastdol Verify Email Request Structure

1 properties

JSON STRUCTURE

Example Payloads

Fastdol Export Filters Example

17 fields

EXAMPLE

Resources

🔗
Website
Website
🔗
Documentation
Documentation
🔗
APIReference
APIReference
🔗
Sandbox
Sandbox
📝
Signup
Signup
🔗
Login
Login
💰
Pricing
Pricing
🔗
Plans
Plans
💰
PricingPage
PricingPage
🔗
RateLimits
RateLimits
🔗
FinOps
FinOps
🔗
SpectralRules
SpectralRules
🔗
Vocabulary
Vocabulary
📰
Blog
Blog
📜
TermsOfService
TermsOfService
📜
PrivacyPolicy
PrivacyPolicy
🔗
Contact
Contact
💬
Support
Support
🔑
Authentication
Authentication
🔗
Methodology
Methodology
🔗
Datasets
Datasets
🔗
HuggingFace
HuggingFace
🔗
APIsJSON
APIsJSON

Sources

Raw ↑
opencollection: 1.0.0
info:
  name: FastDOL API
  version: '1.0'
items:
- info:
    name: FastDOL Search Employers
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: name
      value: Acme Construction Inc
      type: query
      description: Fuzzy employer name search
    - name: ein
      value: 12-3456789
      type: query
      description: Exact EIN match
    - name: state
      value: CA
      type: query
      description: State code filter (e.g., CA)
    - name: zip
      value: '94105'
      type: query
      description: 5-digit zip code filter
    - name: naics
      value: '2362'
      type: query
      description: 4-digit NAICS prefix filter
    - name: parent_only
      value: 'false'
      type: query
      description: Only return employers with a parent_name (known parent companies)
    - name: parent_name
      value: walmart-inc
      type: query
      description: Filter to locations under a specific parent company (exact match)
    - name: has_fatalities
      value: 'false'
      type: query
      description: Filter to locations with fatality investigations
    - name: svep
      value: 'false'
      type: query
      description: Filter to locations on the Severe Violator Enforcement Program
    - name: sort_by
      value: string
      type: query
      description: 'Sort results by: risk_score (default), violations, penalties, inspections, fatalities'
    - name: sort_dir
      value: string
      type: query
      description: 'Sort direction: desc (default) or asc'
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Search employers by name, EIN, zip, state, or NAICS.


    Returns a flat list of employer locations sorted by risk score (worst first).

    Each result includes `related_locations_count` showing how many locations

    share the same normalized employer name — useful for national chains.'
- info:
    name: FastDOL GET Parent Company
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/parent
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: name
      value: Acme Construction Inc
      type: query
      description: Parent company name (e.g., 'Amazon', 'Walmart')
    - name: state
      value: CA
      type: query
      description: Filter locations by state
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Parent company risk rollup — aggregate risk across all locations.


    Returns company-wide statistics (total inspections, violations, penalties,

    risk distribution) plus a paginated list of individual locations sorted

    by risk score (worst first).


    Premium feature for enterprise customers evaluating national employers.'
- info:
    name: FastDOL GET Employer by EIN
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/ein/:ein
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: ein
      value: 12-3456789
      type: path
    - name: state
      value: CA
      type: query
      description: State code filter
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Lookup employers by FEIN (Federal Employer Identification Number).


    Returns all locations matching the given EIN. Insurance professionals

    identify employers by FEIN — this is the primary lookup for underwriting

    integrations.


    EIN format: 9 digits (e.g., ''943067788'' or ''94-3067788'').'
- info:
    name: FastDOL GET Employer
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
  docs: Direct lookup by employer_id UUID.
- info:
    name: FastDOL GET Inspections
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id/inspections
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Get inspection history with violation detail for an employer.


    Metered: one lookup per call. Previously unmetered, which made it trivial

    for a free-tier key to scrape the entire product by combining the sitemap

    endpoint (employer IDs) with this one (full inspection history per id).'
- info:
    name: FastDOL GET Severe Injuries
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id/severe-injuries
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Per-event OSHA Severe Injury Reports (29 CFR 1904.39) for an employer.


    Each row is an injury the employer self-reported within 24 hours

    -- in-patient hospitalization, amputation, or loss of an eye.

    Distinct from /employers/{id}/inspections (inspection-triggered):

    SIR is injury-triggered, so the same event may or may not have a

    related inspection (see inspection_activity_nr -- often NULL).


    Metered: one lookup per call, same as inspections / SEC enforcement.

    Newest event first.'
- info:
    name: FastDOL GET WHD Cases
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id/whd-cases
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Per-case WHD (Wage & Hour Division) enforcement records for an

    employer.


    Each row is one closed case carrying backwages assessed

    (`bw_amt`) and the count of underpaid employees

    (`ee_violtd_cnt`). Covers FLSA, FMLA, MSPA, H-1B/H-2A/H-2B, CCPA,

    and any other DOL WHD-administered statute.


    Metered: one lookup per call, same pattern as the other detail

    endpoints. Most-recent case first.'
- info:
    name: FastDOL GET OSHA Accidents
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id/osha-accidents
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Per-event OSHA accident records (inspection-triggered).


    Each row is an accident/fatality/catastrophe OSHA documented while

    investigating an inspection at this employer. Distinct from

    /employers/{id}/severe-injuries (SIR is injury-triggered and

    self-reported under 29 CFR 1904.39); accidents only surface through

    an OSHA-opened inspection.


    The narrative `abstract_text` is truncated at 4000 chars upstream

    (silver/osha_accident_detail) to keep row size bounded.


    Metered: one lookup per call, same a'
- info:
    name: FastDOL GET SEC Enforcement
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id/sec-enforcement
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
  docs: 'Get SEC enforcement actions filed against an employer''s parent

    company.


    Joined via employer_profile.parent_name → sec_enforcement_detail

    .parent_name. Returns empty results for non-public-parent employers

    (~99% of employers — most aren''t SEC registrants).


    Metered: one lookup per call. Same justification as get_inspections

    — un-metered would let a free-tier key scrape the entire SEC

    enforcement-history dataset for free by walking the sitemap.'
- info:
    name: FastDOL GET Peers
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id/peers
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    - name: limit
      value: '20'
      type: query
  docs: 'Peer establishments — same NAICS+state cohort, plus same-parent

    siblings.


    Powers the "Other employers in this industry" and "Other

    establishments under this parent" sections of the profile page.

    These sections double as internal-link targets that pass authority

    to long-tail leaf URLs (otherwise SEO dead-ends since most thin

    profiles have no inbound links).


    Returns up to `limit` rows per cohort, ordered by

    agency_violation_count DESC so the most-active peers surface first

    — better signal for th'
- info:
    name: FastDOL GET Violations
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/inspections/:activity_nr/violations
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: activity_nr
      value: '316254783'
      type: path
  docs: 'Get violation detail for a specific inspection.


    Metered: one lookup per call. See get_inspections for rationale.'
- info:
    name: FastDOL Batch Lookup
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/v1/employers/batch
    headers:
    - name: X-Api-Key
      value: string
    body:
      type: json
      data: '{}'
  docs: 'Batch employer lookup — designed for spreadsheet-style bulk searches.


    Each item can include name, ein, employer_id, plus optional location

    filters (state, zip, city) to narrow to a specific site.


    Up to 100 items processed synchronously. 101-500 returns a job_id

    for async polling (coming soon). Max 500 items per request.


    Typical usage: underwriter uploads a spreadsheet with company name +

    address for each policy they''re quoting.'
- info:
    name: FastDOL GET Risk History
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/employers/:employer_id/risk-history
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    - name: limit
      value: '20'
      type: query
  docs: Risk tier history for an employer over time. Shows nightly snapshots.
- info:
    name: FastDOL Submit Feedback
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/v1/employers/:employer_id/feedback
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: employer_id
      value: emp_8a3b9c2d1e4f
      type: path
    body:
      type: json
      data: '{}'
  docs: Submit feedback about an employer match. Not metered.
- info:
    name: FastDOL List NAICS Codes
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/industries/naics-codes
    headers:
    - name: X-Api-Key
      value: string
  docs: List all 4-digit NAICS codes with employer counts.
- info:
    name: FastDOL GET Industry
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/industries/:naics4
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: naics4
      value: '2362'
      type: path
  docs: Industry-level risk benchmarks for a 4-digit NAICS code.
- info:
    name: FastDOL Sitemap Employers
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/sitemap/employers
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: limit
      value: '20'
      type: query
    - name: offset
      value: '0'
      type: query
    - name: indexable_only
      value: 'false'
      type: query
      description: When true, return only employers with at least one enforcement signal across any aggregated source. Used
        by the Next.js sitemap generator so Google isn't asked to crawl thin templated profiles that the page itself noindex's
        anyway.
  docs: 'Return employer IDs for sitemap generation with pagination. Not metered.


    Requires the dedicated ``sitemap:read`` scope — intentionally NOT in the

    free-tier default scopes. The only legitimate caller is the Next.js

    server generating sitemap shards for SEO; that route uses DEMO_API_KEY

    whose scopes must include ''sitemap:read''. Free customer keys cannot

    enumerate the entire dataset via this endpoint.


    Pagination: use offset/limit to page through all employers.

    Returns total_count so the caller kno'
- info:
    name: FastDOL Signup
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/auth/signup
    body:
      type: json
      data: '{}'
  docs: Create account with email + password. Sends verification email.
- info:
    name: FastDOL Verify Email
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/auth/verify
    body:
      type: json
      data: '{}'
  docs: "Verify email address.\n\nAccepts the token in the JSON body (POST) rather than the URL\n(GET) so it doesn't leak\
    \ via:\n  * server access logs (nginx, application-level request logs)\n  * exception tracebacks that include request\
    \ URLs\n  * Referer headers when the verify page links anywhere\n  * browser history shared from a kiosk / shared screen\n\
    The Next.js verify page reads the token from the URL once,\nimmediately replaceState's it out of the address bar, then\
    \ POSTs\nthe value here.\n\nBehavior change (w"
- info:
    name: FastDOL Login
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/auth/login
    body:
      type: json
      data: '{}'
  docs: Login with email + password. Returns JWT as HttpOnly cookie.
- info:
    name: FastDOL Logout
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/auth/logout
  docs: 'End the current session. Records the JWT''s jti in revoked_tokens so

    the token cannot be reused even if the cookie was copied elsewhere

    (DevTools, proxy log, shared machine) before the browser cleared it.


    Best-effort: a request without a valid JWT still returns 200 so the

    frontend can always clear its local state, and a DB failure during

    revocation still clears the cookie (logging server-side) — we never

    want logout to fail in a way that leaves the user logged in.'
- info:
    name: FastDOL GET Me
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/auth/me
  docs: 'Return the authenticated customer''s public identity.


    Used by the frontend header + account pages to show the logged-in

    email without trusting client-side pathname heuristics. 401s when

    the access_token cookie is missing/expired/invalid so the frontend

    can reliably fall back to logged-out rendering.'
- info:
    name: FastDOL Forgot Password
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/auth/forgot-password
    body:
      type: json
      data: '{}'
  docs: 'Request password reset. Always returns 202 (don''t leak if email exists).


    All real work runs in a background task so request-thread timing

    can''t distinguish the "email exists" path (DB write + Resend

    call: tens to hundreds of ms) from "email unknown" (immediate

    return) from "rate-limited" (immediate return). Closes the

    timing-enumeration vector flagged in the re-audit.'
- info:
    name: FastDOL Reset Password
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/auth/reset-password
    body:
      type: json
      data: '{}'
  docs: Reset password using token from email.
- info:
    name: FastDOL GET Plan
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/dashboard/plan
  docs: Return current plan info including pending cancellation status.
- info:
    name: FastDOL List Keys
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/dashboard/keys
  docs: List all API keys for the current customer.
- info:
    name: FastDOL Create Key
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/dashboard/keys
    body:
      type: json
      data: '{}'
  docs: Generate a new API key. Raw key shown ONCE in response.
- info:
    name: FastDOL Rotate Key
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/dashboard/keys/:key_id/rotate
    params:
    - name: key_id
      value: key_5f8c3a2d1e4b
      type: path
  docs: Rotate a key. Old key works for 48h, new key is immediately active.
- info:
    name: FastDOL Revoke Key
    type: http
  http:
    method: DELETE
    url: https://api.fastdol.com/dashboard/keys/:key_id
    params:
    - name: key_id
      value: key_5f8c3a2d1e4b
      type: path
  docs: Immediately revoke an API key.
- info:
    name: FastDOL Delete Account
    type: http
  http:
    method: DELETE
    url: https://api.fastdol.com/dashboard/account
    body:
      type: json
      data: '{}'
  docs: "Delete the authenticated customer's account and all associated data.\n\nImplements GDPR Article 17 (\"right to erasure\"\
    ) and CCPA equivalents.\nRequires password re-authentication to prevent XSS / CSRF / session-theft\nescalating into full\
    \ account wipe, plus an explicit \"DELETE\" confirmation\nstring to defeat accidental or malicious one-click destruction.\n\
    \nCascades (via existing FKs in migrations/001_init + 002_add_constraints):\n  - api_keys, email_verifications, password_reset_tokens,\
    \ subscriptions,\n"
- info:
    name: FastDOL Stripe Webhook Tombstone
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/webhooks/stripe
  docs: 'No-op accept for Stripe webhook deliveries post-redesign.


    Returns 200 immediately so Stripe''s retry loop doesn''t keep

    re-queuing events. We don''t read the body, don''t verify the

    signature, don''t log anything sensitive.


    Per-IP throttle keeps a non-Stripe attacker from using this

    unauthenticated endpoint as cheap bandwidth — legitimate Stripe

    deliveries come from many edge IPs and won''t hit the cap.'
- info:
    name: FastDOL Upload CSV
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/v1/employers/upload-csv
    headers:
    - name: X-Api-Key
      value: string
    body:
      type: multipart-form
      data: []
  docs: "Upload a CSV of employers, get back a CSV with risk profiles.\n\nExpected CSV columns (flexible — matches by header\
    \ name):\n    Required: name OR company_name OR employer_name\n    Optional: state, zip, city, ein\n\nExtra columns in\
    \ the input are preserved in the output.\nOutput adds: employer_id, match_confidence, risk_tier, risk_score,\nosha_inspections,\
    \ osha_violations, osha_total_penalties,\nlocation_count, trend_signal"
- info:
    name: FastDOL State Stats
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/stats/state/:code
    params:
    - name: code
      value: CA
      type: path
  docs: "State-level aggregates + top employers + top industries.\n\nPowers the /state/[slug] SEO landing pages. Returns:\n\
    \  - `state`: 2-letter code and full name\n  - `totals`: inspections, violations, penalties, fatalities, WHD backwages,\n\
    \    employer count in one pass\n  - `top_by_violations`: top 50 employers ordered by osha_violations\n  - `top_by_penalties`:\
    \ top 50 by osha_total_penalties\n  - `top_by_fatalities`: top 20 by osha_fatalities (only non-zero)\n  - `top_naics`:\
    \ top 10 industries by violation v"
- info:
    name: FastDOL Industry Stats
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/stats/industry/:naics
    params:
    - name: naics
      value: '2362'
      type: path
  docs: 'Industry aggregates + top employers + state breakdown.


    Accepts 2-, 3-, or 4-digit NAICS prefixes. Matches against the 6-digit

    naics_code on employer_profile_latest via LIKE ''{prefix}%''. 3-digit is

    the sweet spot for SEO — broad enough to have volume, specific enough

    to rank ("Motor Vehicle Manufacturing OSHA Violations").'
- info:
    name: FastDOL Industries Index
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/stats/industries
  docs: '3-digit NAICS subsectors that have any employer on file, with volumes.

    Powers the /industries landing page.'
- info:
    name: FastDOL Nursing Home Detail
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/stats/nursing-home/:ccn
    params:
    - name: ccn
      value: '055123'
      type: path
  docs: 'Detailed view for a single nursing home facility.


    Returns the facility''s full CMS payload (ratings, deficiencies,

    penalties, ownership) plus a pointer to the matching employer_id so

    the frontend can link to the federal-enforcement profile.'
- info:
    name: FastDOL Nursing Homes by State
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/stats/nursing-homes/:state_code
    params:
    - name: state_code
      value: CA
      type: path
  docs: State-level nursing home aggregates + top/bottom facilities.
- info:
    name: FastDOL Nursing Homes Index
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/stats/nursing-homes
  docs: 'Per-state counts of nursing homes for the /nursing-homes index page.


    Returns an empty state list (rather than 500) when the CMS columns

    haven''t yet been projected into the employer_profile_latest

    materialized view — this happens between the migration apply and

    the first nightly sync.'
- info:
    name: FastDOL States Index
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/stats/states
  docs: List of all supported state codes + employer counts for the /states page.
- info:
    name: FastDOL Create Export
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/v1/export
    headers:
    - name: X-Api-Key
      value: string
    body:
      type: json
      data: '{}'
  docs: 'Start a bulk export job. Returns 202 with a job_id to poll.


    At least one filter field must be set — unfiltered exports would

    scan the entire employer table and are refused.'
- info:
    name: FastDOL GET Export
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/export/:job_id
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: job_id
      value: job_2c5d7a93b1f0
      type: path
  docs: 'Poll an export job. Returns status and — once finished — a

    download URL valid until the job expires (24h after creation).'
- info:
    name: FastDOL Download Export
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/export/:job_id/download
    headers:
    - name: X-Api-Key
      value: string
    params:
    - name: job_id
      value: job_2c5d7a93b1f0
      type: path
  docs: Stream the generated export file. 404 if not finished or expired.
- info:
    name: FastDOL Log Lookup
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/v1/usage/lookup
  docs: 'Increment lookups_used. Soft cap — return 200 with `over_quota`

    flag rather than 429, so the page render that triggered this isn''t

    interrupted. The UI uses the flag to render an upgrade banner.'
- info:
    name: FastDOL Claim PDF Report
    type: http
  http:
    method: POST
    url: https://api.fastdol.com/v1/usage/pdf-report-claim
  docs: 'Hard-cap claim for one PDF report. Returns 429 if the customer is

    at quota. Caller (the report page) refuses to render on 429 and

    shows an upgrade prompt instead.


    Atomic check-and-increment via SELECT ... FOR UPDATE inside a

    transaction. If the limit is 0 (Free tier), the customer never gets

    past the comparison — no slot is consumed and the upgrade response

    is consistent.'
- info:
    name: FastDOL GET Usage
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/usage
  docs: 'Return all three usage counters + their limits for the dashboard.


    Read-only convenience endpoint so the account page doesn''t have to

    join across customers + api_keys + the live api_usage row count.'
- info:
    name: FastDOL Health
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/health
  docs: 'Public health endpoint — returns ok/unhealthy only.


    Used by UptimeRobot and status-page builders. Intentionally minimal

    to avoid leaking internal operational detail. Only DB + data-loaded

    checks trigger 503 — pipeline freshness is not customer-facing and

    is exposed on /v1/health/detail for admin monitoring.'
- info:
    name: FastDOL Health
    type: http
  http:
    method: HEAD
    url: https://api.fastdol.com/v1/health
  docs: 'Public health endpoint — returns ok/unhealthy only.


    Used by UptimeRobot and status-page builders. Intentionally minimal

    to avoid leaking internal operational detail. Only DB + data-loaded

    checks trigger 503 — pipeline freshness is not customer-facing and

    is exposed on /v1/health/detail for admin monitoring.'
- info:
    name: FastDOL Health Detail
    type: http
  http:
    method: GET
    url: https://api.fastdol.com/v1/health/detail
  docs: 'Admin-only detailed health — requires admin JWT.


    Full diagnostics: DB, pipeline recency, pipeline status, profile

    count, data age, failing checks. Behind auth so customers can''t see

    internal operational state or fingerprint pipeline schedules.'
bundled: true