NIH API: Get chemical safety
Looks up a chemical on PubChem by name or CAS number and returns its GHS hazard labels, route-specific first aid, flash point and workplace exposure limits.
Unofficial. Not affiliated with or endorsed by NIH.
Inputs
Values from the run on Oct 23, 2026, shown under Output.
- Chemical, required
chemical Common chemical name or CAS number, for example acetone, bleach, or 67-64-1.
acetone
Input as JSON
{ "chemical": "acetone"}Output
{ "name": "Acetone", "first_aid": { "eyes": "Rinse with plenty of water (remove contact lenses if easily possible). Refer for medical attention.", "skin": "Remove contaminated clothes. Rinse skin with plenty of water or shower.", "swallowing": "Rinse mouth. Do NOT induce vomiting. Refer for medical attention .", "breathing_in": "Fresh air, rest. Refer for medical attention." }, "flash_point": "0 °F (NTP, 1992)", "signal_word": "Danger", "ghs_hazard_codes": [ "H225", "H319", "H336" ], "hazard_pictograms": [ { "name": "Flammable", "image_link": "https://pubchem.ncbi.nlm.nih.gov/images/ghs/GHS02.svg" }, { "name": "Irritant", "image_link": "https://pubchem.ncbi.nlm.nih.gov/images/ghs/GHS07.svg" } ], "hazard_statements": [ "Highly Flammable liquid and vapor", "Causes serious eye irritation", "May cause drowsiness or dizziness" ], "pubchem_compound_id": 180, "safety_section_link": "https://pubchem.ncbi.nlm.nih.gov/compound/180#section=Safety-and-Hazards" , "workplace_exposure_limits": "OSHA: Permissible Exposure Limit: Table Z-1 8-hr Time Weighted Avg: 1000 ppm (2400 mg/cu m).; OSHA: Vacated 1989 OSHA PEL TWA 750 ppm (1800 mg/cu m); STEL 1000 ppm (2400 mg/cu m) is still enforced in some states.; PEL: 1000.0 [ppm]" }Code
curl https://api.fous.com/v1/runs \ -H "Authorization: Bearer $FOUS_API_KEY" \ -H "Content-Type: application/json" \ -d '{"method":"pubchem.ncbi.nlm.nih.gov/get_chemical_safety","input":{"chemical":"acetone"}}' # Save as fous.py, then run: python3 fous.pyimport json, os, timefrom urllib.error import HTTPErrorfrom urllib.request import Request, urlopenAPI = "https://api.fous.com/v1/runs" KEY = os.environ["FOUS_API_KEY"]HEADERS = { "Authorization": f"Bearer {KEY}", "Content-Type": "application/json" ,}def call(url, body=None): data = json.dumps(body).encode() if body else None request = Request(url, data, HEADERS) try: with urlopen(request, timeout=120) as r: return r.status, json.load(r) except HTTPError as error: message = json.load(error)["error"]["message"] raise RuntimeError(message) from errorstatus, run = call(API, { "method": "pubchem.ncbi.nlm.nih.gov/get_chemical_safety" , "input": { "chemical": "acetone" }})# 202: still going after 30 s. Ask again until it ends.while status == 202: time.sleep(2) status, run = call(f"{API}/{run['id']}")print(json.dumps(run["data"], indent=2))// Save as fous.mjs, then run: node fous.mjsconst api = "https://api.fous.com/v1/runs" ;const headers = { Authorization: `Bearer ${process.env.FOUS_API_KEY}`, "Content-Type": "application/json" ,};let response = await fetch(api, { method: "POST", headers, body: JSON.stringify({ "method": "pubchem.ncbi.nlm.nih.gov/get_chemical_safety" , "input": { "chemical": "acetone" } }), signal: AbortSignal.timeout(120_000),});let run = await response.json();// 202: still going after 30 s. Ask again until it ends.while (response.status === 202) { await new Promise((done) => setTimeout(done, 2_000)); response = await fetch(`${api}/${run.id}`, { headers }); run = await response.json();}if (!response.ok) throw new Error(run.error.message);console.log(run.data);# Connect your agent to Fous once, over MCP (Streamable HTTP):# https://api.fous.com/mcp# Set FOUS_API_KEY first: create a key at https://app.fous.com/keys.# Claude Codeclaude mcp add \ --scope user \ --transport http fous https://api.fous.com/mcp \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Codexcodex mcp add fous \ --url https://api.fous.com/mcp \ --bearer-token-env-var FOUS_API_KEY# Cursor, VS Code, Windsurf, Cline and morenpx -y add-mcp https://api.fous.com/mcp -g -n fous \ --header "Authorization: Bearer ${FOUS_API_KEY:?Set FOUS_API_KEY to your Fous API key}"# Then ask your agent:# "Use Fous to run pubchem.ncbi.nlm.nih.gov/get_chemical_safety# with {"chemical":"acetone"}"Over HTTP, the answer’s data holds the output. A run still going after 30 seconds answers 202 with its id: ask GET /v1/runs/{id} until it ends.
Schema
Input schema
{ "type": "object", "required": [ "chemical" ], "properties": { "chemical": { "type": "string", "description": "Common chemical name or CAS number, for example acetone, bleach, or 67-64-1." } }}Output schema
{ "type": "object", "required": [ "name", "signal_word", "hazard_statements", "hazard_pictograms", "first_aid", "flash_point", "workplace_exposure_limits", "safety_section_link", "ghs_hazard_codes", "pubchem_compound_id" ], "properties": { "name": { "type": "string", "description": "PubChem name of the matched compound." }, "first_aid": { "type": "object", "required": [ "eyes", "skin", "breathing_in", "swallowing" ], "properties": { "eyes": { "type": [ "string", "null" ] }, "skin": { "type": [ "string", "null" ] }, "swallowing": { "type": [ "string", "null" ] }, "breathing_in": { "type": [ "string", "null" ] } }, "additionalProperties": false }, "flash_point": { "type": [ "string", "null" ], "description": "Reported flash point with units." }, "signal_word": { "type": [ "string", "null" ], "description": "GHS signal word, Danger or Warning, when reported." }, "ghs_hazard_codes": { "type": [ "array", "null" ], "items": { "type": "string" }, "description": "GHS H-codes corresponding to the hazard statements.", "x-fous-developer": true }, "hazard_pictograms": { "type": [ "array", "null" ], "items": { "type": "object", "required": [ "name", "image_link" ], "properties": { "name": { "type": "string" }, "image_link": { "type": "string" } }, "additionalProperties": false }, "description": "GHS pictogram names and images." }, "hazard_statements": { "type": [ "array", "null" ], "items": { "type": "string" }, "description": "GHS hazards in plain words." }, "pubchem_compound_id": { "type": "integer", "description": "PubChem compound ID.", "x-fous-developer": true }, "safety_section_link": { "type": "string", "description": "PubChem Safety and Hazards section." }, "workplace_exposure_limits": { "type": [ "string", "null" ], "description": "Reported OSHA or other workplace exposure limits with units." } }, "additionalProperties": false}- Price
- 1 credit per completed run (1¢ with pay as you go); failed runs are free.
- Method
pubchem.ncbi.nlm.nih.gov/get_chemical_safety- Returns
- name, signal word, hazard statements and codes, pictograms, first aid, flash point, exposure limits, PubChem link
Use it from your agent
Give your agent this line. It reads SKILL.md, gets a Fous API key and connects the Fous MCP server. Its run then takes the method pubchem.ncbi.nlm.nih.gov/get_chemical_safety with the inputs above.
Ask your agent
- What are the GHS hazard labels and first aid steps for acetone?
- I need the flash point and exposure limits for CAS 67-64-1.
- Is household bleach dangerous to inhale? Show me the hazard statements and pictograms.
- Look up safety data for sodium hydroxide on PubChem, including signal word and skin contact first aid.
- What's the workplace exposure limit and flash point for toluene (CAS 108-88-3) on nih.gov?
See more
All NIH methodsLooks up a chemical on PubChem by common name or CAS number and returns its formula, molecular weight, names, description, SMILES, InChIKey and 2D structure image link.
pubchem.ncbi.nlm.nih.gov/get_chemicalFinds PubMed medical and life-science articles by topic, with publication details and free full-text links when PubMed confirms them.
pubmed.ncbi.nlm.nih.gov/search_articlesFinds NIH research grants by topic, organisation, or researcher name. Searches the last five fiscal years by default.
reporter.nih.gov/search_grantsGets the full PubMed abstract and publication details for one article by title, PubMed link, or PubMed number (PMID). A title is searched in PubMed titles first and must closely match a found article. Some articles have no abstract or free full text.
pubmed.ncbi.nlm.nih.gov/get_articleFinds ICD-10-CM diagnosis codes and official names from a plain-language condition description, retrying with simplified wording when the first search finds nothing.
clinicaltables.nlm.nih.gov/search_diagnosis_codesExplains an ICD-10-CM diagnosis code with its official name, category, chapter, and whether it is billable, using the NLM Clinical Tables diagnosis table.
clinicaltables.nlm.nih.gov/explain_diagnosis_codeFinds U.S. consumer product recalls matching a product type or brand, newest first, with hazards, remedies, incidents, sale details and photos when published.
cpsc.gov/search_recallsFinds the latest FDA drug label for a brand or generic medicine and returns its uses, directions, warnings, ingredients and a DailyMed link.
open.fda.gov/get_drug_label