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 endpointsGeneral 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.
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.
- No key and no sign-up. The files are public.
- Read only. There are no write endpoints and no query parameters; each URL is a file.
- Same rules as the pages. A rule is in the API only if it is shown as verified on the Desk.
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
- minimum_wageMinimum wage
- payday_frequencyPayday frequency
- meal_breakMeal breaks
- rest_breakRest breaks
- final_pay_firedFinal paycheck after a termination
- final_pay_quitFinal paycheck after a resignation
- pto_payoutPayout of unused vacation or PTO
- paid_sick_leavePaid sick leave
- at_will_exceptionsExceptions to at-will employment
- service_letterService letter (reason for separation on request)
- separation_noticeSeparation notice for unemployment benefits
Record fields
Each topic of a state is a list of records. A verified record has these fields:
| Field | Meaning |
|---|---|
state | Two-letter postal code (DC included). |
topic | Rule topic, for example final_pay_fired or minimum_wage. |
case | Which case of the topic the rule covers ("standard" when there is one rule for everyone). |
rule | The rule in plain English, as shown on the Desk pages. |
values | Numbers taken from the quoted text, for example a rate or a number of days (may be empty). |
law | The statute, regulation or agency page the rule comes from. |
source_url | Official source (government or state legislature website). |
source_quote | The supporting text, word for word, from source_url. |
second_source_url | A second official source, or null. |
second_source_quote | The supporting text from the second source, or null. |
verified_at | Date the rule was last checked against its sources (YYYY-MM-DD). |
status | "verified" or "no_verified_answer". |
message | Only on "no_verified_answer": says that there is no verified answer. |
check_url | Only on "no_verified_answer": the official page to check instead. |
Every file also starts with the same shared fields:
| Field | Meaning |
|---|---|
attribution | Name and link to credit. |
license | License of the compilation and the status of the quoted government texts. |
disclaimer | General information, not legal advice. |
generated_at | When the file was built (UTC). |
api_version | Version of the file format. |
dataset | On 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
- Each rule carries
verified_at, the date it was last checked against its sources. - A rule is queued to be checked again 150 days after
verified_at. - A rule that has not been re-verified within 180 days is removed from the files automatically and becomes
no_verified_answeruntil it passes the checks again. generated_atsays when the file was built. The newest verification in the current files is Sep 24, 2026.
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
- The files are static and served with a cache time of one hour. Fetching the same file more often returns the same data.
- Cache the files on your side and check
generated_atorverified_atto see what changed. - No key is needed. Please keep automated traffic reasonable; a daily fetch is enough to stay current.
Changelog
- 1.0.0 (Sep 25, 2026): first public version. State files, topic files, templates, situations and 2027 changes.
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