# openFDA

> Query every public dataset the US Food and Drug Administration publishes, across drugs, medical devices, food, cosmetics, veterinary medicine and tobacco. Look up a drug by its NDC or read its label; track recalls, shortages, approvals and clearances; search adverse event reports for drugs, devices, food and animals; look up a device by its product code, its UDI or its 510(k); read the letters FDA sends when it refuses an application; and turn any of it into a frequency table. All thirty of openFDA's datasets are covered. No account needed.

App · Research & Academia · 40 actions. Web page: https://docs.lodol.com/docs/integrations/openfda

## Actions

### Count values in a field

Turn any openFDA dataset into a frequency table: how often each value of one field appears, most common first, without downloading the records. This answers the questions the search actions cannot: the most-reported reactions for a drug, the states with the most recalls, the root causes behind device recalls, recalls per month. Add a query to count within a slice rather than the whole dataset. Choosing a date field gives a time series instead of a breakdown. No API key required.

**Inputs**

- Dataset (`dataset`, text, required): Which of openFDA's thirty datasets to tally. One of: `drug/event` (Drugs: Drug adverse events), `drug/label` (Drugs: Drug product labels), `drug/ndc` (Drugs: National Drug Code directory), `drug/enforcement` (Drugs: Drug recalls), `drug/drugsfda` (Drugs: Drug approvals (Drugs@FDA)), `drug/shortages` (Drugs: Drug shortages), `drug/orangebook` (Drugs: Orange Book), `device/event` (Devices: Device adverse events), `device/classification` (Devices: Device classifications), `device/510k` (Devices: Device clearances (510(k))), and 20 more.
- Field to count (`field`, text, required): Which field's values to tally. The list narrows to the chosen dataset, and only offers fields openFDA can actually count. It refuses the rest.
- Only count records matching (`query`, text): An openFDA search expression narrowing what gets counted, in the same syntax as 'Run an advanced query'. Leave empty to count the whole dataset.
- Number of values (`limit`, number): How many of the most frequent values to return (1-1000). Defaults to 25. From 1 to 1000.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `field` (text)
- `last_updated` (text)
- `query` (text)
- `results` (list)
- `source_url` (text)
- `total_matching` (number)

**Example output**

```json
{
  "count": 3,
  "dataset": "drug/enforcement",
  "dataset_label": "Drug recalls",
  "field": "state.exact",
  "last_updated": "2026-08-12",
  "query": "",
  "results": [
    {
      "count": 2187,
      "date": null,
      "term": "NJ"
    },
    {
      "count": 1534,
      "date": null,
      "term": "FL"
    },
    {
      "count": 1324,
      "date": null,
      "term": "IL"
    }
  ],
  "source_url": "https://open.fda.gov/apis/drug/enforcement/",
  "total_matching": 5045
}
```

### Get a device approval

Read one premarket approval by its PMA number, or one of its supplements. Leave the supplement number blank for the original approval. Returns the device, the applicant, the decision and its date, the advisory committee, and FDA's approval-order statement, plus a link to the record on FDA's site. The step fails if the number does not exist. No API key required.

**Inputs**

- PMA number (`pma_number`, text, required): The approval number, including the leading P.
- Supplement number (`supplement_number`, text): Leave blank for the original approval, or give a supplement's number to read that instead.

**Outputs**

- `approval` (object)
- `dataset` (text)
- `last_updated` (text)
- `source_url` (text)

**Example output**

```json
{
  "approval": {
    "advisory_committee": "CV",
    "advisory_committee_description": "Cardiovascular",
    "ao_statement": "approval for minor labeling changes, removal of paper IFU, and minor dimensional changes to sterile pouches",
    "applicant": "Boston Scientific",
    "approval_url": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpma/pma.cfm?id=P960004",
    "city": "St Paul",
    "date_received": "2026-02-04",
    "decision_code": "APPR",
    "decision_date": "2026-04-10",
    "docket_number": "",
    "expedited_review_flag": "N",
    "fed_reg_notice_date": null,
    "generic_name": "Drug eluting permanent right ventricular (RV) or right atrial (RA) pacemaker electrodes",
    "openfda": {
      "device_class": "3",
      "device_class_label": "Class III (high risk)",
      "device_name": "Drug Eluting Permanent Right Ventricular (Rv) Or Right Atrial (Ra) Pacemaker Electrodes",
      "fei_number": [
        "3008159616",
        "3004369318"
      ],
      "medical_specialty_description": "Unknown",
      "registration_number": [
        "3008159616",
        "9610139"
      ],
      "regulation_number": ""
    },
    "pma_number": "P960004",
    "product_code": "NVN",
    "state": "MN",
    "supplement_number": "S114",
    "supplement_reason": "Labeling Change - Indications/instructions/shelf life/tradename",
    "supplement_type": "Real-Time Process",
    "trade_name": "Straight Lead Stylets Limber Models 6033, 6034; Straight Lead Stylets Firm Models 6036, 6037; J Shaped Lead Stylets Limb",
    "zip": "55112"
  },
  "dataset": "device/pma",
  "last_updated": "2026-08-10",
  "source_url": "https://open.fda.gov/apis/device/pma/"
}
```

### Get a device classification

Read one device product code in full: what FDA calls that kind of device, its definition, its risk class, the CFR regulation that governs it with a link to the text, and whether it is implantable, life-sustaining or exempt from Good Manufacturing Practice. The step fails if the code does not exist. No API key required.

**Inputs**

- Product code (`product_code`, text, required): The three-letter code, such as LRO. Find one with 'Search device classifications'.

**Outputs**

- `classification` (object)
- `dataset` (text)
- `last_updated` (text)
- `source_url` (text)

**Example output**

```json
{
  "classification": {
    "definition": "This product code has been established in accordance with the may 20, 1997, guidance entitled, convenience kits interim regulatory guidance, found at www.Fda...",
    "device_class": "2",
    "device_class_label": "Class II (moderate to high risk)",
    "device_name": "General Surgery Tray",
    "gmp_exempt_flag": "N",
    "implant_flag": "N",
    "life_sustain_support_flag": "N",
    "medical_specialty": "SU",
    "medical_specialty_description": "General, Plastic Surgery",
    "openfda": {
      "fei_number": [
        "3008496560",
        "3006191977"
      ],
      "k_number": [
        "K212258",
        "K934028"
      ],
      "registration_number": [
        "3008496560",
        "3006191977"
      ]
    },
    "product_code": "LRO",
    "regulation_number": "878.4370",
    "regulation_url": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfcfr/CFRSearch.cfm?FR=878.4370",
    "review_panel": "SU",
    "submission_type_id": "7",
    "submission_type_id_label": null,
    "summary_malfunction_reporting": "Eligible",
    "third_party_flag": "N"
  },
  "dataset": "device/classification",
  "last_updated": "2026-08-10",
  "source_url": "https://open.fda.gov/apis/device/classification/"
}
```

### Get a device clearance

Read one 510(k) clearance by its K number: the device, the applicant and their address, when FDA received it and when it decided, the decision itself, the product code and the review panel, plus a link to the clearance on FDA's site. The step fails if the number does not exist. No API key required.

**Inputs**

- 510(k) number (`k_number`, text, required): The clearance number, including the leading K.

**Outputs**

- `clearance` (object)
- `dataset` (text)
- `last_updated` (text)
- `source_url` (text)

**Example output**

```json
{
  "clearance": {
    "address_1": "120 S. Sierra Ave., Suite 100",
    "advisory_committee": "NE",
    "advisory_committee_description": "Neurology",
    "applicant": "ClearPoint Neuro, Inc.",
    "city": "Solana Beach",
    "clearance_type": "Traditional",
    "clearance_url": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpmn/pmn.cfm?ID=K233144",
    "contact": "Brennan  Sullivan",
    "country_code": "US",
    "date_received": "2023-09-27",
    "decision_code": "SESE",
    "decision_date": "2024-01-12",
    "decision_description": "Substantially Equivalent",
    "device_name": "ClearPoint Bone Screw Fiducials",
    "expedited_review_flag": "",
    "k_number": "K233144",
    "openfda": {
      "device_class": "2",
      "device_class_label": "Class II (moderate to high risk)",
      "device_name": "Neurological Stereotaxic Instrument",
      "fei_number": [
        "3006405073",
        "3017004815"
      ],
      "medical_specialty_description": "Neurology",
      "registration_number": [
        "3006405073",
        "3017004815"
      ],
      "regulation_number": "882.4560"
    },
    "postal_code": "92075",
    "product_code": "HAW",
    "state": "CA",
    "statement_or_summary": "Summary",
    "third_party_flag": "N"
  },
  "dataset": "device/510k",
  "last_updated": "2026-08-10",
  "source_url": "https://open.fda.gov/apis/device/510k/"
}
```

### Get a drug approval

Read one Drugs@FDA application by its number: who sponsors it, every product approved under it with its strengths and marketing status, and every submission and supplement filed against it with the date FDA decided each one. The step fails if the number is not in Drugs@FDA. No API key required.

**Inputs**

- Application number (`application_number`, text, required): The FDA application number, including its prefix: NDA, ANDA or BLA.

**Outputs**

- `application` (object)
- `dataset` (text)
- `last_updated` (text)
- `source_url` (text)

**Example output**

```json
{
  "application": {
    "application_number": "NDA021436",
    "drugs_at_fda_url": "https://www.accessdata.fda.gov/scripts/cder/daf/index.cfm?event=overview.process&ApplNo=021436",
    "openfda": {
      "application_number": [
        "NDA021436"
      ],
      "brand_name": [
        "ABILIFY"
      ],
      "generic_name": [
        "ARIPIPRAZOLE"
      ],
      "manufacturer_name": [
        "Otsuka America Pharmaceutical, Inc."
      ],
      "package_ndc": [
        "59148-006-13",
        "59148-006-92"
      ],
      "product_ndc": [
        "59148-006",
        "59148-007"
      ],
      "product_type": [
        "HUMAN PRESCRIPTION DRUG"
      ],
      "route": [
        "ORAL"
      ],
      "rxcui": [
        "349490",
        "349545"
      ],
      "spl_id": [
        "1b189d15-798d-4bed-a93d-a543ed7abd81"
      ],
      "spl_set_id": [
        "c040bd1d-45b7-49f2-93ea-aed7220b30ac"
      ],
      "substance_name": [
        "ARIPIPRAZOLE"
      ]
    },
    "products": [
      {
        "active_ingredients": [
          {
            "name": "ARIPIPRAZOLE",
            "strength": "2MG"
          }
        ],
        "brand_name": "ABILIFY",
        "dosage_form": "TABLET",
        "marketing_status": "Prescription",
        "product_number": "006",
        "reference_drug": "Yes",
        "reference_standard": "No",
        "route": "ORAL",
        "te_code": "AB"
      },
      {
        "active_ingredients": [
          {
            "name": "ARIPIPRAZOLE",
            "strength": "30MG"
          }
        ],
        "brand_name": "ABILIFY",
        "dosage_form": "TABLET",
        "marketing_status": "Prescription",
        "product_number": "004",
        "reference_drug": "Yes",
        "reference_standard": "No",
        "route": "ORAL",
        "te_code": "AB"
      }
    ],
    "sponsor_name": "OTSUKA",
    "submissions": [
      {
        "application_docs": [
          {
            "date": "2006-09-20",
            "id": "36917",
            "type": "Label",
            "url": "http://www.accessdata.fda.gov/drugsatfda_docs/label/2006/021436s014,021713s009lbl.pdf"
          },
          {
            "date": "2006-09-20",
            "id": "5362",
            "type": "Letter",
            "url": "http://www.accessdata.fda.gov/drugsatfda_docs/appletter/2006/021436s014, 021713s009ltr.pdf"
          }
        ],
        "review_priority": "STANDARD",
        "submission_class_code": "LABELING",
        "submission_class_code_description": "Labeling",
        "submission_number": "14",
        "submission_status": "AP",
        "submission_status_date": "2006-09-18",
        "submission_type": "SUPPL"
      },
      {
        "application_docs": [
          {
            "date": "2004-10-04",
            "id": "15455",
            "type": "Label",
            "url": "http://www.accessdata.fda.gov/drugsatfda_docs/label/2004/21436s002lbl.pdf"
          },
          {
            "date": "2013-05-10",
            "id": "21653",
            "type": "Review",
            "url": "http://www.accessdata.fda.gov/drugsatfda_docs/nda/2004/021436Orig1s002.pdf"
          }
        ],
        "review_priority": "STANDARD",
        "submission_class_code": "EFFICACY",
        "submission_class_code_description": "Efficacy",
        "submission_number": "2",
        "submission_status": "AP",
        "submission_status_date": "2004-09-29",
        "submission_type": "SUPPL"
      }
    ]
  },
  "dataset": "drug/drugsfda",
  "last_updated": "2026-08-21",
  "source_url": "https://open.fda.gov/apis/drug/drugsfda/"
}
```

### Get a drug label

Read one drug's label by its SPL Set ID, the identifier that names a label across every version of it, and the one shown on the product's DailyMed page. Choose which sections to bring back. The step fails if no label carries that ID, so use 'Search drug labels' when you have a name rather than an identifier. No API key required.

**Inputs**

- SPL Set ID (`set_id`, text, required): The label's Set ID. A specific version's document ID works too.
- Sections to return (`sections`, text): Which parts of the label to bring back. Nothing but the identifying fields is returned until you choose, because a full label can run to a megabyte. One or more of: `boxed_warning` (Boxed warning), `indications_and_usage` (Indications and usage), `dosage_and_administration` (Dosage and administration), `dosage_forms_and_strengths` (Dosage forms and strengths), `contraindications`, `warnings`, `warnings_and_cautions` (Warnings and cautions), `adverse_reactions` (Adverse reactions), `drug_interactions` (Drug interactions), `use_in_specific_populations` (Use in specific populations), and 23 more.

**Outputs**

- `dataset` (text)
- `label` (object)
- `last_updated` (text)
- `source_url` (text)

**Example output**

```json
{
  "dataset": "drug/label",
  "label": {
    "available_sections": [
      "active_ingredient",
      "ask_doctor"
    ],
    "dailymed_url": "https://dailymed.nlm.nih.gov/dailymed/drugInfo.cfm?setid=015a6179-bacb-452d-b594-4de628ddc11d",
    "effective_time": "2024-11-07",
    "id": "22d94fd9-9488-a812-e063-6394a90a7ffc",
    "indications_and_usage": [
      "Uses temporarily relieves minor aches and pains due to: the common cold headache backache minor pain of arthritis toothache muscular aches premenstrual and m..."
    ],
    "openfda": {
      "application_number": [
        "M013"
      ],
      "brand_name": [
        "TYLENOL Extra Strength"
      ],
      "generic_name": [
        "ACETAMINOPHEN"
      ],
      "manufacturer_name": [
        "Kenvue Brands LLC"
      ],
      "package_ndc": [
        "50580-590-01",
        "50580-590-02"
      ],
      "product_ndc": [
        "50580-590"
      ],
      "product_type": [
        "HUMAN OTC DRUG"
      ],
      "route": [
        "ORAL"
      ],
      "rxcui": [
        "198440",
        "209459"
      ],
      "spl_id": [
        "22d94fd9-9488-a812-e063-6394a90a7ffc"
      ],
      "spl_set_id": [
        "015a6179-bacb-452d-b594-4de628ddc11d"
      ],
      "substance_name": [
        "ACETAMINOPHEN"
      ]
    },
    "set_id": "015a6179-bacb-452d-b594-4de628ddc11d",
    "version": "11",
    "warnings": [
      "Warnings Liver warning This product contains acetaminophen. Severe liver damage may occur if you take more than 4,000 mg of acetaminophen in 24 hours with ot..."
    ]
  },
  "last_updated": "2026-08-22",
  "source_url": "https://open.fda.gov/apis/drug/label/"
}
```

### Get a drug product by NDC

Look up one drug product by its National Drug Code, the number printed on every US drug package. Either the product code or the longer package code works. Returns the brand and generic names, the labeler, the ingredients and strengths, every package it is sold in, and a link to its label. The step fails if the code is not in the directory. No API key required.

**Inputs**

- NDC code (`ndc_code`, text, required): The product code (0002-4462) or the package code (0002-4462-01).

**Outputs**

- `dataset` (text)
- `drug_product` (object)
- `last_updated` (text)
- `source_url` (text)

**Example output**

```json
{
  "dataset": "drug/ndc",
  "drug_product": {
    "active_ingredients": [
      {
        "name": "IBUPROFEN",
        "strength": "200 mg/1"
      },
      {
        "name": "DIPHENHYDRAMINE CITRATE",
        "strength": "38 mg/1"
      }
    ],
    "application_number": null,
    "brand_name": null,
    "dailymed_url": null,
    "dea_schedule": null,
    "dea_schedule_label": null,
    "dosage_form": "TABLET, COATED",
    "finished": false,
    "generic_name": "ibuprofen, diphenhydramine citrate",
    "labeler_name": "L. Perrigo Company",
    "marketing_category": "DRUG FOR FURTHER PROCESSING",
    "marketing_end_date": null,
    "marketing_start_date": "2009-11-24",
    "openfda": {},
    "packaging": [
      {
        "description": "1 BAG in 1 DRUM (0113-4011-00)  / 155280 TABLET, COATED in 1 BAG",
        "marketing_start_date": "24-NOV-09",
        "package_ndc": "0113-4011-00"
      }
    ],
    "pharm_class": null,
    "product_id": "0113-4011_aa69b1b9-4993-4ea2-ab3d-e29c6a5eed8e",
    "product_ndc": "0113-4011",
    "product_type": "DRUG FOR FURTHER PROCESSING",
    "route": null,
    "spl_id": "aa69b1b9-4993-4ea2-ab3d-e29c6a5eed8e"
  },
  "last_updated": "2026-08-21",
  "source_url": "https://open.fda.gov/apis/drug/ndc/"
}
```

### Get dataset details

Read one openFDA dataset's record count, export date, sortable and countable fields, and the bulk download files it is published as, each with its size, record count and the period it covers. Use it before a large job to decide between querying the API and downloading the whole file. No API key required.

**Inputs**

- Dataset (`dataset`, text, required): Which of openFDA's thirty datasets to describe. One of: `drug/event` (Drugs: Drug adverse events), `drug/label` (Drugs: Drug product labels), `drug/ndc` (Drugs: National Drug Code directory), `drug/enforcement` (Drugs: Drug recalls), `drug/drugsfda` (Drugs: Drug approvals (Drugs@FDA)), `drug/shortages` (Drugs: Drug shortages), `drug/orangebook` (Drugs: Orange Book), `device/event` (Devices: Device adverse events), `device/classification` (Devices: Device classifications), `device/510k` (Devices: Device clearances (510(k))), and 20 more.

**Outputs**

- `countable_fields` (list)
- `dataset` (text)
- `docs_url` (text)
- `download_parts` (list)
- `endpoint` (text)
- `export_date` (text)
- `group` (text)
- `label` (text)
- `last_updated` (text)
- `sortable_fields` (list)
- `source_url` (text)
- `summary` (text)
- `total_records` (number)

**Example output**

```json
{
  "countable_fields": [
    {
      "field": "classification.exact",
      "label": "Recall class"
    },
    {
      "field": "status.exact",
      "label": "Recall status"
    }
  ],
  "dataset": "drug/enforcement",
  "docs_url": "https://open.fda.gov/apis/drug/enforcement/",
  "download_parts": [
    {
      "covers": "All",
      "file_url": "https://download.open.fda.gov/drug/enforcement/drug-enforcement-0001-of-0001.json.zip",
      "records": "17876",
      "size": "5MB"
    }
  ],
  "endpoint": "https://api.fda.gov/drug/enforcement.json",
  "export_date": "2026-08-19",
  "group": "Drugs",
  "label": "Drug recalls",
  "last_updated": "2026-08-12",
  "sortable_fields": [
    "report_date",
    "recall_initiation_date",
    "center_classification_date",
    "termination_date"
  ],
  "source_url": "https://open.fda.gov/apis/",
  "summary": "Drug recall enforcement reports, with FDA's hazard classification.",
  "total_records": 17876
}
```

### List openFDA datasets

List every dataset openFDA publishes with how many records it holds, when FDA last exported it, how many bulk download files it comes in, and which of its fields can be sorted and counted. Run it to check a dataset has been refreshed before reading from it, or to see what is available. No API key required.

**Inputs**

- Group (`group`, text): Narrow to one of openFDA's groups: Drugs, Devices, Food and so on. Leave empty for all thirty datasets.

**Outputs**

- `count` (number)
- `datasets` (list)
- `groups` (list)
- `last_updated` (text)
- `source_url` (text)

**Example output**

```json
{
  "count": 30,
  "datasets": [
    {
      "countable_fields": [
        "patient.reaction.reactionmeddrapt.exact",
        "patient.drug.medicinalproduct.exact"
      ],
      "dataset": "drug/event",
      "docs_url": "https://open.fda.gov/apis/drug/event/",
      "download_parts": 1767,
      "endpoint": "https://api.fda.gov/drug/event.json",
      "export_date": "2026-08-17",
      "group": "Drugs",
      "label": "Drug adverse events",
      "sortable_fields": [
        "receivedate",
        "receiptdate",
        "transmissiondate"
      ],
      "summary": "Adverse event and medication error reports submitted to FDA's FAERS safety reporting system.",
      "total_records": 20692690
    }
  ],
  "groups": [
    "Animal & veterinary",
    "Cosmetics",
    "Devices",
    "Drugs",
    "Food",
    "Other",
    "Research",
    "Tobacco",
    "Transparency"
  ],
  "last_updated": "2026-08-22",
  "source_url": "https://open.fda.gov/apis/"
}
```

### Run an advanced query

Run a search expression of your own against any openFDA dataset, in openFDA's own query language: 'field:value', AND / OR / NOT, quoted phrases, '[2024-01-01 TO 2024-12-31]' date ranges, and '_exists_:field'. The per-dataset actions cover the filters worth naming; this is the way to ask for something they do not. No API key required.

**Inputs**

- Dataset (`dataset`, text, required): Which of openFDA's thirty datasets to search. One of: `drug/event` (Drugs: Drug adverse events), `drug/label` (Drugs: Drug product labels), `drug/ndc` (Drugs: National Drug Code directory), `drug/enforcement` (Drugs: Drug recalls), `drug/drugsfda` (Drugs: Drug approvals (Drugs@FDA)), `drug/shortages` (Drugs: Drug shortages), `drug/orangebook` (Drugs: Orange Book), `device/event` (Devices: Device adverse events), `device/classification` (Devices: Device classifications), `device/510k` (Devices: Device clearances (510(k))), and 20 more.
- Search expression (`query`, text): The query, in openFDA's syntax. Leave empty to return the dataset unfiltered.
- Sort by (`sort_by`, text): Which field to order the results by. The list narrows to the chosen dataset: openFDA sorts on date fields only.
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/enforcement",
  "dataset_label": "Drug recalls",
  "has_more": true,
  "last_updated": "2026-08-12",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "classification.exact:\"Class I\"",
  "results": [
    {
      "center_classification_date": "2018-09-07",
      "city": "Olive Branch",
      "classification": "Class I",
      "code_info": "Lot #: 15617VP03, 15617VP01, 15617VP-02, Exp 7/31/2019;  15617VP06, 15617VP05, Exp 11/30/2019; 15617VP04, 15618004, 15618002, Exp 12/31/2019; 15618009, 15618...",
      "country": "United States",
      "distribution_pattern": "Nationwide in the USA and Puerto Rico",
      "event_id": "80719",
      "initial_firm_notification": "Letter",
      "openfda": {},
      "product_description": "Levothyroxine and Liothyronine (Thyroid Tablets, USP), 1 grain (60 mg), 100-count bottles, Rx Only, Manufactured for: Westminster Pharmaceuticals, LLC, 154 D...",
      "product_quantity": "Unknown",
      "product_type": "Drugs",
      "reason_for_recall": "Failed Content Uniformity Specifications: Product was manufactured using an adulterated active pharmaceutical ingredient; additionally, lack of process contr...",
      "recall_initiation_date": "2018-08-03",
      "recall_number": "D-1178-2018",
      "recalling_firm": "Westminster Pharmaceuticals LLC",
      "report_date": "2018-08-29",
      "state": "MS",
      "status": "Terminated",
      "termination_date": "2020-06-03",
      "voluntary_mandated": "Voluntary: Firm initiated"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/enforcement/",
  "total_count": 1736
}
```

### Search animal and veterinary adverse events

Search the adverse events reported for animal drugs and devices: which species, what reaction, what happened to the animal, which product was involved and who reported it. Filter by species, reaction, outcome, product or date. Note that people are sometimes the affected party: 'Human' is one of the species in this dataset, for events involving someone handling a veterinary product. No API key required.

**Inputs**

- Species (`species`, text): The animal the event was reported for. The list is read from the reports, with how many there are for each species.
- Reaction (`reactions`, text): The reactions reported, in VeDDRA's own wording (the veterinary equivalent of MedDRA).
- Outcome (`outcomes`, text): What happened to the animal.
- Product brand name (`brand_names`, list): The veterinary product's trade name.
- Active ingredient (`active_ingredients`, list): An ingredient the product contains.
- Manufacturer (`manufacturers`, list): The company that makes the product.
- Reported by (`reporters`, text): Who filed the report (the owner, a vet, or someone else).
- Only serious events (`serious_only`, true/false): Narrow to events that were fatal or life-threatening, needed professional intervention, or caused an abortion, stillbirth, infertility, congenital anomaly, lasting disability or disfigurement.
- Received from (`received_from`, date): Only include reports FDA received on or after this date.
- Received to (`received_to`, date): Only include reports FDA received on or before this date.
- Reaction started from (`onset_from`, date): Only include reactions that started on or after this date.
- Reaction started to (`onset_to`, date): Only include reactions that started on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `original_receive_date` (Date FDA received the report), `onset_date` (Date the reaction started).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "animalandveterinary/event",
  "dataset_label": "Animal and veterinary adverse events",
  "has_more": true,
  "last_updated": "2026-07-02",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "animal.species:(\"Dog\" OR \"DOG\" OR \"dog\")",
  "results": [
    {
      "animal": {
        "age": {
          "min": "10.00",
          "qualifier": "Measured",
          "unit": "Month"
        },
        "breed": {
          "breed_component": "Chihuahua",
          "is_crossbred": "false"
        },
        "female_animal_physiological_status": "NOT APPLICABLE",
        "gender": "Female",
        "reproductive_status": "Neutered",
        "species": "Dog",
        "weight": {
          "min": "4.080",
          "qualifier": "Estimated",
          "unit": "Kilogram"
        }
      },
      "drug": [
        {
          "administered_by": "Animal Owner",
          "ae_abated_after_stopping_drug": "false",
          "ae_reappeared_after_resuming_drug": "false",
          "brand_name": "MSK",
          "dose": {
            "denominator": "1",
            "denominator_unit": "Unknown",
            "numerator": "1",
            "numerator_unit": "tablet"
          },
          "first_exposure_date": "2013-08-13",
          "last_exposure_date": "2013-10-13",
          "lot_number": "UNKNOWN",
          "previous_ae_to_drug": "false",
          "previous_exposure_to_drug": "true",
          "route": "Oral",
          "used_according_to_label": "true"
        }
      ],
      "duration": {
        "unit": "Day",
        "value": "2"
      },
      "foreign_or_domestic": "Domestic",
      "health_assessment_prior_to_exposure": {
        "assessed_by": "Veterinarian",
        "condition": "Unknown"
      },
      "number_of_animals_affected": "1",
      "number_of_animals_treated": "1",
      "onset_date": "2013-10-13",
      "original_receive_date": "2013-10-15",
      "outcome": [
        {
          "medical_status": "Recovered/Normal",
          "number_of_animals_affected": "1"
        }
      ],
      "primary_reporter": "Animal Owner",
      "reaction": [
        {
          "veddra_term_code": "999",
          "veddra_term_name": "Inappetence",
          "veddra_version": "11"
        },
        {
          "veddra_term_code": "1018",
          "veddra_term_name": "Lethargy (see also Central nervous system depression in 'Neurological')",
          "veddra_version": "11"
        }
      ],
      "receiver": {
        "city": "Rockville",
        "country": "USA",
        "organization": "Food and Drug Administration Center for Veterinary Medicine",
        "postal_code": "20855",
        "state": "MD",
        "street_address": "7500 Standish Place (HFV-210) Room N403"
      },
      "report_id": "N141084",
      "secondary_reporter": null,
      "serious_ae": "false",
      "time_between_exposure_and_onset": null,
      "treated_for_ae": "false",
      "type_of_information": "Safety Issue",
      "unique_aer_id_number": "USA-USFDACVM-2013-US-051721"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/animalandveterinary/event/",
  "total_count": 985705
}
```

### Search Complete Response Letters

Search the letters FDA sends when it will not approve an application, released in full text with the deficiencies each one cites. Filter by company, application number, letter type, approval status, date, or a phrase in the letter. These are the documents that say, in FDA's own words, why a drug was turned down. No API key required.

**Inputs**

- Company (`companies`, list): The company the letter was sent to.
- Application number (`application_numbers`, list): The application the letter concerns.
- Letter type (`letter_types`, text): Complete response, refusal to file, tentative approval and so on. The list is read from the released letters.
- Approval status (`approval_statuses`, text): Whether the application has since been approved. A letter is not always the end of the story.
- Letter text contains (`text_contains`, text): A word or phrase from the letter itself, such as a kind of deficiency.
- Letter dated from (`letter_from`, date): Only include letters dated on or after this date.
- Letter dated to (`letter_to`, date): Only include letters dated on or before this date.
- Return the full text (`include_full_text`, true/false): Bring back the whole letter rather than the first thousand characters. A letter can run to tens of thousands of characters, so leave this off when listing many at once.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `letter_date` (Date of the letter).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "transparency/crl",
  "dataset_label": "Complete Response Letters",
  "has_more": true,
  "last_updated": "2026-08-13",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "",
  "results": [
    {
      "application_number": [
        "NDA 218679"
      ],
      "approval_status": "Unapproved",
      "approver_center": [],
      "approver_name": "Center for Drug Evaluation and Research",
      "approver_title": null,
      "company_address": "1000 Holcomb Woods Parkway, Suite 270\nRoswell, GA 30076",
      "company_name": "Saol International Development Limited",
      "company_rep": "Allison Lowry",
      "file_name": "CRL_NDA218679_20250827.pdf",
      "letter_date": "2025-08-27",
      "letter_type": "COMPLETE RESPONSE",
      "letter_year": "2025",
      "text": "ADMINISTRATION\n\ni Lk YN U.S. FOOD & DRUG\n\nNDA 218679\nCOMPLETE RESPONSE\n\nSaol International Development Limited\n% Saol Therapeutics Inc\n\nAttention: Allison Lo...",
      "text_length": 11114,
      "text_truncated": true
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/transparency/crl/",
  "total_count": 459
}
```

### Search cosmetic adverse events

Search the adverse events reported to FDA about cosmetics: the reaction, the product blamed for it, whether the product was suspected or merely in use at the time, and how serious the outcome was. Filter by reaction, outcome, product or date. A report is one person's account, not a finding that the product caused the reaction. No API key required.

**Inputs**

- Reaction (`reactions`, text): The reactions reported, in MedDRA's own wording. The list is read from the cosmetic reports themselves.
- Outcome (`outcomes`, text): How serious the outcome was.
- Product (`product_names`, list): The name of the product named in the report.
- Product role (`product_role`, text): Whether the product was suspected of causing the event or merely being used at the time. One of: `Suspect` (Suspected of causing the event), `Concomitant` (Used at the same time, not suspected).
- Consumer gender (`consumer_gender`, text): Only include reports about consumers of this gender. One of: `Female`, `Male`, `Not Available` (Not recorded).
- Received from (`received_from`, date): Only include reports FDA first received on or after this date.
- Received to (`received_to`, date): Only include reports FDA first received on or before this date.
- Event happened from (`event_from`, date): Only include events that happened on or after this date.
- Event happened to (`event_to`, date): Only include events that happened on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `initial_received_date` (Date FDA first received the report), `latest_received_date` (Date of the most recent version of the report), `event_date` (Date the event happened).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "cosmetic/event",
  "dataset_label": "Cosmetic adverse events",
  "has_more": true,
  "last_updated": "2025-08-31",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "",
  "results": [
    {
      "event_date": "25-Mar-19",
      "initial_received_date": "2021-11-16",
      "latest_received_date": "2021-11-16",
      "legacy_report_id": "2022-CFS-004469",
      "meddra_version": "28",
      "outcomes": [
        "Other Serious or Important Medical Event"
      ],
      "patient": {
        "age": "52",
        "age_unit": "Year(s)",
        "gender": "Female"
      },
      "products": [
        {
          "product_name": "Johnsons Powder No Upc",
          "role": "Suspect"
        }
      ],
      "reactions": [
        "Ovarian Cancer Stage I"
      ],
      "report_number": "24504502",
      "report_type": "Pre-MoCRA",
      "report_version": "1"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/cosmetic/event/",
  "total_count": 85511
}
```

### Search COVID-19 antibody test validations

Search the independent validation the National Cancer Institute ran on COVID-19 antibody tests for FDA: every sample put through every test, what the test said, what the truth panel said, and whether the two agreed. Filter by manufacturer, test, panel or agreement to compare how different tests performed on the same samples. No API key required.

**Inputs**

- Manufacturer (`manufacturers`, text): The company whose test was evaluated. The list is read from the validation data.
- Test (`devices`, text): The specific test that was evaluated.
- Panel (`panels`, text): Which sample panel the result came from.
- Lot number (`lot_numbers`, list): The lot of the test kit that was used.
- IgG agreement (`igg_agreement`, text): Whether the IgG result matched the truth panel. False negatives are the ones worth looking at. One or more of: `TP` (True positive), `TN` (True negative), `FP` (False positive), `FN` (False negative), `NA` (Not applicable).
- IgM agreement (`igm_agreement`, text): Whether the IgM result matched the truth panel. One or more of: `TP` (True positive), `TN` (True negative), `FP` (False positive), `FN` (False negative), `NA` (Not applicable).
- Combined antibody agreement (`combined_agreement`, text): Whether the test's overall antibody call matched the truth panel. One or more of: `TP` (True positive), `TN` (True negative), `FP` (False positive), `FN` (False negative), `NA` (Not applicable).
- Performed from (`performed_from`, date): Only include tests run on or after this date.
- Performed to (`performed_to`, date): Only include tests run on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `date_performed` (Date the test was run).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/covid19serology",
  "dataset_label": "COVID-19 serology test validations",
  "has_more": true,
  "last_updated": "2022-08-22",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "panel:(\"Panel 1\" OR \"PANEL 1\" OR \"panel 1\")",
  "results": [
    {
      "antibody_agree": "TP",
      "antibody_truth": "Positive",
      "control": "Pass",
      "date_performed": "4/21/2020",
      "days_from_symptom": "29",
      "device": "DPP COVID-19 IgM/IgG System",
      "evaluation_id": "maf3265-a001",
      "group": "Positives",
      "iga_agree": "NA",
      "iga_result": "NA",
      "igg_agree": "TP",
      "igg_result": "Positive",
      "igg_titer": "1600",
      "igg_truth": "Positive",
      "igm_agree": "FN",
      "igm_iga_result": "NA",
      "igm_igg_result": "NA",
      "igm_result": "Negative",
      "igm_titer": "400",
      "igm_truth": "Positive",
      "lot_number": "204IG001Z",
      "manufacturer": "ChemBio",
      "pan_agree": "NA",
      "pan_result": "NA",
      "pan_titer": "1600",
      "panel": "Panel 1",
      "sample_id": "C0010",
      "sample_no": "6",
      "type": "Serum"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/covid19serology/",
  "total_count": 2860
}
```

### Search COVID-19 research samples

Search the samples in FDA's COVID-19 miRNA and proteomics research: each donor's severity, sex and age, and, on request, the several thousand protein measurements taken from their sample. The measurements are left out by default because one record carries nearly three thousand of them. No API key required.

**Inputs**

- Severity (`severities`, text): How severe the donor's COVID-19 was. One or more of: `Mild`, `Moderate`, `Severe`.
- Sex (`sex`, text): Only include samples from donors of this sex. One of: `F` (Female), `M` (Male).
- Sample type (`sample_types`, text): Whether the row is an actual donor sample, a pooled sample or a laboratory control. One or more of: `Actual sample`, `Pooled sample`, `Internal control`.
- Sample ID (`sample_ids`, list): Specific samples to read, if you already have their IDs.
- Return the measurements (`include_measurements`, true/false): Bring back the per-protein readings as well. Off by default: one sample carries nearly three thousand of them, so ask for one sample at a time when you turn this on. The count is always reported either way.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "research/covidmirnaandproteomics",
  "dataset_label": "COVID-19 miRNA and proteomics",
  "has_more": true,
  "last_updated": "2026-08-19",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "",
  "results": [
    {
      "age": 46,
      "proteins": null,
      "proteins_count": 2939,
      "qc_control": "Actual sample",
      "sample_id": "DP7",
      "severity": "Mild",
      "sex": "F"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/research/covidmirnaandproteomics/",
  "total_count": 416
}
```

### Search device adverse events

Search MAUDE, FDA's database of medical device reports: the deaths, injuries and malfunctions reported for a device, with the manufacturer's narrative of what happened, what the patient's outcome was, and what remedial action was taken. Filter by event type, device, manufacturer, specialty and date, or search inside the narratives themselves. A report is not proof the device caused the harm. No API key required.

**Inputs**

- Event type (`event_types`, text): What was reported. Choose several to include any of them, or none for every type. One or more of: `Death`, `Injury`, `Malfunction`, `Other`, `No answer provided`.
- Device brand name (`brand_names`, list): The device's trade name, as the report gives it.
- Device generic name (`generic_names`, list): What kind of device it is, in FDA's own words.
- Manufacturer (`manufacturers`, list): The company that made the device.
- Product code (`product_codes`, list): FDA's three-letter code for the kind of device, such as LRO or DXN. Find one with 'Search device classifications'.
- Device class (`device_class`, text): FDA's risk class for the device. Class III is the highest risk and the one that needs premarket approval. One of: `1` (Class I (low to moderate risk)), `2` (Class II (moderate to high risk)), `3` (Class III (high risk)), `U` (Unclassified), `N` (Not classified), `F` (Humanitarian Device Exemption).
- Medical specialty (`medical_specialties`, text): The specialty FDA files the device under. The list is read from the classification database.
- Reported by (`report_sources`, text): Who filed the report. Manufacturer reports are the great majority. One or more of: `Manufacturer report` (Manufacturer), `Voluntary report` (Voluntary: a clinician or a member of the public), `User facility report` (User facility), `Distributor report` (Distributor).
- Patient outcome (`patient_outcomes`, text): What happened to the patient. The list is read from MAUDE, with how many reports record each outcome.
- Where it happened (`event_locations`, text): The kind of place the event took place in.
- Narrative contains (`narrative_contains`, text): A word or phrase from the reporter's account of what happened. This is the free text of the report, so it finds things no filter covers.
- Received from (`received_from`, date): Only include reports FDA received on or after this date.
- Received to (`received_to`, date): Only include reports FDA received on or before this date.
- Event happened from (`event_from`, date): Only include events that happened on or after this date.
- Event happened to (`event_to`, date): Only include events that happened on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `date_received` (Date FDA received it), `date_of_event` (Date the event happened), `date_report` (Date of the report), `date_manufacturer_received` (Date the manufacturer was told).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/event",
  "dataset_label": "Device adverse events",
  "has_more": true,
  "last_updated": "2026-08-11",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "event_type.exact:\"Death\"",
  "results": [
    {
      "adverse_event_flag": "Y",
      "date_of_event": "2008-01-17",
      "date_received": "2008-02-14",
      "date_report": "2008-02-11",
      "device": [
        {
          "brand_name": "INVACARE OXYGEN CONCENTRATORS",
          "date_received": "2008-02-14",
          "date_removed_flag": "",
          "device_event_key": "",
          "device_sequence_number": "1",
          "generic_name": "868.5440",
          "implant_flag": "",
          "manufacturer_d_address_1": "*",
          "manufacturer_d_address_2": "",
          "manufacturer_d_city": "SANFORD",
          "manufacturer_d_name": "INVACARE RESPIRATORY PRODUCTS",
          "manufacturer_d_state": "FL"
        }
      ],
      "event_key": "",
      "event_location": "",
      "event_type": "Death",
      "manufacturer_city": "",
      "manufacturer_country": "",
      "manufacturer_name": "",
      "manufacturer_state": "",
      "mdr_report_key": "1000021",
      "mdr_text": [
        {
          "mdr_text_key": "21800035",
          "patient_sequence_number": "1",
          "text": "MFR RECEIVED A MEDWATCH REPORT COPY. FACILITY REPORTS THE CONSUMER HAD BEEN EDUCATED REGARDING THE DANGERS OF SMOKING WHILE ON HOME OXYGEN. PT REPORTEDLY ATT...",
          "text_type_code": "Additional Manufacturer Narrative"
        },
        {
          "mdr_text_key": "21609764",
          "patient_sequence_number": "1",
          "text": "THE MEDWATCH FORM ALLEGES THE CONSUMER WAS BURNED ON HIS HEAD, FACE, AND ARMS AS A RESULT OF SMOKING WHILE USING A HOME OXYGEN CONCENTRATOR. THE CONSUMER ALL...",
          "text_type_code": "Description of Event or Problem"
        }
      ],
      "number_devices_in_event": "",
      "number_patients_in_event": "",
      "patient": [
        {
          "date_received": "2008-02-14",
          "patient_age": "*",
          "patient_ethnicity": "",
          "patient_problems": [
            "Burn(s)",
            "Death"
          ],
          "patient_race": "",
          "patient_sequence_number": "1",
          "patient_sex": "",
          "patient_weight": "",
          "sequence_number_outcome": [
            "Death"
          ],
          "sequence_number_treatment": [
            ""
          ]
        }
      ],
      "product_problem_flag": "N",
      "product_problems": [
        "Explode",
        "Fire"
      ],
      "remedial_action": [
        ""
      ],
      "report_number": "1525712-2008-00010",
      "report_source_code": "Manufacturer report",
      "source_type": [
        "User facility"
      ]
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/event/",
  "total_count": 229717
}
```

### Search device approvals (PMA)

Search premarket approvals: the highest-risk devices, which have to prove safety and effectiveness rather than equivalence, plus every supplement filed against an approval afterwards. Narrow to original approvals to see new devices only, or include supplements to follow how one device has changed since. No API key required.

**Inputs**

- PMA number (`pma_numbers`, list): The approval's own number, if you already have it.
- Trade name (`trade_names`, list): The device's brand name.
- Generic name (`generic_names`, list): What kind of device it is, in FDA's own words.
- Applicant (`applicants`, list): The company that holds the approval.
- Product code (`product_codes`, list): FDA's three-letter code for the kind of device, such as LRO or DXN. Find one with 'Search device classifications'.
- Decision (`decision_codes`, text): What FDA decided. The list is read from the approval data, with how many decisions of each kind.
- Supplement type (`supplement_types`, text): Which review track a supplement took. Only supplements carry one.
- Advisory committee (`advisory_committees`, text): The FDA review panel that handled the application.
- Device class (`device_class`, text): FDA's risk class for the device. Class III is the highest risk and the one that needs premarket approval. One of: `1` (Class I (low to moderate risk)), `2` (Class II (moderate to high risk)), `3` (Class III (high risk)), `U` (Unclassified), `N` (Not classified), `F` (Humanitarian Device Exemption).
- Only original approvals (`original_applications_only`, true/false): Leave out the supplements. Supplements outnumber originals roughly forty to one, so this is usually what 'new approvals' means.
- Only expedited reviews (`expedited_only`, true/false): Narrow to applications FDA gave an expedited review.
- Decided from (`decided_from`, date): Only include approvals decided on or after this date.
- Decided to (`decided_to`, date): Only include approvals decided on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `decision_date` (Decision date), `date_received` (Date FDA received it), `fed_reg_notice_date` (Federal Register notice date).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/pma",
  "dataset_label": "Device approvals (PMA)",
  "has_more": true,
  "last_updated": "2026-08-10",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "decision_date:[2024-01-01 TO *]",
  "results": [
    {
      "advisory_committee": "CV",
      "advisory_committee_description": "Cardiovascular",
      "ao_statement": "approval for minor labeling changes, removal of paper IFU, and minor dimensional changes to sterile pouches",
      "applicant": "Boston Scientific",
      "approval_url": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpma/pma.cfm?id=P960004",
      "city": "St Paul",
      "date_received": "2026-02-04",
      "decision_code": "APPR",
      "decision_date": "2026-04-10",
      "docket_number": "",
      "expedited_review_flag": "N",
      "fed_reg_notice_date": null,
      "generic_name": "Drug eluting permanent right ventricular (RV) or right atrial (RA) pacemaker electrodes",
      "openfda": {
        "device_class": "3",
        "device_class_label": "Class III (high risk)",
        "device_name": "Drug Eluting Permanent Right Ventricular (Rv) Or Right Atrial (Ra) Pacemaker Electrodes",
        "fei_number": [
          "3008159616",
          "3004369318"
        ],
        "medical_specialty_description": "Unknown",
        "registration_number": [
          "3008159616",
          "9610139"
        ],
        "regulation_number": ""
      },
      "pma_number": "P960004",
      "product_code": "NVN",
      "state": "MN",
      "supplement_number": "S114",
      "supplement_reason": "Labeling Change - Indications/instructions/shelf life/tradename",
      "supplement_type": "Real-Time Process",
      "trade_name": "Straight Lead Stylets Limber Models 6033, 6034; Straight Lead Stylets Firm Models 6036, 6037; J Shaped Lead Stylets Limb",
      "zip": "55112"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/pma/",
  "total_count": 5888
}
```

### Search device classifications

Search FDA's device classification database: what each three-letter product code means, which risk class it is in, which regulation governs it, whether it is implantable or life-sustaining, and what kind of premarket submission it needs. Start here when you have a kind of device and need the product code the other device actions filter by. No API key required.

**Inputs**

- Device name (`device_names`, list): FDA's own name for the kind of device.
- Product code (`product_codes`, list): FDA's three-letter code for the kind of device, such as LRO or DXN. Find one with 'Search device classifications'.
- Device class (`device_class`, text): FDA's risk class for the device. Class III is the highest risk and the one that needs premarket approval. One of: `1` (Class I (low to moderate risk)), `2` (Class II (moderate to high risk)), `3` (Class III (high risk)), `U` (Unclassified), `N` (Not classified), `F` (Humanitarian Device Exemption).
- Medical specialty (`medical_specialties`, text): The specialty the device belongs to. The list is read from the classification database itself.
- Regulation number (`regulation_numbers`, list): The CFR regulation that governs the device, such as 876.1500.
- Premarket submission needed (`submission_type`, text): Which route a new device of this kind has to take to market. One of: `1` (510(k)), `2` (Premarket approval (PMA)), `3` (Contact FDA's Office of Device Evaluation), `4` (510(k) exempt).
- Only implantable devices (`implantable_only`, true/false): Narrow to devices meant to be implanted in the body.
- Only life-sustaining devices (`life_sustaining_only`, true/false): Narrow to devices used to sustain or support life.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/classification",
  "dataset_label": "Device classifications",
  "has_more": true,
  "last_updated": "2026-08-10",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "product_code:\"LRO\"",
  "results": [
    {
      "definition": "This product code has been established in accordance with the may 20, 1997, guidance entitled, convenience kits interim regulatory guidance, found at www.Fda...",
      "device_class": "2",
      "device_class_label": "Class II (moderate to high risk)",
      "device_name": "General Surgery Tray",
      "gmp_exempt_flag": "N",
      "implant_flag": "N",
      "life_sustain_support_flag": "N",
      "medical_specialty": "SU",
      "medical_specialty_description": "General, Plastic Surgery",
      "openfda": {
        "fei_number": [
          "3008496560",
          "3006191977"
        ],
        "k_number": [
          "K212258",
          "K934028"
        ],
        "registration_number": [
          "3008496560",
          "3006191977"
        ]
      },
      "product_code": "LRO",
      "regulation_number": "878.4370",
      "regulation_url": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfcfr/CFRSearch.cfm?FR=878.4370",
      "review_panel": "SU",
      "submission_type_id": "7",
      "submission_type_id_label": null,
      "summary_malfunction_reporting": "Eligible",
      "third_party_flag": "N"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/classification/",
  "total_count": 1
}
```

### Search device clearances (510(k))

Search 510(k) premarket notifications: the devices FDA has cleared for market because they are substantially equivalent to one already sold. Filter by applicant, device, product code, decision, clearance type, advisory committee or decision date. This is the route most devices reach the market by, so it is the action for tracking a competitor's clearances. No API key required.

**Inputs**

- 510(k) number (`k_numbers`, list): The clearance's own number, if you already have it.
- Device name (`device_names`, list): The name the applicant gave the device.
- Applicant (`applicants`, list): The company that submitted the 510(k).
- Product code (`product_codes`, list): FDA's three-letter code for the kind of device, such as LRO or DXN. Find one with 'Search device classifications'.
- Decision (`decision_codes`, text): What FDA decided. The list is read from the clearance data, with how many decisions of each kind.
- Clearance type (`clearance_types`, text): Which 510(k) pathway was used. Traditional is the ordinary one.
- Advisory committee (`advisory_committees`, text): The FDA review panel that handled the submission.
- Applicant state (`states`, text): The state the applicant is based in.
- Applicant country (`countries`, text): The country the applicant is based in.
- Device class (`device_class`, text): FDA's risk class for the device. Class III is the highest risk and the one that needs premarket approval. One of: `1` (Class I (low to moderate risk)), `2` (Class II (moderate to high risk)), `3` (Class III (high risk)), `U` (Unclassified), `N` (Not classified), `F` (Humanitarian Device Exemption).
- Only expedited reviews (`expedited_only`, true/false): Narrow to submissions FDA gave an expedited review.
- Decided from (`decided_from`, date): Only include clearances decided on or after this date.
- Decided to (`decided_to`, date): Only include clearances decided on or before this date.
- Received from (`received_from`, date): Only include submissions FDA received on or after this date.
- Received to (`received_to`, date): Only include submissions FDA received on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `decision_date` (Decision date), `date_received` (Date FDA received it).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/510k",
  "dataset_label": "Device clearances (510(k))",
  "has_more": true,
  "last_updated": "2026-08-10",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "decision_date:[2024-01-01 TO 2024-02-01]",
  "results": [
    {
      "address_1": "120 S. Sierra Ave., Suite 100",
      "advisory_committee": "NE",
      "advisory_committee_description": "Neurology",
      "applicant": "ClearPoint Neuro, Inc.",
      "city": "Solana Beach",
      "clearance_type": "Traditional",
      "clearance_url": "https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpmn/pmn.cfm?ID=K233144",
      "contact": "Brennan  Sullivan",
      "country_code": "US",
      "date_received": "2023-09-27",
      "decision_code": "SESE",
      "decision_date": "2024-01-12",
      "decision_description": "Substantially Equivalent",
      "device_name": "ClearPoint Bone Screw Fiducials",
      "expedited_review_flag": "",
      "k_number": "K233144",
      "openfda": {
        "device_class": "2",
        "device_class_label": "Class II (moderate to high risk)",
        "device_name": "Neurological Stereotaxic Instrument",
        "fei_number": [
          "3006405073",
          "3017004815"
        ],
        "medical_specialty_description": "Neurology",
        "registration_number": [
          "3006405073",
          "3017004815"
        ],
        "regulation_number": "882.4560"
      },
      "postal_code": "92075",
      "product_code": "HAW",
      "state": "CA",
      "statement_or_summary": "Summary",
      "third_party_flag": "N"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/510k/",
  "total_count": 223
}
```

### Search device establishment registrations

Search every establishment registered with FDA to make, repack, relabel or import a medical device, and the devices each one lists. Filter by name, registration or FEI number, establishment type, country, state or product code. This is how to find who makes a given device, or everything a given site is registered to make. No API key required.

**Inputs**

- Establishment name (`establishment_names`, list): The registered name of the site.
- Device name (`proprietary_names`, list): A trade name the establishment lists a device under.
- Registration number (`registration_numbers`, list): FDA's registration number for the establishment.
- FEI number (`fei_numbers`, list): FDA's Facility Establishment Identifier for the site.
- Product code (`product_codes`, list): FDA's three-letter code for the kind of device, such as LRO or DXN. Find one with 'Search device classifications'.
- 510(k) number (`k_numbers`, list): Narrow to listings tied to this clearance.
- PMA number (`pma_numbers`, list): Narrow to listings tied to this approval.
- Establishment type (`establishment_types`, text): What the site is registered to do: manufacture, repack, relabel, import, and so on. The list is read from the registration data.
- Country (`countries`, text): The two-letter country code the site is in.
- State (`states`, text): The state the site is in, for US establishments.
- Registration status (`registration_status`, text): Whether the registration is active. One of: `1` (Active), `5` (Active, awaiting a registration number).
- Device class (`device_class`, text): FDA's risk class for the device. Class III is the highest risk and the one that needs premarket approval. One of: `1` (Class I (low to moderate risk)), `2` (Class II (moderate to high risk)), `3` (Class III (high risk)), `U` (Unclassified), `N` (Not classified), `F` (Humanitarian Device Exemption).
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `products.created_date` (Date the device listing was created).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/registrationlisting",
  "dataset_label": "Device establishment registrations",
  "has_more": true,
  "last_updated": "2026-08-10",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "registration.iso_country_code:\"US\"",
  "results": [
    {
      "establishment_type": [
        "Sterilize Medical Device for Another Party (Contract Sterilizer)"
      ],
      "k_number": "",
      "pma_number": "",
      "products": [
        {
          "created_date": "2023-08-15",
          "exempt": "",
          "openfda": {
            "device_class": "2",
            "device_name": "Bone Cement, Antibiotic",
            "medical_specialty_description": "Orthopedic",
            "regulation_number": "888.3027"
          },
          "owner_operator_number": "1527821",
          "product_code": "MBB"
        },
        {
          "created_date": "2023-08-15",
          "exempt": "",
          "openfda": {
            "device_class": "2",
            "device_name": "Prosthesis, Hip, Hemi-, Femoral, Metal",
            "medical_specialty_description": "Orthopedic",
            "regulation_number": "888.3360"
          },
          "owner_operator_number": "1527821",
          "product_code": "KWL"
        }
      ],
      "proprietary_name": [
        "Zimmer (LN,LS) - StageOne Select Hip Cement Spacer Molds"
      ],
      "registration": {
        "address_line_1": "2500 Commerce Dr",
        "address_line_2": "",
        "city": "Libertyville",
        "fei_number": "3003015552",
        "initial_importer_flag": "N",
        "iso_country_code": "US",
        "name": "Isomedix Operations, Inc.",
        "reg_expiry_date_year": "2026",
        "registration_number": "1424263",
        "state_code": "IL",
        "status_code": "1",
        "status_code_label": "Active"
      }
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/registrationlisting/",
  "total_count": 155904
}
```

### Search device identifiers (UDI)

Search the Global UDI Database: the catalogue entry behind every device identifier, with the brand and model, the company, the sizes it comes in, whether it is sterile, single-use or prescription-only, its MRI safety rating, its storage conditions and the premarket submissions behind it. This is how to turn a barcode on a device into everything FDA knows about it. No API key required.

**Inputs**

- Device identifier (DI) (`device_identifiers`, list): The identifier from the device's barcode. Both the primary and any package identifiers are searched.
- Brand name (`brand_names`, list): The device's trade name.
- Company (`companies`, list): The labeler that publishes the UDI record.
- Catalog number (`catalog_numbers`, list): The company's own catalogue number for the device.
- Version or model number (`model_numbers`, list): The version or model the record is for.
- Product code (`product_codes`, list): FDA's three-letter code for the kind of device, such as LRO or DXN. Find one with 'Search device classifications'.
- GMDN term (`gmdn_terms`, list): The Global Medical Device Nomenclature term for the kind of device, which is how UDI records are categorised internationally.
- Distribution status (`distribution_status`, text): Whether the device is still commercially distributed. One of: `In Commercial Distribution`, `Not in Commercial Distribution` (No longer in commercial distribution).
- MRI safety (`mri_safety`, text): The device's MRI safety rating. Most records say nothing about MRI safety at all. One or more of: `MR Safe`, `MR Conditional`, `MR Unsafe`, `Labeling does not contain MRI Safety Information` (The labeling says nothing about MRI safety).
- Issuing agency (`issuing_agencies`, text): Which agency issued the identifier: GS1, HIBCC, ICCBBA or NDC.
- Only devices that are (`attributes`, text): The yes/no properties the device must have. Choosing several narrows to devices that carry all of them. One or more of: `sterilization.is_sterile` (Sterile), `sterilization.is_sterilization_prior_use` (Needs sterilizing before use), `is_single_use` (Single use), `is_rx` (Prescription only), `is_otc` (Over the counter), `is_kit` (Sold as a kit), `is_combination_product` (A combination product), `is_hct_p` (A human cell or tissue product), `is_direct_marking_exempt` (Exempt from direct marking), `is_pm_exempt` (Exempt from premarket submission), and 3 more.
- Published from (`published_from`, date): Only include records published on or after this date.
- Published to (`published_to`, date): Only include records published on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `publish_date` (Date the record was published), `commercial_distribution_end_date` (Date distribution ended), `public_version_date` (Date of this public version).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/udi",
  "dataset_label": "Unique Device Identifiers",
  "has_more": true,
  "last_updated": "2026-08-03",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "brand_name:(\"Bard\" OR \"BARD\" OR \"bard\")",
  "results": [
    {
      "brand_name": "Bard\u00ae Dimension\u00ae Stone Basket",
      "catalog_number": "043313",
      "commercial_distribution_end_date": null,
      "commercial_distribution_status": "In Commercial Distribution",
      "company_name": "C. R. Bard, Inc.",
      "customer_contacts": [
        {
          "email": "medical.services@crbard.com",
          "phone": "+1(800)526-4455"
        }
      ],
      "device_count_in_base_package": "1",
      "device_description": "Bard\u00ae Dimension\u00ae Stone Basket",
      "device_sizes": [
        {
          "type": "Length",
          "unit": "Centimeter",
          "value": "115"
        },
        {
          "type": "Catheter Gauge",
          "unit": "French",
          "value": "3"
        }
      ],
      "gmdn_terms": [
        {
          "code": "46452",
          "code_status": "Active",
          "definition": "A flexible, manual instrument designed to trap/retrieve biliary and/or urinary stones (gallbladder and/or renal/ureteric calculi) from the body during an ope...",
          "implantable": "false",
          "name": "Biliary/urinary stone retrieval basket, single-use"
        }
      ],
      "has_expiration_date": "true",
      "has_lot_or_batch_number": "true",
      "has_serial_number": "false",
      "identifiers": [
        {
          "id": "00801741066849",
          "issuing_agency": "GS1",
          "type": "Primary"
        }
      ],
      "is_combination_product": "false",
      "is_hct_p": "false",
      "is_kit": "false",
      "is_otc": "false",
      "is_rx": "true",
      "is_single_use": "true",
      "labeler_duns_number": "016898496",
      "mri_safety": "Labeling does not contain MRI Safety Information",
      "premarket_submissions": null,
      "product_codes": [
        {
          "code": "FFL",
          "name": "DISLODGER, STONE, BASKET, URETERAL, METAL",
          "openfda": {
            "device_class": "2",
            "device_name": "Dislodger, Stone, Basket, Ureteral, Metal",
            "medical_specialty_description": "Gastroenterology, Urology",
            "regulation_number": "876.4680"
          }
        }
      ],
      "public_device_record_key": "60b60a4f-09c1-4b27-87c7-6343587a1b0f",
      "public_version_date": "2020-11-06",
      "public_version_number": "4",
      "public_version_status": "Update",
      "publish_date": "2016-09-02",
      "record_key": null,
      "record_status": "Published",
      "sterilization": {
        "is_sterile": "true",
        "is_sterilization_prior_use": "false"
      },
      "storage": null,
      "version_or_model_number": "043313"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/udi/",
  "total_count": 1412
}
```

### Search device recall enforcement reports

Search device recalls in the same enforcement format FDA uses for drugs and food, so they carry the Class I / II / III hazard classification and can be filtered the same way. This is the action for 'every Class I recall this month, whatever kind of product'. Use 'Search device recalls' for the root cause the device centre assigned. No API key required.

**Inputs**

- Recall class (`classifications`, text): FDA's hazard classification. Class I is the serious one: a product that could cause serious injury or death. Choose several to include any of them, or none to include every class. One or more of: `Class I` (Class I: could cause serious injury or death), `Class II` (Class II: could cause temporary or reversible harm), `Class III` (Class III: unlikely to cause harm), `Not Yet Classified`.
- Recall status (`statuses`, text): Where the recall has got to. Ongoing means product is still being recovered; terminated means FDA considers it finished. One or more of: `Ongoing`, `Completed`, `Terminated`.
- Recalling firm (`recalling_firms`, list): The company that issued the recall. Part of the name is enough, and the capitalisation does not matter.
- Who started the recall (`voluntary_mandated`, text): Whether the firm recalled the product itself or FDA required it. Nearly all recalls are voluntary. One of: `Voluntary: Firm Initiated` (Voluntary: the firm started it), `FDA Mandated` (Mandated by FDA).
- Recall number (`recall_numbers`, list): FDA's own identifier for the recall, if you already have it.
- Product description contains (`product_description_contains`, text): A word or phrase from the description of the recalled product, such as a brand name or a strength.
- Reason contains (`reason_contains`, text): A word or phrase from FDA's stated reason for the recall, such as 'contamination', 'mislabeling' or 'sterility'.
- Reported from (`reported_from`, date): Only include recalls FDA reported on or after this date.
- Reported to (`reported_to`, date): Only include recalls FDA reported on or before this date.
- Started from (`initiated_from`, date): Only include recalls the firm started on or after this date.
- Started to (`initiated_to`, date): Only include recalls the firm started on or before this date.
- State (`states`, text): The recalling firm's state. The list is read from the recall data.
- Country (`countries`, list): The recalling firm's country.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `report_date` (Date the recall was reported), `recall_initiation_date` (Date the recall was started), `center_classification_date` (Date FDA classified the recall), `termination_date` (Date the recall was terminated).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/enforcement",
  "dataset_label": "Device recall enforcement reports",
  "has_more": true,
  "last_updated": "2026-08-12",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "classification.exact:\"Class II\"",
  "results": [
    {
      "center_classification_date": "2019-05-23",
      "city": "Winterthur",
      "classification": "Class II",
      "code_info": "All items marked with \"Normed\" are affected",
      "country": "Switzerland",
      "distribution_pattern": "The products were distributed to the following US states:  AL, AR, AZ, CA, CO, FL, GA, HI, IA, IL, IN, KS, KY, LA, MA, MD, ME, MI, MN, MO, MT, NC, ND, NE, NH...",
      "event_id": "82642",
      "initial_firm_notification": "Letter",
      "openfda": {},
      "product_code": null,
      "product_description": "V-TEK\", IVP step drill 2.5-3.9x124mm, 16mm stop, contra-angle, Item Number 502015637",
      "product_quantity": "N/A",
      "product_type": "Devices",
      "reason_for_recall": "An investigation identified that the products were possibly manufactured from a different material than defined in the applicable specifications.",
      "recall_initiation_date": "2019-04-08",
      "recall_number": "Z-1448-2019",
      "recalling_firm": "Zimmer GmbH",
      "report_date": "2019-05-29",
      "state": "N/A",
      "status": "Terminated",
      "termination_date": "2020-05-11",
      "voluntary_mandated": "Voluntary: Firm initiated"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/enforcement/",
  "total_count": 35105
}
```

### Search device recalls

Search device recalls as FDA's device centre files them, with the root cause it assigned (device design, software, process control, packaging) and the correcting action the firm took. Filter by firm, product code, status, root cause or date. Use 'Search device recall enforcement reports' instead when you want the hazard classification. No API key required.

**Inputs**

- Recall number (`recall_numbers`, list): The device centre's own recall number.
- Recalling firm (`recalling_firms`, list): The company that issued the recall. Part of the name is enough, and the capitalisation does not matter.
- Product code (`product_codes`, list): FDA's three-letter code for the kind of device, such as LRO or DXN. Find one with 'Search device classifications'.
- 510(k) number (`k_numbers`, list): Narrow to recalls of a device cleared under this 510(k).
- Recall status (`statuses`, text): Where the recall has got to. The list is read from the recall data.
- Root cause (`root_causes`, text): The cause FDA assigned. This is the field to group by when asking what actually goes wrong with devices.
- Device class (`device_class`, text): FDA's risk class for the device. Class III is the highest risk and the one that needs premarket approval. One of: `1` (Class I (low to moderate risk)), `2` (Class II (moderate to high risk)), `3` (Class III (high risk)), `U` (Unclassified), `N` (Not classified), `F` (Humanitarian Device Exemption).
- Product description contains (`product_description_contains`, text): A word or phrase from the description of the recalled product, such as a brand name or a strength.
- Reason contains (`reason_contains`, text): A word or phrase from FDA's stated reason for the recall, such as 'contamination', 'mislabeling' or 'sterility'.
- Started from (`initiated_from`, date): Only include recalls the firm started on or after this date.
- Started to (`initiated_to`, date): Only include recalls the firm started on or before this date.
- Posted from (`posted_from`, date): Only include recalls FDA posted on or after this date.
- Posted to (`posted_to`, date): Only include recalls FDA posted on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `event_date_initiated` (Date the recall was started), `event_date_posted` (Date the recall was posted), `event_date_created` (Date the record was created), `event_date_terminated` (Date the recall was terminated).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "device/recall",
  "dataset_label": "Device recalls",
  "has_more": true,
  "last_updated": "2026-08-20",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "event_date_initiated:[2024-01-01 TO *]",
  "results": [
    {
      "action": "On 7/31/24, Safety Alert notices were sent to customers, healthcare professionals, distributors who were told the following:\n\n1) Always pay attention to aler...",
      "additional_info_contact": "Medtronic 24-Hr Technical Support\n800-646-4633",
      "cfres_id": "209491",
      "city": "Northridge",
      "code_info": "REF/UDI-DI(GTIN): \n\nMMT-1714/00643169782396, 00763000253059;\n\nMMT-1715/00643169873841, 00763000190446, 00643169752726, 643169873834, 00763000317591, 00763000...",
      "country": null,
      "distribution_pattern": "US: CT, MI, PA, WA, IA, NY, ND, AZ, TX, OH, NC, AL, MN, IN, NJ, KY, UT, CA, FL, VA, MS, NM, NV, TN, GA, MA, NH, OK, VT, IL, ME, SC, LA, WY, RI, SD, KS, WI, M...",
      "event_date_created": null,
      "event_date_initiated": "2024-07-31",
      "event_date_posted": "2024-10-03",
      "event_date_terminated": null,
      "firm_fei_number": "3003166194",
      "k_numbers": null,
      "openfda": {
        "device_class": "3",
        "device_class_label": "Class III (high risk)",
        "device_name": "Automated Insulin Dosing , Threshold Suspend",
        "fei_number": [
          "3016540876",
          "3003007876"
        ],
        "medical_specialty_description": "Unknown",
        "pma_number": [
          "P180008",
          "P120010"
        ],
        "registration_number": [
          "3016540876",
          "3009171251"
        ],
        "regulation_number": ""
      },
      "pma_numbers": [
        "P150001"
      ],
      "postal_code": "91325-1219",
      "product_code": "OZO",
      "product_description": "MiniMed 630G Insulin Pump, REF: MMT-1515, MMT-1714, MMT-1715, MMT-1754, MMT-1755;\nMiniMed 700G Insulin Pump, REF: MMT-1800, MMT-1801, MMT-1805, MMT-1850, MMT...",
      "product_quantity": "24,595",
      "product_res_number": "Z-0001-2025",
      "reason_for_recall": "Insulin pumps that have been dropped, bumped, or experienced physical impact may have damage to internal electrical components, which may cause reduced pump ...",
      "recall_status": "Open, Classified",
      "recalling_firm": "Medtronic MiniMed, Inc.",
      "res_event_number": "95121",
      "root_cause_description": "Device Design",
      "state": "CA"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/device/recall/",
  "total_count": 7677
}
```

### Search drug adverse events

Search the 20 million adverse event and medication error reports in FDA's FAERS database: what reaction was reported, which drug was suspected, the patient's age and sex, whether the outcome was serious, and who reported it. Filter by reaction, drug, country, patient group and date, and every code the report carries comes back with its meaning beside it. A report is one person's account, not proof the drug caused the reaction. No API key required.

**Inputs**

- Reaction (`reactions`, text): The reactions reported, in MedDRA's own wording. Choose several to find reports mentioning any of them. The list is read from FAERS, with how many reports use each term.
- Drug (`drug_names`, list): The drugs to look for, by brand name, generic name or active substance. All three are searched, so either kind of name works, and capitalisation does not matter.
- Drug class (`pharmacologic_classes`, list): FDA's established pharmacologic class, for asking about a whole family of drugs at once rather than one product.
- Patient sex (`patient_sex`, text): Only include reports about patients of this sex. One of: `1` (Male), `2` (Female), `0` (Unknown).
- Patient age group (`patient_age_group`, text): Only include reports about patients in this age band. Many reports leave it blank, so this narrows harder than it looks. One of: `1` (Neonate (under 1 month)), `2` (Infant (1 month to 2 years)), `3` (Child (2 to 12 years)), `4` (Adolescent (12 to 18 years)), `5` (Adult (18 to 65 years)), `6` (Elderly (over 65 years)).
- Seriousness (`seriousness`, text): FAERS' own overall flag: a serious report is one where the event caused death, a life-threatening condition, hospitalization, disability, a congenital anomaly or another serious outcome. One of: `any` (Any (no filter)), `serious` (Serious outcomes only), `non_serious` (Non-serious outcomes only).
- Specific serious outcome (`serious_outcomes`, text): Narrow to reports recording one of these outcomes in particular. Choosing any of them already means the report was serious. One or more of: `seriousnessdeath` (Death), `seriousnesslifethreatening` (Life threatening), `seriousnesshospitalization` (Hospitalization), `seriousnessdisabling` (Disability), `seriousnesscongenitalanomali` (Congenital anomaly), `seriousnessother` (Other serious outcome).
- Country the event happened in (`country`, text): Only include reports of events that occurred in this country. The list is read from FAERS, with how many reports come from each.
- Reported by (`reporter_type`, text): Who sent the report to the manufacturer or to FDA. One of: `1` (Physician), `2` (Pharmacist), `3` (Other health professional), `4` (Lawyer), `5` (Consumer or non-health professional).
- Report type (`report_type`, text): Spontaneous reports are the ordinary case: someone reported the event of their own accord rather than as part of a study. One of: `1` (Spontaneous), `2` (Report from a study), `3` (Other), `4` (Not available to the sender).
- Received from (`received_from`, date): Only include reports FDA received on or after this date.
- Received to (`received_to`, date): Only include reports FDA received on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `receivedate` (Date FDA first received the report), `receiptdate` (Date of the most recent version of the report), `transmissiondate` (Date FDA published the report).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/event",
  "dataset_label": "Drug adverse events",
  "has_more": true,
  "last_updated": "2026-07-30",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "patient.reaction.reactionmeddrapt.exact:\"Nausea\"",
  "results": [
    {
      "companynumb": "US-GILEAD-2012-0061187",
      "occurcountry": "US",
      "patient": {
        "drug": [
          {
            "drugauthorizationnumb": "022081",
            "drugcharacterization": "1",
            "drugcharacterization_label": "Suspect",
            "medicinalproduct": "LETAIRIS"
          }
        ],
        "patientagegroup": "5",
        "patientagegroup_label": "Adult (18 to 65 years)",
        "patientonsetage": "49",
        "patientonsetageunit": "801",
        "patientsex": "1",
        "patientsex_label": "Male",
        "reaction": [
          {
            "reactionmeddrapt": "Nausea",
            "reactionmeddraversionpt": "18.1",
            "reactionoutcome": "6",
            "reactionoutcome_label": "Unknown"
          }
        ]
      },
      "primarysource": {
        "qualification": "5",
        "qualification_label": "Consumer or non-health professional",
        "reportercountry": "US"
      },
      "primarysourcecountry": "US",
      "receiptdate": "2015-08-12",
      "receivedate": "2014-03-12",
      "receiver": {
        "receiverorganization": "FDA",
        "receivertype": "6"
      },
      "reporttype": "1",
      "reporttype_label": "Spontaneous",
      "safetyreportid": "10003372",
      "safetyreportversion": "2",
      "sender": {
        "senderorganization": "FDA-Public Use",
        "sendertype": "2"
      },
      "serious": "2",
      "serious_label": "Not serious",
      "seriousnessdeath": null,
      "seriousnesshospitalization": null,
      "transmissiondate": "2015-11-25"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/event/",
  "total_count": 778542
}
```

### Search drug approvals

Search Drugs@FDA: every drug application FDA has acted on, brand-name (NDA), generic (ANDA) and biologic (BLA), with the products approved under it and the full history of submissions and supplements. This is where to look up who sponsors a drug, when it was approved, and what has been filed against the application since. No API key required.

**Inputs**

- Application number (`application_numbers`, list): FDA application numbers, including the prefix, if you already have them.
- Application type (`application_type`, text): Narrow to one kind of application. FDA writes the kind into the number itself, so this matches on the number's prefix. One of: `NDA` (NDA: a brand-name drug), `ANDA` (ANDA: a generic drug), `BLA` (BLA: a biologic).
- Sponsor (`sponsors`, list): The company that holds the application.
- Brand name (`brand_names`, list): The trade name of a product under the application.
- Generic name (`generic_names`, list): The non-proprietary name of the drug.
- Active ingredient (`active_ingredients`, list): An ingredient a product under the application contains.
- Marketing status (`marketing_statuses`, text): Whether the products are prescription, over-the-counter or discontinued. The list is read from Drugs@FDA.
- Route of administration (`routes`, text): How the approved products are taken.
- Dosage form (`dosage_forms`, text): The form the approved products take.
- Submission type (`submission_type`, text): ORIG is the original application; SUPPL is a supplement filed against it afterwards.
- Submission status (`submission_status`, text): AP is approved; TA is tentatively approved.
- Review priority (`review_priority`, text): Whether FDA gave the submission a priority review rather than a standard one.
- Decided from (`decided_from`, date): Only include applications with a submission decided on or after this date.
- Decided to (`decided_to`, date): Only include applications with a submission decided on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `submissions.submission_status_date` (Date of the submission decision).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/drugsfda",
  "dataset_label": "Drug approvals (Drugs@FDA)",
  "has_more": true,
  "last_updated": "2026-08-21",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "application_number:\"NDA021436\"",
  "results": [
    {
      "application_number": "NDA021436",
      "drugs_at_fda_url": "https://www.accessdata.fda.gov/scripts/cder/daf/index.cfm?event=overview.process&ApplNo=021436",
      "openfda": {
        "application_number": [
          "NDA021436"
        ],
        "brand_name": [
          "ABILIFY"
        ],
        "generic_name": [
          "ARIPIPRAZOLE"
        ],
        "manufacturer_name": [
          "Otsuka America Pharmaceutical, Inc."
        ],
        "package_ndc": [
          "59148-006-13",
          "59148-006-92"
        ],
        "product_ndc": [
          "59148-006",
          "59148-007"
        ],
        "product_type": [
          "HUMAN PRESCRIPTION DRUG"
        ],
        "route": [
          "ORAL"
        ],
        "rxcui": [
          "349490",
          "349545"
        ],
        "spl_id": [
          "1b189d15-798d-4bed-a93d-a543ed7abd81"
        ],
        "spl_set_id": [
          "c040bd1d-45b7-49f2-93ea-aed7220b30ac"
        ],
        "substance_name": [
          "ARIPIPRAZOLE"
        ]
      },
      "products": [
        {
          "active_ingredients": [
            {
              "name": "ARIPIPRAZOLE",
              "strength": "2MG"
            }
          ],
          "brand_name": "ABILIFY",
          "dosage_form": "TABLET",
          "marketing_status": "Prescription",
          "product_number": "006",
          "reference_drug": "Yes",
          "reference_standard": "No",
          "route": "ORAL",
          "te_code": "AB"
        },
        {
          "active_ingredients": [
            {
              "name": "ARIPIPRAZOLE",
              "strength": "30MG"
            }
          ],
          "brand_name": "ABILIFY",
          "dosage_form": "TABLET",
          "marketing_status": "Prescription",
          "product_number": "004",
          "reference_drug": "Yes",
          "reference_standard": "No",
          "route": "ORAL",
          "te_code": "AB"
        }
      ],
      "sponsor_name": "OTSUKA",
      "submissions": [
        {
          "application_docs": [
            {
              "date": "2006-09-20",
              "id": "36917",
              "type": "Label",
              "url": "http://www.accessdata.fda.gov/drugsatfda_docs/label/2006/021436s014,021713s009lbl.pdf"
            },
            {
              "date": "2006-09-20",
              "id": "5362",
              "type": "Letter",
              "url": "http://www.accessdata.fda.gov/drugsatfda_docs/appletter/2006/021436s014, 021713s009ltr.pdf"
            }
          ],
          "review_priority": "STANDARD",
          "submission_class_code": "LABELING",
          "submission_class_code_description": "Labeling",
          "submission_number": "14",
          "submission_status": "AP",
          "submission_status_date": "2006-09-18",
          "submission_type": "SUPPL"
        },
        {
          "application_docs": [
            {
              "date": "2004-10-04",
              "id": "15455",
              "type": "Label",
              "url": "http://www.accessdata.fda.gov/drugsatfda_docs/label/2004/21436s002lbl.pdf"
            },
            {
              "date": "2013-05-10",
              "id": "21653",
              "type": "Review",
              "url": "http://www.accessdata.fda.gov/drugsatfda_docs/nda/2004/021436Orig1s002.pdf"
            }
          ],
          "review_priority": "STANDARD",
          "submission_class_code": "EFFICACY",
          "submission_class_code_description": "Efficacy",
          "submission_number": "2",
          "submission_status": "AP",
          "submission_status_date": "2004-09-29",
          "submission_type": "SUPPL"
        }
      ]
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/drugsfda/",
  "total_count": 1
}
```

### Search drug labels

Search the prescribing information published for every marketed drug: the boxed warning, indications, dosage, contraindications, adverse reactions, interactions and the rest of the package insert. Choose which sections to return so a step brings back the boxed warning rather than the whole insert, and search inside one section to find, say, every label whose warnings mention a particular risk. No API key required.

**Inputs**

- Brand name (`brand_names`, list): The drug's trade name, as printed on the box.
- Generic name (`generic_names`, list): The drug's non-proprietary name.
- Labeler (`manufacturers`, list): The company that publishes the label.
- Active substance (`substances`, list): The active ingredient, by its FDA substance name.
- Route of administration (`routes`, text): How the drug is taken. The list is read from the label data, with how many labels use each route.
- Product type (`product_type`, text): Prescription, over-the-counter, or one of the biologic types.
- Search inside this section (`section`, text): Restrict the text search below to one section of the label, so 'lactose' finds labels whose ingredients list it rather than every mention anywhere. One of: `boxed_warning` (Boxed warning), `indications_and_usage` (Indications and usage), `dosage_and_administration` (Dosage and administration), `dosage_forms_and_strengths` (Dosage forms and strengths), `contraindications`, `warnings`, `warnings_and_cautions` (Warnings and cautions), `adverse_reactions` (Adverse reactions), `drug_interactions` (Drug interactions), `use_in_specific_populations` (Use in specific populations), and 23 more.
- That section contains (`section_contains`, text): A word or phrase to find inside the section chosen above. Needs a section to be chosen.
- Only labels with a boxed warning (`has_boxed_warning`, true/false): A boxed warning is FDA's strongest, so this narrows to the drugs carrying one.
- Effective from (`effective_from`, date): Only include labels effective on or after this date.
- Effective to (`effective_to`, date): Only include labels effective on or before this date.
- Sections to return (`sections`, text): Which parts of the label to bring back. A full label carries up to 84 sections and can run to a megabyte, so nothing but the identifying fields is returned until you choose. Every result also lists which sections it has. One or more of: `boxed_warning` (Boxed warning), `indications_and_usage` (Indications and usage), `dosage_and_administration` (Dosage and administration), `dosage_forms_and_strengths` (Dosage forms and strengths), `contraindications`, `warnings`, `warnings_and_cautions` (Warnings and cautions), `adverse_reactions` (Adverse reactions), `drug_interactions` (Drug interactions), `use_in_specific_populations` (Use in specific populations), and 23 more.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `effective_time` (Label effective date).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/label",
  "dataset_label": "Drug product labels",
  "has_more": true,
  "last_updated": "2026-08-22",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "openfda.brand_name:(\"Tylenol\" OR \"TYLENOL\" OR \"tylenol\")",
  "results": [
    {
      "available_sections": [
        "active_ingredient",
        "ask_doctor"
      ],
      "dailymed_url": "https://dailymed.nlm.nih.gov/dailymed/drugInfo.cfm?setid=015a6179-bacb-452d-b594-4de628ddc11d",
      "effective_time": "2024-11-07",
      "id": "22d94fd9-9488-a812-e063-6394a90a7ffc",
      "indications_and_usage": [
        "Uses temporarily relieves minor aches and pains due to: the common cold headache backache minor pain of arthritis toothache muscular aches premenstrual and m..."
      ],
      "openfda": {
        "application_number": [
          "M013"
        ],
        "brand_name": [
          "TYLENOL Extra Strength"
        ],
        "generic_name": [
          "ACETAMINOPHEN"
        ],
        "manufacturer_name": [
          "Kenvue Brands LLC"
        ],
        "package_ndc": [
          "50580-590-01",
          "50580-590-02"
        ],
        "product_ndc": [
          "50580-590"
        ],
        "product_type": [
          "HUMAN OTC DRUG"
        ],
        "route": [
          "ORAL"
        ],
        "rxcui": [
          "198440",
          "209459"
        ],
        "spl_id": [
          "22d94fd9-9488-a812-e063-6394a90a7ffc"
        ],
        "spl_set_id": [
          "015a6179-bacb-452d-b594-4de628ddc11d"
        ],
        "substance_name": [
          "ACETAMINOPHEN"
        ]
      },
      "set_id": "015a6179-bacb-452d-b594-4de628ddc11d",
      "version": "11",
      "warnings": [
        "Warnings Liver warning This product contains acetaminophen. Severe liver damage may occur if you take more than 4,000 mg of acetaminophen in 24 hours with ot..."
      ]
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/label/",
  "total_count": 118
}
```

### Search drug products (NDC directory)

Search the National Drug Code directory: every drug product listed with FDA, with its NDC, brand and generic names, labeler, dosage form, route, active ingredients and strengths, package sizes, DEA schedule and marketing dates. This is the action for turning an NDC into a product, or a product into every package it is sold in. No API key required.

**Inputs**

- NDC code (`ndc_codes`, list): National Drug Codes to look up. Either the product code (0002-4462) or a package code (0002-4462-01) works. Both are searched.
- Brand name (`brand_names`, list): The product's trade name.
- Generic name (`generic_names`, list): The product's non-proprietary name.
- Labeler (`labelers`, list): The company whose name is on the package.
- Active ingredient (`active_ingredients`, list): An ingredient the product must contain.
- Dosage form (`dosage_forms`, text): Tablet, capsule, injection and so on. The list is read from the directory, with how many products use each form.
- Route of administration (`routes`, text): How the product is taken.
- Marketing category (`marketing_category`, text): Which regulatory route put the product on the market: NDA for a brand-name drug, ANDA for a generic, an OTC monograph for a shelf medicine.
- Product type (`product_type`, text): Prescription, over-the-counter, or a bulk ingredient.
- DEA schedule (`dea_schedule`, text): Only include controlled substances in this schedule. Most products are not controlled and carry no schedule at all. One of: `CI` (Schedule I), `CII` (Schedule II), `CIII` (Schedule III), `CIV` (Schedule IV), `CV` (Schedule V).
- Only products still marketed (`currently_marketed`, true/false): Leave out products whose marketing has ended. The directory keeps a product after it stops being sold, with an end date set.
- Marketing started from (`marketing_start_from`, date): Only include products first marketed on or after this date.
- Marketing started to (`marketing_start_to`, date): Only include products first marketed on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `marketing_start_date` (Marketing start date), `marketing_end_date` (Marketing end date), `listing_expiration_date` (Listing expiration date).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/ndc",
  "dataset_label": "National Drug Code directory",
  "has_more": true,
  "last_updated": "2026-08-21",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "generic_name:(\"ibuprofen\" OR \"IBUPROFEN\" OR \"Ibuprofen\")",
  "results": [
    {
      "active_ingredients": [
        {
          "name": "IBUPROFEN",
          "strength": "200 mg/1"
        },
        {
          "name": "DIPHENHYDRAMINE CITRATE",
          "strength": "38 mg/1"
        }
      ],
      "application_number": null,
      "brand_name": null,
      "dailymed_url": null,
      "dea_schedule": null,
      "dea_schedule_label": null,
      "dosage_form": "TABLET, COATED",
      "finished": false,
      "generic_name": "ibuprofen, diphenhydramine citrate",
      "labeler_name": "L. Perrigo Company",
      "marketing_category": "DRUG FOR FURTHER PROCESSING",
      "marketing_end_date": null,
      "marketing_start_date": "2009-11-24",
      "openfda": {},
      "packaging": [
        {
          "description": "1 BAG in 1 DRUM (0113-4011-00)  / 155280 TABLET, COATED in 1 BAG",
          "marketing_start_date": "24-NOV-09",
          "package_ndc": "0113-4011-00"
        }
      ],
      "pharm_class": null,
      "product_id": "0113-4011_aa69b1b9-4993-4ea2-ab3d-e29c6a5eed8e",
      "product_ndc": "0113-4011",
      "product_type": "DRUG FOR FURTHER PROCESSING",
      "route": null,
      "spl_id": "aa69b1b9-4993-4ea2-ab3d-e29c6a5eed8e"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/ndc/",
  "total_count": 1487
}
```

### Search drug recalls

Search FDA's drug recall enforcement reports: what was recalled, by whom, why, how much of it, where it was distributed, and how dangerous FDA judged it. Filter by hazard class, status, firm, state and date. Run it on a schedule with a date filter to be told about new Class I recalls as they are posted. No API key required.

**Inputs**

- Recall class (`classifications`, text): FDA's hazard classification. Class I is the serious one: a product that could cause serious injury or death. Choose several to include any of them, or none to include every class. One or more of: `Class I` (Class I: could cause serious injury or death), `Class II` (Class II: could cause temporary or reversible harm), `Class III` (Class III: unlikely to cause harm), `Not Yet Classified`.
- Recall status (`statuses`, text): Where the recall has got to. Ongoing means product is still being recovered; terminated means FDA considers it finished. One or more of: `Ongoing`, `Completed`, `Terminated`.
- Recalling firm (`recalling_firms`, list): The company that issued the recall. Part of the name is enough, and the capitalisation does not matter.
- Who started the recall (`voluntary_mandated`, text): Whether the firm recalled the product itself or FDA required it. Nearly all recalls are voluntary. One of: `Voluntary: Firm Initiated` (Voluntary: the firm started it), `FDA Mandated` (Mandated by FDA).
- Recall number (`recall_numbers`, list): FDA's own identifier for the recall, if you already have it.
- Product description contains (`product_description_contains`, text): A word or phrase from the description of the recalled product, such as a brand name or a strength.
- Reason contains (`reason_contains`, text): A word or phrase from FDA's stated reason for the recall, such as 'contamination', 'mislabeling' or 'sterility'.
- Reported from (`reported_from`, date): Only include recalls FDA reported on or after this date.
- Reported to (`reported_to`, date): Only include recalls FDA reported on or before this date.
- Started from (`initiated_from`, date): Only include recalls the firm started on or after this date.
- Started to (`initiated_to`, date): Only include recalls the firm started on or before this date.
- Brand name (`brand_names`, list): Narrow to recalls of a particular brand, where FDA matched the recalled product to a drug listing.
- Generic name (`generic_names`, list): Narrow to recalls of a particular generic drug.
- State (`states`, text): The recalling firm's state. The list is read from the recall data, with how many recalls come from each.
- Country (`countries`, text): The recalling firm's country.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `report_date` (Date the recall was reported), `recall_initiation_date` (Date the recall was started), `center_classification_date` (Date FDA classified the recall), `termination_date` (Date the recall was terminated).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/enforcement",
  "dataset_label": "Drug recalls",
  "has_more": true,
  "last_updated": "2026-08-12",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "classification.exact:\"Class I\"",
  "results": [
    {
      "center_classification_date": "2018-09-07",
      "city": "Olive Branch",
      "classification": "Class I",
      "code_info": "Lot #: 15617VP03, 15617VP01, 15617VP-02, Exp 7/31/2019;  15617VP06, 15617VP05, Exp 11/30/2019; 15617VP04, 15618004, 15618002, Exp 12/31/2019; 15618009, 15618...",
      "country": "United States",
      "distribution_pattern": "Nationwide in the USA and Puerto Rico",
      "event_id": "80719",
      "initial_firm_notification": "Letter",
      "openfda": {},
      "product_description": "Levothyroxine and Liothyronine (Thyroid Tablets, USP), 1 grain (60 mg), 100-count bottles, Rx Only, Manufactured for: Westminster Pharmaceuticals, LLC, 154 D...",
      "product_quantity": "Unknown",
      "product_type": "Drugs",
      "reason_for_recall": "Failed Content Uniformity Specifications: Product was manufactured using an adulterated active pharmaceutical ingredient; additionally, lack of process contr...",
      "recall_initiation_date": "2018-08-03",
      "recall_number": "D-1178-2018",
      "recalling_firm": "Westminster Pharmaceuticals LLC",
      "report_date": "2018-08-29",
      "state": "MS",
      "status": "Terminated",
      "termination_date": "2020-06-03",
      "voluntary_mandated": "Voluntary: Firm initiated"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/enforcement/",
  "total_count": 1736
}
```

### Search drug shortages

Search FDA's drug shortage database: which drugs are in short supply, in which presentations, why, what the company says about availability, and whether the shortage is current or resolved. Run it on a schedule filtered to your therapeutic categories to be told when something you depend on goes short. No API key required.

**Inputs**

- Generic name (`generic_names`, list): The drug's non-proprietary name.
- Brand name (`proprietary_names`, list): The drug's trade name, where the entry records one.
- Company (`companies`, list): The company reporting the shortage.
- Package NDC (`package_ndcs`, list): The exact package the shortage entry is about.
- Shortage status (`statuses`, text): Current, resolved, or heading for discontinuation. The list is read from the shortage data, with how many entries are in each state.
- Availability (`availability`, text): What the company says can currently be supplied.
- Therapeutic category (`therapeutic_categories`, text): The clinical area the drug belongs to, such as Anesthesia or Oncology.
- Dosage form (`dosage_forms`, text): The form the short product takes.
- Reason contains (`reason_contains`, text): A word or phrase from FDA's stated reason, such as 'demand increase' or 'manufacturing'.
- First posted from (`posted_from`, date): Only include shortages first posted on or after this date.
- First posted to (`posted_to`, date): Only include shortages first posted on or before this date.
- Updated from (`updated_from`, date): Only include entries updated on or after this date.
- Updated to (`updated_to`, date): Only include entries updated on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `initial_posting_date` (Date the shortage was first posted), `update_date` (Date the shortage entry was updated), `change_date` (Date the shortage status changed), `discontinued_date` (Date the product was discontinued).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/shortages",
  "dataset_label": "Drug shortages",
  "has_more": true,
  "last_updated": "2026-08-22",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "status:(\"Current\" OR \"CURRENT\" OR \"current\")",
  "results": [
    {
      "availability": "Available",
      "change_date": null,
      "company_name": "Teva Pharmaceuticals USA, Inc.",
      "contact_info": "800-545-8800",
      "discontinued_date": null,
      "dosage_form": "Capsule",
      "generic_name": "Lisdexamfetamine Dimesylate Capsule",
      "initial_posting_date": "2023-07-14",
      "openfda": null,
      "package_ndc": "0480-3564-01",
      "presentation": "Lisdexamfetamine Dimesylate, Capsule, 70 mg (NDC 0480-3564-01)",
      "proprietary_name": null,
      "related_info": null,
      "shortage_reason": null,
      "status": "Current",
      "strength": null,
      "therapeutic_category": [
        "Psychiatry"
      ],
      "update_date": "2026-08-17",
      "update_type": "Reverified"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/shortages/",
  "total_count": 1177
}
```

### Search food adverse events

Search CAERS, the reports FDA collects about foods, dietary supplements and cosmetics: the reaction, the product blamed for it, how serious the outcome was, and the consumer's age and sex. Filter by reaction, outcome, brand or food industry. A report is one person's account, not a finding that the product caused the reaction. No API key required.

**Inputs**

- Reaction (`reactions`, text): The reactions reported, in MedDRA's own wording. The list is read from CAERS, with how many reports use each term.
- Outcome (`outcomes`, text): How serious the outcome was.
- Product brand (`product_brands`, list): The brand name of the product named in the report.
- Product industry (`industries`, text): FDA's own category for the product, such as 'Vit/Min/Prot/Unconv Diet' or 'Cosmetics'.
- Product role (`product_role`, text): Whether the product was suspected of causing the event or merely being used at the time. One of: `Suspect` (Suspected of causing the event), `Concomitant` (Used at the same time, not suspected).
- Consumer gender (`consumer_gender`, text): Only include reports about consumers of this gender. One of: `Female`, `Male`, `Not Available` (Not recorded).
- Report created from (`created_from`, date): Only include reports created on or after this date.
- Report created to (`created_to`, date): Only include reports created on or before this date.
- Reaction started from (`started_from`, date): Only include reactions that started on or after this date.
- Reaction started to (`started_to`, date): Only include reactions that started on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `date_created` (Date the report was created), `date_started` (Date the reaction started).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "food/event",
  "dataset_label": "Food adverse events",
  "has_more": true,
  "last_updated": "2026-07-07",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "outcomes.exact:\"Hospitalization\"",
  "results": [
    {
      "consumer": {
        "age": "76",
        "age_unit": "year(s)",
        "gender": "Male"
      },
      "date_created": "2008-03-21",
      "date_started": "2008-01-05",
      "outcomes": [
        "Hospitalization",
        "Other Serious or Important Medical Event"
      ],
      "products": [
        {
          "industry_code": "54",
          "industry_name": "Vit/Min/Prot/Unconv Diet(Human/Animal)",
          "name_brand": "PURITAN'S PRIDE ADULT CHEWABLE PINEAPPLE FLAVORED MULTI-VITAMIN AND MINERAL SUPPLEMENT",
          "role": "SUSPECT"
        }
      ],
      "reactions": [
        "BLOOD PRESSURE INCREASED",
        "CONSTIPATION"
      ],
      "report_number": "101465"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/food/event/",
  "total_count": 23699
}
```

### Search food recalls

Search FDA's food recall enforcement reports: what was recalled, by whom, why (undeclared allergens and contamination are the usual reasons), how much of it, where it was distributed, and how dangerous FDA judged it. Run it on a schedule filtered to Class I and your state to be told about serious local recalls as they are posted. No API key required.

**Inputs**

- Recall class (`classifications`, text): FDA's hazard classification. Class I is the serious one: a product that could cause serious injury or death. Choose several to include any of them, or none to include every class. One or more of: `Class I` (Class I: could cause serious injury or death), `Class II` (Class II: could cause temporary or reversible harm), `Class III` (Class III: unlikely to cause harm), `Not Yet Classified`.
- Recall status (`statuses`, text): Where the recall has got to. Ongoing means product is still being recovered; terminated means FDA considers it finished. One or more of: `Ongoing`, `Completed`, `Terminated`.
- Recalling firm (`recalling_firms`, list): The company that issued the recall. Part of the name is enough, and the capitalisation does not matter.
- Who started the recall (`voluntary_mandated`, text): Whether the firm recalled the product itself or FDA required it. Nearly all recalls are voluntary. One of: `Voluntary: Firm Initiated` (Voluntary: the firm started it), `FDA Mandated` (Mandated by FDA).
- Recall number (`recall_numbers`, list): FDA's own identifier for the recall, if you already have it.
- Product description contains (`product_description_contains`, text): A word or phrase from the description of the recalled product, such as a brand name or a strength.
- Reason contains (`reason_contains`, text): A word or phrase from FDA's stated reason for the recall, such as 'contamination', 'mislabeling' or 'sterility'.
- Reported from (`reported_from`, date): Only include recalls FDA reported on or after this date.
- Reported to (`reported_to`, date): Only include recalls FDA reported on or before this date.
- Started from (`initiated_from`, date): Only include recalls the firm started on or after this date.
- Started to (`initiated_to`, date): Only include recalls the firm started on or before this date.
- State (`states`, text): The recalling firm's state. The list is read from the recall data, with how many recalls come from each.
- Country (`countries`, list): The recalling firm's country.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `report_date` (Date the recall was reported), `recall_initiation_date` (Date the recall was started), `center_classification_date` (Date FDA classified the recall), `termination_date` (Date the recall was terminated).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "food/enforcement",
  "dataset_label": "Food recalls",
  "has_more": true,
  "last_updated": "2026-08-12",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "classification.exact:\"Class I\"",
  "results": [
    {
      "center_classification_date": "2014-12-02",
      "city": "Miami",
      "classification": "Class I",
      "code_info": "UPC 635349 000390  Best By dates: 07/01/14 thru 12/31/14",
      "country": "United States",
      "distribution_pattern": "FL, GA. NC, and TN",
      "event_id": "69516",
      "initial_firm_notification": "Two or more of the following: Email, Fax, Letter, Press Release, Telephone, Visit",
      "openfda": {},
      "product_description": "Crema GuateLinda (Guatemalan Style Cream) in individually soft poly/plastic bags labeled in part: Lacteos Santa Martha Crema GuateLinda Guatemalan Style Crea...",
      "product_quantity": "144 pieces",
      "product_type": "Food",
      "reason_for_recall": "Virginia State (VDACS) found Listeria monocytogenes in Lacteos Santa Martha Quesito Casero Fresh Curd (Best by 9/27/14), FDA made an inspection, were the env...",
      "recall_initiation_date": "2014-10-10",
      "recall_number": "F-0609-2015",
      "recalling_firm": "Oasis Brands, Inc",
      "report_date": "2014-12-10",
      "state": "FL",
      "status": "Terminated",
      "termination_date": "2017-03-28",
      "voluntary_mandated": "Voluntary: Firm initiated"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/food/enforcement/",
  "total_count": 12863
}
```

### Search historical FDA documents

Search FDA's digitised press releases and talk papers, in full text, back through the agency's history. Filter by year, document type or a phrase in the text. Each result carries an excerpt by default and the whole document on request. No API key required.

**Inputs**

- Document type (`document_types`, text): Which kind of document: 'pr' for a press release, 'talk' for a talk paper. The list is read from the data.
- From year (`year_from`, number): Only include documents from this year onwards. From 1900 to 2100.
- To year (`year_to`, number): Only include documents up to and including this year. From 1900 to 2100.
- Text contains (`text_contains`, text): A word or phrase to find in the document's text.
- Return the full text (`include_full_text`, true/false): Bring back the whole document rather than the first thousand characters. Every result reports its full length either way.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "other/historicaldocument",
  "dataset_label": "Historical FDA documents",
  "has_more": true,
  "last_updated": "2024-03-20",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "year:[2006 TO 2006]",
  "results": [
    {
      "doc_type": "pr",
      "num_of_pages": 2,
      "text": "FDA NEWS RELEASE\nFOR IMMEDIATE RELEASE\n\nFebruary 9, 2006\n\nReport Demonstrates Benefits of Earlier Meetings with FDA to Make Drug Review Process More\nEfficien...",
      "text_length": 5140,
      "text_truncated": true,
      "year": 2006
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/other/historicaldocument/",
  "total_count": 248
}
```

### Search NSDE package records

Search the NSDE file: one row per drug package, with its eleven-digit and hyphenated NDCs, its billing unit, and the dates it started and stopped being marketed. This is the dataset billing systems reconcile against, and it covers packages the NDC directory has already dropped. No API key required.

**Inputs**

- Package NDC (`package_ndcs`, list): The package code, in either the hyphenated or the eleven-digit form. Both are searched.
- Product name (`proprietary_names`, list): The name printed on the package.
- Application number or citation (`application_numbers`, list): The application the package is marketed under, or the OTC monograph citation.
- Marketing category (`marketing_categories`, text): Which regulatory route put the package on the market. The list is read from the NSDE file.
- Dosage form (`dosage_forms`, text): The form the product takes.
- Product type (`product_types`, text): Prescription, over-the-counter, or one of the animal drug types.
- Marketing started from (`marketing_start_from`, date): Only include packages first marketed on or after this date.
- Marketing started to (`marketing_start_to`, date): Only include packages first marketed on or before this date.
- Only packages still marketed (`currently_marketed`, true/false): Leave out packages whose marketing has already ended.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `marketing_start_date` (Marketing start date), `marketing_end_date` (Marketing end date), `inactivation_date` (Date the listing was inactivated), `reactivation_date` (Date the listing was reactivated).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "other/nsde",
  "dataset_label": "NSDE package records",
  "has_more": true,
  "last_updated": "2026-08-21",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "marketing_category:(\"ANDA\" OR \"anda\" OR \"Anda\")",
  "results": [
    {
      "application_number_or_citation": "ANDA208682",
      "billing_unit": null,
      "dosage_form": "TABLET, FILM COATED",
      "inactivation_date": null,
      "marketing_category": "ANDA",
      "marketing_end_date": "2025-11-19",
      "marketing_start_date": "2019-04-16",
      "package_ndc": "69539-006-31",
      "package_ndc11": "69539000631",
      "product_type": "HUMAN PRESCRIPTION DRUG",
      "proprietary_name": "Moxifloxacin Hydrochloride Tablets, 400 Mg",
      "reactivation_date": null
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/other/nsde/",
  "total_count": 259887
}
```

### Search smokefree.gov traffic research

Search the traffic measurements FDA publishes for its smokefree.gov quit-smoking resources: page views, completions, session durations and downloads for each tool, split by whether visitors arrived from The Real Cost campaign, from a search engine, or directly. No API key required.

**Inputs**

- Metric (`metrics`, text): What was measured: page views, completions, mean session duration and so on.
- Measured resource (`variables`, text): Which page or tool the measurement is for.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "tobacco/researchsmokefree",
  "dataset_label": "Smokefree.gov traffic research",
  "has_more": true,
  "last_updated": "2026-08-17",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "",
  "results": [
    {
      "metric": "Number of Page Views",
      "traffic_referral_group": {
        "direct_traffic": "348941",
        "direct_traffic_denominator": "1864650",
        "organic_traffic": "731066",
        "organic_traffic_denominator": "1864650",
        "the_real_cost_campaign": "253555",
        "the_real_cost_campaign_denominator": "1864650"
      },
      "variable": "Teen.smokefree.gov Landing Page",
      "variable_definition": "This number represents the total number of unique, single-session visits to teen.smokefree.gov, a section of the smokefree.gov website. Repeat visitors are e..."
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/tobacco/researchsmokefree/",
  "total_count": 22
}
```

### Search substance registrations

Search FDA's Global Substance Registration System, the scientific record behind every substance it regulates: its UNII code, every name it goes by, its class, and, for chemicals, its formula, molecular weight and structure. Records are summarised by default because a full one runs to hundreds of kilobytes of structural data. No API key required.

**Inputs**

- Substance name (`names`, list): A name the substance goes by. Every recorded name is searched, including systematic and brand names.
- UNII code (`unii_codes`, list): FDA's ten-character identifier for the substance.
- Substance class (`substance_classes`, text): What kind of substance it is: a chemical, a protein, a mixture, a structurally diverse natural product, and so on.
- Molecular formula (`formula`, text): The exact molecular formula, for chemical substances.
- Only substances with a structure (`has_structure`, true/false): Narrow to substances with a recorded chemical structure, which leaves out mixtures and concepts.
- Return the full record (`include_full_record`, true/false): Bring back everything the registration system holds, including the structure files, references and relationships. Off by default: a full record can be hundreds of kilobytes, so a page of them is far more than a workflow can carry.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "other/substance",
  "dataset_label": "Substance registrations",
  "has_more": true,
  "last_updated": "2025-09-19",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "names.name:(\"ASPIRIN\" OR \"aspirin\" OR \"Aspirin\")",
  "results": [
    {
      "definition_level": "COMPLETE",
      "definition_type": "PRIMARY",
      "formula": "C9H8O4",
      "molecular_weight": "180.1578",
      "names": [
        "2-(ACETYLOXY)BENZOIC ACID",
        "2-ACETYLOXYBENZOIC ACID"
      ],
      "preferred_name": "ACETYLSALICYLIC ACID",
      "smiles": "CC(=O)Oc1ccccc1C(=O)O",
      "status": null,
      "substance_class": "chemical",
      "tags": null,
      "unii": "R16CO5Y76E",
      "uuid": "a05ec20c-8fe2-4e02-ba7f-df69e5e30248",
      "version": "108"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/other/substance/",
  "total_count": 1
}
```

### Search the Orange Book

Search the Orange Book: FDA's list of approved drug products with their therapeutic equivalence codes, the patents that cover them and the exclusivity periods that keep generics off the market. This is the action for 'which generics are equivalent to this brand', and for when a drug's protection expires. No API key required.

**Inputs**

- Application number (`application_numbers`, list): The Orange Book's own six-digit application number, without a prefix.
- Application type (`application_type`, text): Brand-name (NDA) or generic (ANDA). One of: `N` (NDA: a brand-name drug), `A` (ANDA: a generic drug).
- Applicant (`applicants`, list): The company that holds the approval.
- Brand name (`brand_names`, list): The product's trade name.
- Active ingredient (`active_ingredients`, list): An ingredient the product contains.
- Marketing status (`marketing_statuses`, text): Whether the product is prescription, over-the-counter or discontinued.
- Dosage form (`dosage_forms`, text): The form the product takes.
- Route of administration (`routes`, text): How the product is taken.
- Only reference listed drugs (`reference_listed_only`, true/false): A reference listed drug is the brand a generic must prove itself equivalent to.
- Approved from (`approved_from`, date): Only include products approved on or after this date.
- Approved to (`approved_to`, date): Only include products approved on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `approval_date` (Approval date).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "drug/orangebook",
  "dataset_label": "Orange Book",
  "has_more": true,
  "last_updated": "2026-08-22",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "approval_date:[2024-01-01 TO *]",
  "results": [
    {
      "approval_date": "2026-03-26",
      "approved_prior_to_1982": null,
      "exclusivity": null,
      "patents": null,
      "product_number": "004",
      "products": [
        {
          "active_ingredients": [
            {
              "name": "LABETALOL HYDROCHLORIDE",
              "strength": "400MG"
            }
          ],
          "application_full_name": "HERITAGE PHARMA LABS INC",
          "application_name": "HERITAGE PHARMA",
          "application_number": "074787",
          "application_type": "A",
          "brand_name": "LABETALOL HYDROCHLORIDE",
          "dosage_form": "TABLET",
          "marketing_status": "HUMAN PRESCRIPTION DRUG",
          "reference_listed_drug": false,
          "reference_standard": false,
          "route": "ORAL",
          "therapeutic_equivalence_codes": [
            "AB"
          ]
        }
      ]
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/drug/orangebook/",
  "total_count": 4208
}
```

### Search tobacco digital ad performance

Search how FDA's digital tobacco-prevention adverts performed on each channel: views, view-through rate, how long people actually watched, how much of that time they were paying attention, and whether they recognised the advert and the brand afterwards. No API key required.

**Inputs**

- Channel or format (`channels`, text): Where the advert ran and in what format. The list is read from the data.
- Advert (`ad_numbers`, list): Which advert, such as 'Ad 4'.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "tobacco/researchdigitalads",
  "dataset_label": "Tobacco digital ad performance",
  "has_more": true,
  "last_updated": "2026-08-17",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "",
  "results": [
    {
      "ad_number": "Ad 4",
      "ad_recognition": "52.15%",
      "attention_average": "59.24%",
      "attentive_seconds": "8.89s",
      "attentive_seconds_standard_deviation": "5.8",
      "attentive_vtr": "53.76%",
      "brand_recognition": "48.92%",
      "channel_or_format": "Youtube non-skippable preroll ad",
      "playback_seconds": "14.29s",
      "playback_seconds_standard_deviation": "2.6",
      "view_through_rate": "91.40%",
      "views": "186"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/tobacco/researchdigitalads/",
  "total_count": 12
}
```

### Search tobacco prevention ad studies

Search FDA's Tobacco Rapid Response ad-testing studies: how each prevention advert moved young people's beliefs about addiction, health consequences and harmful constituents, and how much, broken down by risk status, gender, age group and race or ethnicity. Filter by study or advert. No API key required.

**Inputs**

- Study (`studies`, text): Which ad-testing study the results come from. The list is read from the data.
- Advert (`ad_numbers`, list): Which advert within the study, such as 'Ad 4'.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "tobacco/researchpreventionads",
  "dataset_label": "Tobacco prevention ad studies",
  "has_more": true,
  "last_updated": "2026-08-17",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "",
  "results": [
    {
      "ad_number": "Ad 5",
      "age_group": [
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.334",
            "mean": "3.1483",
            "number": "118",
            "standard_deviation": "1.20062"
          },
          "cigarette_attitudes": {
            "effect_size": "0.304",
            "mean": "2.5847",
            "number": "118",
            "standard_deviation": "0.68346"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "-0.12",
            "mean": "3.85",
            "number": "118.00",
            "standard_deviation": "1.02"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "0.088",
            "mean": "3.7458",
            "number": "118",
            "standard_deviation": "1.03310"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        },
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.191",
            "mean": "3.3632",
            "number": "106",
            "standard_deviation": "1.06130"
          },
          "cigarette_attitudes": {
            "effect_size": "0.298",
            "mean": "2.6321",
            "number": "106",
            "standard_deviation": "0.77245"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "0.02",
            "mean": "3.63",
            "number": "106.00",
            "standard_deviation": "1.12"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "-0.056",
            "mean": "3.8019",
            "number": "106",
            "standard_deviation": "0.94536"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        }
      ],
      "full_sample": [
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.271",
            "mean": "3.2500",
            "number": "224",
            "standard_deviation": "1.13900"
          },
          "cigarette_attitudes": {
            "effect_size": "0.301",
            "mean": "2.6070",
            "number": "224",
            "standard_deviation": "0.72600"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "-0.06",
            "mean": "3.75",
            "number": "224.00",
            "standard_deviation": "1.07"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "0.021",
            "mean": "3.7720",
            "number": "224",
            "standard_deviation": "0.99100"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        }
      ],
      "gender": [
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.34",
            "mean": "3.19",
            "number": "113.00",
            "standard_deviation": "1.17"
          },
          "cigarette_attitudes": {
            "effect_size": "0.21",
            "mean": "2.63",
            "number": "113.00",
            "standard_deviation": "0.75"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "0.07",
            "mean": "3.69",
            "number": "113.00",
            "standard_deviation": "1.17"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "0.11",
            "mean": "3.77",
            "number": "113.00",
            "standard_deviation": "1.05"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        },
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.20",
            "mean": "3.32",
            "number": "111.00",
            "standard_deviation": "1.11"
          },
          "cigarette_attitudes": {
            "effect_size": "0.40",
            "mean": "2.59",
            "number": "111.00",
            "standard_deviation": "0.71"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "-0.20",
            "mean": "3.80",
            "number": "111.00",
            "standard_deviation": "0.96"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "-0.08",
            "mean": "3.77",
            "number": "111.00",
            "standard_deviation": "0.93"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        }
      ],
      "race_or_ethnicity": [
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.47",
            "mean": "3.12",
            "number": "51.00",
            "standard_deviation": "1.13"
          },
          "cigarette_attitudes": {
            "effect_size": "0.50",
            "mean": "2.67",
            "number": "51.00",
            "standard_deviation": "0.74"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "-0.01",
            "mean": "3.78",
            "number": "51.00",
            "standard_deviation": "0.99"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "0.15",
            "mean": "3.88",
            "number": "51.00",
            "standard_deviation": "0.90"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        },
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.34",
            "mean": "3.17",
            "number": "92.00",
            "standard_deviation": "1.18"
          },
          "cigarette_attitudes": {
            "effect_size": "0.43",
            "mean": "2.62",
            "number": "92.00",
            "standard_deviation": "0.74"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "0.10",
            "mean": "3.72",
            "number": "92.00",
            "standard_deviation": "1.03"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "0.14",
            "mean": "3.64",
            "number": "92.00",
            "standard_deviation": "1.05"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        }
      ],
      "risk_status": [
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.20",
            "mean": "3.41",
            "number": "74.00",
            "standard_deviation": "1.11"
          },
          "cigarette_attitudes": {
            "effect_size": "0.48",
            "mean": "2.69",
            "number": "74.00",
            "standard_deviation": "0.81"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "-0.04",
            "mean": "3.72",
            "number": "74.00",
            "standard_deviation": "0.96"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "0.16",
            "mean": "3.70",
            "number": "74.00",
            "standard_deviation": "0.99"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        },
        {
          "cigarette_addiction_beliefs": {
            "effect_size": "0.30",
            "mean": "3.17",
            "number": "150.00",
            "standard_deviation": "1.14"
          },
          "cigarette_attitudes": {
            "effect_size": "0.20",
            "mean": "2.57",
            "number": "150.00",
            "standard_deviation": "0.68"
          },
          "cigarette_harmful_and_potentially_harmful_constituents": {
            "effect_size": "-0.06",
            "mean": "3.76",
            "number": "150.00",
            "standard_deviation": "1.13"
          },
          "cigarette_health_consequences_beliefs": {
            "effect_size": "-0.04",
            "mean": "3.81",
            "number": "150.00",
            "standard_deviation": "0.99"
          },
          "smokeless_tobacco_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "smokeless_tobacco_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_addiction_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_attitudes": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_harmful_and_potentially_harmful_constituents": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          },
          "vape_health_consequences_beliefs": {
            "effect_size": "Missing",
            "mean": "Missing",
            "number": "Missing",
            "standard_deviation": "Missing"
          }
        }
      ],
      "study_name": "TRC Cigarettes Study 1"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/tobacco/researchpreventionads/",
  "total_count": 42
}
```

### Search tobacco problem reports

Search the problems the public reports to FDA about tobacco products: the health effects (seizures and breathing problems are common with vaping products) and the product defects, such as batteries overheating or foreign material in the product. Filter by product, health problem, product problem or date. No API key required.

**Inputs**

- Tobacco product (`tobacco_products`, text): The kind of product the report is about. The list is read from the reports themselves, which is worth knowing: FDA has reworded the vaping-product option several times, so several similar entries exist.
- Health problem (`health_problems`, text): The health effects the reporter described.
- Product problem (`product_problems`, text): What was wrong with the product itself.
- A non-user was affected (`non_user_affected`, text): Whether someone who does not use the product was the one harmed, such as a child or a bystander. One of: `Yes` (Yes: someone who does not use the product was affected), `No`, `Neither`, `Unknown`, `No information provided`.
- Submitted from (`submitted_from`, date): Only include reports submitted on or after this date.
- Submitted to (`submitted_to`, date): Only include reports submitted on or before this date.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Sort by (`sort_by`, text): Which date to order the results by. Leave empty for openFDA's own order. One of: `date_submitted` (Date the report was submitted).
- Order (`sort_direction`, text): Which end of the sort to start from. Defaults to newest first. One of: `desc` (Newest first), `asc` (Oldest first).
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "tobacco/problem",
  "dataset_label": "Tobacco problem reports",
  "has_more": true,
  "last_updated": "2026-07-31",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "",
  "results": [
    {
      "date_submitted": "2019-08-14",
      "nonuser_affected": "No",
      "number_health_problems": 6,
      "number_product_problems": 0,
      "number_tobacco_products": 1,
      "report_id": 965,
      "reported_health_problems": [
        "Seizure",
        "Blackout spell"
      ],
      "reported_product_problems": [
        "No information provided"
      ],
      "tobacco_products": [
        "Electronic cigarette, electronic nicotine or vaping product (E-cigarette, e-cigars, e-hookahs, e-pipes, vape pens, hookah pens, and personal vaporizers; E-li..."
      ]
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/tobacco/problem/",
  "total_count": 1383
}
```

### Search UNII codes

Search FDA's Unique Ingredient Identifier list: the ten-character code FDA assigns to every substance, paired with its preferred name and nothing else. Use it to turn a substance name into the UNII the drug and label datasets index by, or a UNII back into a name. No API key required.

**Inputs**

- Substance name (`substance_names`, list): The substance's name, or part of it.
- UNII code (`unii_codes`, list): The ten-character identifier itself.
- Words to look for (`search_text`, text): A word or phrase to look for anywhere in the record, on top of the filters above. Leave empty to rely on the filters alone.
- Number of records (`limit`, number): How many records to return (1-1000). Defaults to 25. openFDA will not return more than 1,000 in one request. From 1 to 1000.
- Skip the first (`skip`, number): How many matching records to skip before returning any, for paging through a large result set. Defaults to 0. openFDA cannot skip past 25,000; use 'Continue from' to go further. From 0 to 25000.
- Continue from (`cursor`, text): Paste the 'next_cursor' a previous run returned to carry on from where it stopped. This is the only way past 25,000 records, and it replaces 'Skip the first' when both are given.

**Outputs**

- `count` (number)
- `dataset` (text)
- `dataset_label` (text)
- `has_more` (true/false)
- `last_updated` (text)
- `limit` (number)
- `next_cursor` (text)
- `query` (text)
- `results` (list)
- `skip` (number)
- `source_url` (text)
- `total_count` (number)

**Example output**

```json
{
  "count": 1,
  "dataset": "other/unii",
  "dataset_label": "UNII codes",
  "has_more": true,
  "last_updated": "2026-08-22",
  "limit": 25,
  "next_cursor": "0=1786492800000;1=691e71b4d99d1932d4848d",
  "query": "substance_name:(\"ASPIRIN\" OR \"aspirin\" OR \"Aspirin\")",
  "results": [
    {
      "substance_name": "DIHYDROXYALUMINUM ASPIRIN",
      "unii": "20D04M9OLN"
    }
  ],
  "skip": 0,
  "source_url": "https://open.fda.gov/apis/other/unii/",
  "total_count": 18
}
```
