InterObservers.

Employer Desk API

Free static JSON files with the state employment rules on the Desk, the document templates and the 2027 changes. Every rule record carries its official source, a word-for-word quote and the date it was checked.

See the endpoints

General information, not legal advice. This page is for general information only and isn’t legal, financial or tax advice. Laws vary by state and change; check the official source or talk to a qualified professional about your situation. Every rule on this page links to its official source.

51states and DC covered
404verified rule records today
11rule topics per state
20document templates

What it is

The Employer Desk API is a set of plain JSON files, rebuilt with the Desk pages from the same data. It is meant for developers, researchers and AI agents that need a state employment rule with a source they can show. There is nothing to install: fetch a URL and read the JSON.

Base URL

https://interobservers.com/api/v1/

Every endpoint below is relative to it. Responses are UTF-8 JSON and can be fetched from any origin (CORS is open).

Endpoints

Real output from the current build, shortened: each list keeps its first item, and the fields every file shares (attribution, license, disclaimer, generated_at, api_version, dataset) are left out.

/api/v1/index.json

Where to start: the list of endpoints, every rule topic and every state with its file, and record counts. Example file: /api/v1/index.json.

Example: index.json
{
  "name": "InterObservers Employer Desk API",
  "version": "1.0.0",
  "docs": "https://interobservers.com/desk/api/",
  "conventions": {
    "state_files": "One file per state at /api/v1/states/<code>.json, code = two-letter postal code in lowercase (dc for District of Columbia). This is the only form.",
    "record_status": "status \"verified\": checked against official sources within the last 180 days. status \"no_verified_answer\": we do not state a rule; use check_url.",
    "no_verified_answer_case": "An entry with \"case\" marks a specific case that is not verified while other cases of the same topic are."
  },
  "endpoints": [
    {
      "path": "/api/v1/index.json",
      "url": "https://interobservers.com/api/v1/index.json",
      "description": "This index."
    },
    {
      "path": "/api/v1/states/{code}.json",
      "url": "https://interobservers.com/api/v1/states/ca.json",
      "description": "All topics for one state."
    }
  ],
  "topics": [
    {
      "topic": "minimum_wage",
      "name": "Minimum wage",
      "api_url": "https://interobservers.com/api/v1/rules/minimum_wage.json",
      "page_url": "https://interobservers.com/desk/laws/minimum-wage-by-state/"
    }
  ],
  "states": [
    {
      "state": "AL",
      "name": "Alabama",
      "api_url": "https://interobservers.com/api/v1/states/al.json",
      "rulebook_url": "https://interobservers.com/desk/states/alabama/"
    }
  ],
  "counts": {
    "states": 51,
    "topics": 11,
    "verified_records": 404,
    "no_verified_answer": 308,
    "state_topics_verified": 292,
    "state_topics_unanswered": 269,
    "templates": 20,
    "situations": 7,
    "changes_2027": 39
  }
}

/api/v1/states/{code}.json

Every rule topic for one state. {code} is the two-letter postal code in lowercase (dc for the District of Columbia). 51 files. Example file: /api/v1/states/ca.json.

Example: states/ca.json
{
  "state": "CA",
  "name": "California",
  "slug": "california",
  "rulebook_url": "https://interobservers.com/desk/states/california/",
  "api_url": "https://interobservers.com/api/v1/states/ca.json",
  "topics": {
    "minimum_wage": [
      {
        "state": "CA",
        "topic": "minimum_wage",
        "case": "standard",
        "rule": "California minimum wage is $16.90 per hour for all employers (effective January 1, 2026); higher industry-specific or local minimums may apply.",
        "values": {
          "rate_usd_per_hour": 16.9
        },
        "law": "California minimum wage (U.S. DOL WHD State Minimum Wage Laws table)",
        "source_url": "https://www.dol.gov/agencies/whd/minimum-wage/state",
        "source_quote": "California Basic Minimum Rate (per hour): $16.90",
        "second_source_url": "https://www.dir.ca.gov/dlse/faq_minimumwage.htm",
        "second_source_quote": "Effective January 1, 2026, the minimum wage is $16.90 per hour for all employers, not otherwise covered by a higher minimum wage specific to an industry or a locality.",
        "verified_at": "2026-09-24",
        "status": "verified"
      }
    ]
  }
}

/api/v1/rules/{topic}.json

One rule topic for all 50 states and DC. 11 topics: minimum_wage, payday_frequency, meal_break, rest_break, final_pay_fired, final_pay_quit, pto_payout, paid_sick_leave, at_will_exceptions, service_letter, separation_notice. Example file: /api/v1/rules/final_pay_fired.json.

Example: rules/final_pay_fired.json
{
  "topic": "final_pay_fired",
  "name": "Final paycheck after a termination",
  "page_url": "https://interobservers.com/desk/laws/final-paycheck-laws-by-state/",
  "api_url": "https://interobservers.com/api/v1/rules/final_pay_fired.json",
  "counts": {
    "states": 51,
    "states_verified": 29
  },
  "states": [
    {
      "state": "AK",
      "name": "Alaska",
      "rulebook_url": "https://interobservers.com/desk/states/alaska/",
      "records": [
        {
          "state": "AK",
          "topic": "final_pay_fired",
          "case": "standard",
          "rule": "If the employer ends the employment, for any reason, final wages are due within three working days after the termination.",
          "values": {
            "working_days": 3
          },
          "law": "Alaska Stat. § 23.05.140(b)",
          "source_url": "https://www.akleg.gov/basis/statutes.asp?media=print&secStart=23.05.140&secEnd=23.05.140",
          "source_quote": "If the employment is terminated by the employer, regardless of the cause for the termination, payment is due within three working days after the termination.",
          "second_source_url": "https://labor.alaska.gov/lss/whfaq.htm",
          "second_source_quote": "If you are terminated by your employer, your employer must pay you all monies owed within three working days after the day of termination (not counting weekends and holidays).",
          "verified_at": "2026-09-24",
          "status": "verified"
        }
      ]
    }
  ]
}

/api/v1/templates/index.json

The list of document templates, with the page and the file for each. Example file: /api/v1/templates/index.json.

Example: templates/index.json
{
  "templates": [
    {
      "slug": "attendance-policy",
      "name": "Attendance policy",
      "page_url": "https://interobservers.com/desk/templates/attendance-policy/",
      "api_url": "https://interobservers.com/api/v1/templates/attendance-policy.json",
      "variant_of": null,
      "situation": "no-call-no-show"
    }
  ]
}

/api/v1/templates/{slug}.json

One template: its fields, its optional clauses and the full text with a placeholder for each field (the file explains the syntax in placeholder_syntax), plus the state rule topics it depends on. Example file: /api/v1/templates/termination-letter.json.

Example: templates/termination-letter.json
{
  "slug": "termination-letter",
  "name": "Termination letter",
  "description": "A plain, neutral termination letter: the decision, the last day, final pay, benefits, company property and a contact. Pick your state to see the final-pay rule that applies, with its official source.",
  "page_url": "https://interobservers.com/desk/templates/termination-letter/",
  "api_url": "https://interobservers.com/api/v1/templates/termination-letter.json",
  "variant_of": null,
  "situation": {
    "slug": "fire-an-employee",
    "name": "Fire an employee",
    "page_url": "https://interobservers.com/desk/fire-an-employee/"
  },
  "fields": [
    {
      "key": "employee_name",
      "label": "Employee name",
      "type": "text",
      "required": true
    },
    {
      "key": "job_title",
      "label": "Employee job title",
      "type": "text",
      "required": true
    }
  ],
  "clauses": [
    {
      "id": "severance",
      "label": "Include severance paragraph",
      "default": false
    }
  ],
  "placeholder_syntax": "{{field_key}}",
  "document": [
    {
      "type": "meta",
      "text": "{{company_name}}"
    },
    {
      "type": "meta",
      "text": "{{letter_date}}"
    },
    {
      "type": "meta",
      "text": "To: {{employee_name}}, {{job_title}}"
    }
  ],
  "state_rules": [
    {
      "topic": "final_pay_fired",
      "api_url": "https://interobservers.com/api/v1/rules/final_pay_fired.json"
    }
  ],
  "sources": [
    {
      "name": "U.S. Department of Labor: Last paycheck",
      "url": "https://www.dol.gov/general/topic/wages/lastpaycheck"
    }
  ],
  "license_note": "Free self-help template, not legal advice."
}

/api/v1/situations/index.json

The situations (write-up, PIP, termination and others) with their steps, documents and the rule topics that apply. Example file: /api/v1/situations/index.json.

Example: situations/index.json
{
  "situations": [
    {
      "slug": "write-up-an-employee",
      "name": "Write up an employee",
      "page_url": "https://interobservers.com/desk/write-up-an-employee/",
      "summary": "To write up an employee, gather the facts with dates, check your written policy, meet privately, describe the issue and the expectation, set a review date, give the employee a written warning to sign for receipt, and keep a copy in the personnel file. Use the same process for everyone with the same issue.",
      "steps": [
        {
          "t": "Collect the facts",
          "d": "Write down what happened with dates, times and who saw it. Pull any records: time sheets, emails, customer complaints."
        }
      ],
      "documents": [
        {
          "slug": "verbal-warning",
          "name": "Verbal warning log",
          "api_url": "https://interobservers.com/api/v1/templates/verbal-warning.json",
          "page_url": "https://interobservers.com/desk/templates/verbal-warning/"
        }
      ],
      "rule_keys": [
        "at_will_exceptions",
        "service_letter"
      ],
      "sources": [
        {
          "name": "EEOC: Retaliation",
          "url": "https://www.eeoc.gov/retaliation"
        }
      ]
    }
  ]
}

/api/v1/changes-2027.json

Employment law changes scheduled for 2027, each with a quote from its official source. A change whose new value has not been announced says so; no number is guessed. Example file: /api/v1/changes-2027.json.

Example: changes-2027.json
{
  "name": "Employment law changes scheduled for 2027",
  "items": [
    {
      "jurisdiction": "AZ",
      "state": "AZ",
      "level": "state",
      "topic": "minimum_wage",
      "effective_date": "2027-01-01",
      "new_value": null,
      "previous_value": "$15.15/hour",
      "indexing_method": "The minimum wage shall be increased on January 1, 2021 and on January 1 of successive years, by the increase in the cost of living.",
      "status": "pending_announcement",
      "status_label": "Not announced yet",
      "source_url": "https://www.azleg.gov/ars/23/00363.htm",
      "source_quote": "The minimum wage shall be increased on January 1, 2021 and on January 1 of successive years, by the increase in the cost of living.",
      "additional_sources": []
    }
  ],
  "note": "Each item quotes an official source. Status \"pending_announcement\" means the new value has not been published yet; no number is guessed."
}

Topic files

Record fields

Each topic of a state is a list of records. A verified record has these fields:

FieldMeaning
stateTwo-letter postal code (DC included).
topicRule topic, for example final_pay_fired or minimum_wage.
caseWhich case of the topic the rule covers ("standard" when there is one rule for everyone).
ruleThe rule in plain English, as shown on the Desk pages.
valuesNumbers taken from the quoted text, for example a rate or a number of days (may be empty).
lawThe statute, regulation or agency page the rule comes from.
source_urlOfficial source (government or state legislature website).
source_quoteThe supporting text, word for word, from source_url.
second_source_urlA second official source, or null.
second_source_quoteThe supporting text from the second source, or null.
verified_atDate the rule was last checked against its sources (YYYY-MM-DD).
status"verified" or "no_verified_answer".
messageOnly on "no_verified_answer": says that there is no verified answer.
check_urlOnly on "no_verified_answer": the official page to check instead.

Every file also starts with the same shared fields:

FieldMeaning
attributionName and link to credit.
licenseLicense of the compilation and the status of the quoted government texts.
disclaimerGeneral information, not legal advice.
generated_atWhen the file was built (UTC).
api_versionVersion of the file format.
datasetOn state and topic files: schema.org Dataset metadata for the same data.
Example: the shared fields
{
  "attribution": {
    "name": "InterObservers Employer Desk",
    "url": "https://interobservers.com/desk/"
  },
  "license": {
    "name": "CC BY 4.0",
    "url": "https://creativecommons.org/licenses/by/4.0/",
    "applies_to": "The compilation: selection, structure, summaries and field names, by InterObservers Employer Desk.",
    "official_sources": "Quoted statutes and agency text are reproduced verbatim from official government sources and remain the works of those governments. U.S. federal government works are in the public domain; state and local government material is quoted for reference with a link to the source.",
    "attribution_required": "Credit \"InterObservers Employer Desk\" with a link to https://interobservers.com/desk/."
  },
  "disclaimer": "General information, not legal advice. Laws change; check the official source linked.",
  "generated_at": "2026-09-24T23:28:23Z",
  "api_version": "1.0.0"
}

When there is no verified answer

If we have not verified a rule for a state, the API does not guess. The record has "status": "no_verified_answer", no rule field, and a check_url with the official page to check instead. When a topic has several cases and only some are verified, the unverified case gets its own record with its case field.

Show it to your users the same way the Desk does: "We have not verified this rule for this state yet. Check the official source", with the link. Never fill the gap with a rule from another source and present it as ours.

Example: a record with no verified answer (AL, minimum_wage)
{
  "state": "AL",
  "topic": "minimum_wage",
  "status": "no_verified_answer",
  "message": "No verified answer. Check the official source.",
  "check_url": "https://www.dol.gov/agencies/whd/minimum-wage/state"
}

How fresh the data is

How a rule is checked is described in our methodology.

License

The compilation (the selection, the structure, the plain-English summaries and the field names) is published under the Creative Commons Attribution 4.0 license (CC BY 4.0). You can copy, adapt and use it, including commercially, if you give credit.

The quoted statutes and agency texts come from government sources and remain the works of those governments. U.S. federal government works are in the public domain; state and local texts are quoted for reference, with a link to the source.

Attribution

Credit "InterObservers Employer Desk" with a link to https://interobservers.com/desk/ wherever you show the data, for example:

Source: InterObservers Employer Desk (https://interobservers.com/desk/), CC BY 4.0. Rules verified against the official sources cited in each record.

If you show a rule, show its source link and its verification date with it, and keep the "general information, not legal advice" notice.

Rate limits and caching

Changelog

A change that breaks the format will get a new path (/api/v2/); /api/v1/ keeps its fields.

Contact

To report a wrong rule, use the corrections page. For anything else about the API, contact us.

Sources (3)

Checked Sep 24, 2026 · How we verify every rule · Report an error