Search OSHA-investigated workplace accident reports via US Department of Labor Open Data Portal (~165k accidents). Each row carries summary number, related inspection number, report id, event date, narrative, nature of injury, body part affected, source of injury, occupation, age, sex, degree of injury (1 = fatality, 2 = hospitalized, 3 = no lost time, etc.). Filter by event date range, nature of injury code, fatality flag. Pair with /api/gov/osha-inspections + /api/gov/osha-violations to follow injury → investigation → citations.
/api/gov/osha-accidentsPAYMENT-SIGNATURE.The osha accidents API is a pay-per-call gov endpoint built for AI agents and autonomous software. Search OSHA-investigated workplace accident reports via US Department of Labor Open Data Portal (~165k accidents).
There is no signup and no API key. An agent (or any HTTP client) hits the endpoint, receives an x402 "402 Payment Required" challenge, signs a sub-cent USDC payment on Base or Solana, and retries — the data comes back on the paid request. That makes it a drop-in osha accidents data source for an agent tool-use loop, an MCP host, or a backend that needs gov data on demand without onboarding to yet another vendor portal.
| Name | Type | Description |
|---|---|---|
summaryNr | integer | min 1 |
activityNr | integer | min 1 |
reportId | string | min 1 chars · max 40 chars |
eventDateMin | string | match ^\d{4}-\d{2}-\d{2}$ |
eventDateMax | string | match ^\d{4}-\d{2}-\d{2}$ |
natureOfInj | string | min 1 chars · max 20 chars |
fields | string | max 400 chars · match ^[a-z][a-z0-9_]*(,[a-z][a-z0-9_]*)*$ |
sort | string | max 120 chars · match ^-?[a-z][a-z0-9_]*$ |
limit | integer | min 1 · max 100 |
offset | integer | min 0 |
# 1. Probe with no auth → 402 envelope with PaymentRequirements curl -sS 'https://2s.io/api/gov/osha-accidents?summaryNr=1&activityNr=1&reportId=example&eventDateMin=2024-01-01&eventDateMax=2024-01-01&natureOfInj=example&fields=example&sort=example&limit=25&offset=0' # 2. Sign + retry with PAYMENT-SIGNATURE: curl -sS 'https://2s.io/api/gov/osha-accidents?summaryNr=1&activityNr=1&reportId=example&eventDateMin=2024-01-01&eventDateMax=2024-01-01&natureOfInj=example&fields=example&sort=example&limit=25&offset=0' \ -H 'PAYMENT-SIGNATURE: <base64-json-payload>' # Or use the canonical runner (handles probe → sign → retry): # EVM_PRIVATE_KEY=0x... node --env-file=.env.local \ # --experimental-strip-types scripts/x402-pay.ts \ # 'https://2s.io/api/gov/osha-accidents?summaryNr=1&activityNr=1&reportId=example&eventDateMin=2024-01-01&eventDateMax=2024-01-01&natureOfInj=example&fields=example&sort=example&limit=25&offset=0'
import { TwoS } from '@2sio/sdk'
const client = new TwoS({
privateKey: process.env.EVM_PRIVATE_KEY as `0x${string}`,
})
const result = await client.gov.oshaAccidents({
"summaryNr": 1,
"activityNr": 1,
"reportId": "example",
"eventDateMin": "2024-01-01",
"eventDateMax": "2024-01-01",
"natureOfInj": "example",
"fields": "example",
"sort": "example",
"limit": 25,
"offset": 0
})
console.log('endpoint:', result.endpoint)
console.log('cost:', result.costUsd, 'USDC')
console.log('tx:', result.settlement?.txHash)
console.log('data:', result.data)import os
from twosio import TwoS
client = TwoS(private_key=os.environ["EVM_PRIVATE_KEY"])
result = client.gov.osha_accidents(summaryNr=1, activityNr=1, reportId="example", eventDateMin="2024-01-01", eventDateMax="2024-01-01", natureOfInj="example", fields="example", sort="example", limit=25, offset=0)
print("endpoint:", result.endpoint)
print("cost:", result.cost_usd, "USDC")
print("tx:", (result.settlement or {}).get("tx_hash"))
print("data:", result.data)// 1. Add @2sio/mcp to your MCP host config (Claude Desktop example below).
// EVM_PRIVATE_KEY funds x402 payments per call.
// claude_desktop_config.json
{
"mcpServers": {
"2sio": {
"command": "npx",
"args": ["-y", "@2sio/mcp"],
"env": { "EVM_PRIVATE_KEY": "0x..." }
}
}
}
// 2. Once the server is running, agents call this tool via standard MCP:
{
"jsonrpc": "2.0",
"id": 1,
"method": "tools/call",
"params": {
"name": "gov.osha-accidents",
"arguments": {
"summaryNr": 1,
"activityNr": 1,
"reportId": "example",
"eventDateMin": "2024-01-01",
"eventDateMax": "2024-01-01",
"natureOfInj": "example",
"fields": "example",
"sort": "example",
"limit": 25,
"offset": 0
}
}
}| Field | Type | Description |
|---|---|---|
ok | boolean | one of: true |
items | array | |
total | integer | Total matching rows upstream; null when unknown. |
source | object | |
meta | object |
{
"ok": true,
"items": [
{}
],
"total": 1,
"source": {
"provider": "example",
"url": "example",
"license": "example"
},
"meta": {
"nextOffset": 1
}
}