---
title: "Search FDA databases"
method: GET
path: "/v1/sources/openfda/search"
tags: ["FDA databases"]
---

# Search FDA databases

`GET /v1/sources/openfda/search`

## Request

- Base URL: `https://api.assyro.com`
- URL: `https://api.assyro.com/v1/sources/openfda/search`
- Auth: none declared

Search FDA public databases, live. Drugs: labels, Drugs@FDA approvals, NDC directory, shortages, FAERS reports, recalls, complete response letters. Devices: 510(k), PMA, classification (product codes), establishment registration and listing, UDI (GUDID), recalls, MAUDE reports. Also food and dietary supplement recalls and adverse events, cosmetic, animal drug and tobacco reports, and FDA substance identifiers (UNII). Pick one dataset and fill the plain filters; do not write query syntax. Results are newest first. device_510k and device_pma searches can also return a `summary` counted over EVERY match (exact total, earliest and most recent decision, counts by year, decision, product code and applicant) and a decisionDateRank on each record: answer counts, firsts and most recents from those, with one search whose filters are exactly the question's, never by counting the records listed. For adverse event datasets, countBy returns the most reported terms (reactions, device problems...) with their report counts instead of records: counts are numbers of reports, not incidence, and adverse event reports do not establish causation. This public FDA data is not validated for clinical decisions. Cite each record by its id and link; read the full record with read_openfda_record. For the Orange Book use search_orange_book; for the Purple Book use search_purple_book. When you name a source to the user, name its FDA database (each record's authority), not the tool or the dataset.

## Query parameters

- `dataset` 'drug_label' | 'drug_approvals' | 'drug_ndc' | 'drug_shortages' | 'drug_adverse_events' | 'drug_recalls' | 'complete_response_letters' | 'device_510k' | 'device_pma' | 'device_classification' | 'device_registrations' | 'device_udi' | 'device_recalls' | 'device_enforcement' | 'device_adverse_events' | 'food_recalls' | 'food_adverse_events' | 'cosmetic_adverse_events' | 'animal_adverse_events' | 'tobacco_problem_reports' | 'substances', required: DRUGS. drug_label: structured product labels (indications, dosing, boxed warnings). drug_approvals: Drugs@FDA applications (NDA/ANDA/BLA), approval and supplement history. drug_ndc: NDC directory (labeler, packages, marketing category). drug_shortages: FDA drug shortage and discontinuation entries. drug_adverse_events: FAERS reports. drug_recalls: drug recall enforcement reports (class I-III). complete_response_letters: FDA complete response letters to NDAs/BLAs, full text. DEVICES. device_510k: 510(k) and De Novo decisions. device_pma: PMA approvals and supplements. device_classification: product codes with class and regulation. device_registrations: establishment registrations and their device listings. device_udi: GUDID device identifiers (UDI-DI) and attributes. device_recalls: device recalls with root cause and 510(k)/PMA numbers. device_enforcement: the same device recalls (Z-numbers) as enforcement reports, with recall class I-III. device_adverse_events: MAUDE reports. OTHER. food_recalls: food and dietary supplement recall enforcement reports. food_adverse_events: CAERS reports on foods and dietary supplements. cosmetic_adverse_events: cosmetic adverse event reports. animal_adverse_events: animal drug adverse event reports. tobacco_problem_reports: tobacco product problem reports. substances: FDA substance registry (GSRS): UNII, CAS and other codes, names, structure.
- `query` string: Free text; every word must appear somewhere in the record (e.g. "sterility", "kink"). Also finds identifiers inside records: a CAS number in substances, "761438" in complete_response_letters.
- `productName` string: Drug brand or generic name, or device name (e.g. "Keytruda", "warfarin", "catheter"). animal_adverse_events: active ingredient. substances: the exact substance name (use query for part of a name). complete_response_letters: a word or phrase in the letter.
- `company` string: Manufacturer, applicant, sponsor, labeler or recalling firm (e.g. "Merck", "Penumbra"). Not for device_classification, food_adverse_events, cosmetic_adverse_events, animal_adverse_events, tobacco_problem_reports, substances.
- `productCode` string: Three-letter FDA device product code (e.g. "DQY"). Only for device_510k, device_pma, device_classification, device_registrations, device_udi, device_recalls, device_adverse_events.
- `dateFrom` string: Earliest date, YYYY-MM-DD, on the dataset's own date: label effective date, approval or decision date, report received date, recall report/posting date, shortage update date, letter date, marketing start. Not for device_classification, device_registrations, substances.
- `dateTo` string: Latest date, YYYY-MM-DD, same date as dateFrom.
- `dateField` 'received' | 'event' | 'latest': Adverse event reports: the date dateFrom/dateTo, the order and countBy year use. received (default); event: when the event happened (device_adverse_events); latest: latest information received (drug_adverse_events).
- `eventType` 'death' | 'injury' | 'malfunction' | 'other': Outcome the report states. device_adverse_events: death, injury, malfunction, other.
- `seriousness` 'serious' | 'not_serious' | 'death' | 'life_threatening' | 'hospitalization' | 'disability' | 'congenital_anomaly' | 'other_serious': Serious or not, or one serious outcome. drug_adverse_events: serious, not_serious, death, life_threatening, hospitalization, disability, congenital_anomaly, other_serious.
- `reportSource` 'physician' | 'pharmacist' | 'other_health_professional' | 'lawyer' | 'consumer' | 'manufacturer' | 'user_facility' | 'distributor' | 'voluntary': Who sent the report. drug_adverse_events: physician, pharmacist, other_health_professional, lawyer, consumer. device_adverse_events: manufacturer, user_facility, distributor, voluntary.
- `deviceProblem` string: device_adverse_events: one term exactly as countBy device_problem lists it (e.g. "Break"), case included.
- `patientProblem` string: device_adverse_events: one term exactly as countBy patient_problem lists it (e.g. "Break"), case included.
- `countBy` 'reaction' | 'drug' | 'country' | 'outcome' | 'device_problem' | 'patient_problem' | 'event_type' | 'device_brand' | 'species' | 'health_problem' | 'product_problem' | 'year': Adverse event datasets only. drug_adverse_events: reaction, drug, country, year. device_adverse_events: device_problem, patient_problem, event_type, device_brand, year. food_adverse_events: reaction, outcome. cosmetic_adverse_events: reaction, outcome. animal_adverse_events: reaction, drug, species, outcome. tobacco_problem_reports: health_problem, product_problem. Returns the top terms with report counts (year: reports per year over the chosen date, newest first); the other filters narrow which reports are counted.
- `limit` integer: Records (or terms) to return, 1 to 10; default 8.

## Response `200`

Matching records.

- SearchResponse
  - `version` unknown, required
  - `source` SourceRef, required
    - `id` string, required
    - `label` string, required
    - `authority` string, required
  - `total` integer, nullable, required: Total matches the source reports, when it says.
  - `records` Record[], required
    - `id` string, required: The source's own identifier for the record.
    - `title` string, required
    - `url` string, required: The record's page at the source, to verify it.
    - `authority` string, required: Who published the record.
    - `snippet` string, nullable, required: The part of the record that matched; null where the licence allows only a link.
    - `publishedDate` string, nullable, required
    - `version` string, nullable, required: The edition or revision read.
    - `fields` object, nullable, required: The source's own fields; null where the licence allows only a link.
    - `asOf` string, nullable, required: The day Assyro's copy of the source was read (YYYY-MM-DD).
    - `attribution` string: The attribution the source's licence requires, on sources that require one.
  - `note` string
  - `summary` string[]

## Other responses

- `400`: The request is not valid: an unknown parameter or an argument the source refuses.
- `404`: No such source or record.
- `429`: Rate limited; retry after the Retry-After header.
- `503`: The source cannot answer from Assyro's copy right now.

---

[API](https://skmtc.dev/assyro/apis/assyro-public-data-api.md) - [All operations](https://skmtc.dev/assyro/apis/assyro-public-data-api/llms.txt) - [OpenAPI document](https://skmtc.dev/assyro/apis/assyro-public-data-api/revisions/c861290c9f47?raw)
