# OSHA 300A summaries (https://developers.asip.io/docs/queries/osha-300a-summaries)

Certified OSHA 300A annual summaries at your establishments, with the totals exactly as frozen into the certified form.

> **Status: Available on request.** API keys, the read-only Data API, the MCP server (with an API key) and signed webhooks are live on app.asip.io. Developer access is off by default for every company: ask ASIP to enable it for yours (https://developers.asip.io/docs/how-to-get-access). One-click OAuth sign-in for AI connectors (claude.ai, ChatGPT, Copilot) is not available yet; use an API key. The changelog at https://developers.asip.io/docs/changelog says when each part becomes available.

|           |                                                                                                                                                        |
| --------- | ------------------------------------------------------------------------------------------------------------------------------------------------------ |
| Data API  | `GET /api/v1/data/osha-300a-summaries` and `GET /api/v1/data/osha-300a-summaries/feed` ([endpoint reference](/docs/api-reference/osha-300a-summaries)) |
| MCP query | `query://asip/osha_300a_summaries`                                                                                                                     |
| Scope     | `osha:read`                                                                                                                                            |
| Module    | OSHA, switched on at the establishment (station)                                                                                                       |
| Filters   | `cursor`, `limit`, `updatedSince`, `stationId` (list only)                                                                                             |
| Order     | `updatedAt`, then `id`: the feed delivers new **and changed** summaries                                                                                |

## Who can read it

The same people as the [OSHA 300 log](/docs/queries/osha-300-log#who-can-read-it): an **oversight
role** and one of the OSHA recordkeeping permissions. Anyone else gets `403 restricted`.

The 300A is a posted summary, but through the platform it is kept behind oversight on purpose: the
same audience as the 300 log, narrower rather than wider.

**Only certified summaries are returned**: those with `status` `certified`, `posted`,
`posting_complete` or `retained`. A 300A that is still being prepared is not returned at all.

## What each record carries

One record is one establishment for one year.

| Field                                        | Meaning                                                                                                                                                                                                                                                                                                                                        |
| -------------------------------------------- | ---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| `id`, `module`, `url`                        | The summary's ASIP id, `osha`, and a link to the annual summaries page in ASIP.                                                                                                                                                                                                                                                                |
| `stationId`, `departmentId`                  | The establishment, and the department if there is one.                                                                                                                                                                                                                                                                                         |
| `coveredYear`                                | The year the summary covers.                                                                                                                                                                                                                                                                                                                   |
| `status`                                     | `certified`, `posted`, `posting_complete` or `retained`.                                                                                                                                                                                                                                                                                       |
| `certifiedAt`                                | When it was certified.                                                                                                                                                                                                                                                                                                                         |
| `postedFrom`, `postedThrough`                | The posting dates, if recorded.                                                                                                                                                                                                                                                                                                                |
| `totals`                                     | The establishment totals (fields G to M of the 300A) **exactly as frozen into the certified form**: `totalDeaths`, `totalDafwCases`, `totalDjtrCases`, `totalOtherCases`, `totalDafwDays`, `totalDjtrDays`, `totalInjuries`, `totalSkinDisorders`, `totalRespiratoryConditions`, `totalPoisonings`, `totalHearingLoss`, `totalOtherIllnesses`. |
| `caseCount`                                  | The number of cases on the certified form.                                                                                                                                                                                                                                                                                                     |
| `annualAverageEmployees`, `totalHoursWorked` | As entered on the certified form.                                                                                                                                                                                                                                                                                                              |
| `figuresVerified`                            | `true` when every employment figure the form needs (such as the average number of employees and the hours worked) had been entered when the form was produced. `false` when any was missing, or when ASIP could not read the flag.                                                                                                             |
| `updatedAt`                                  | When the summary last changed.                                                                                                                                                                                                                                                                                                                 |

> **Warning:** null means unreadable, never zero
>
> `totals` is `null` when ASIP could not read the frozen form; `caseCount`, `annualAverageEmployees`
> and `totalHoursWorked` are `null` when the form could not be read or did not record them. Never treat `null` as `0`: open the summary in ASIP instead. ASIP does not
> recompute the figures; they are read from the certified form as it was frozen.

## What is left out, and why

* **Summaries not yet certified.** A draft 300A is unfinished work.
* **The certifier's name and title, and the attestation text.** They belong on the signed form, not in
  a data feed.
* Every internal user id, the reconciliation note, the posting location and posting evidence note,
  the retention note, snapshot hashes, and the case rows of the frozen form (case detail is in the
  [OSHA 300 log](/docs/queries/osha-300-log)).

## Feed

The feed is ordered by `updatedAt`, so a summary is delivered when it is certified and again when it
changes later, for example when it is posted. Like every feed, it stops 30 seconds behind the current
time.

For a worked example, see the recipe [Export the OSHA 300A](/docs/recipes/osha-300a-export).
