18 KiB
FDA Medical Device Databases
This reference covers all FDA medical device-related API endpoints accessible through openFDA.
Overview
The FDA device databases provide access to information about medical devices, including adverse events, recalls, approvals, registrations, and classification data. Medical devices range from simple items like tongue depressors to complex instruments like pacemakers and surgical robots.
Device Classification System
Medical devices are classified into three categories based on risk:
- Class I: Low risk (e.g., bandages, examination gloves)
- Class II: Moderate risk (e.g., powered wheelchairs, infusion pumps)
- Class III: High risk (e.g., heart valves, implantable pacemakers)
Available Endpoints
1. Device Adverse Events
Endpoint: https://api.fda.gov/device/event.json
Purpose: Access reports documenting serious injuries, deaths, malfunctions, and other undesirable effects from medical device use.
Data Source: Manufacturer and User Facility Device Experience (MAUDE) database
Key Fields:
device.brand_name- Brand name of devicedevice.generic_name- Generic device namedevice.manufacturer_d_name- Manufacturer namedevice.device_class- Device class (1, 2, or 3)event_type- Type of event (Death, Injury, Malfunction, Other)date_received- Date FDA received reportmdr_report_key- Unique report identifieradverse_event_flag- Whether reported as adverse eventproduct_problem_flag- Whether product problem reportedpatient.patient_problems- Patient problems/complicationsdevice.openfda.device_name- Official device namedevice.openfda.medical_specialty_description- Medical specialtyremedial_action- Actions taken (recall, repair, replace, etc.)
Common Use Cases:
- Post-market surveillance
- Safety signal detection
- Device comparison studies
- Risk analysis
- Quality improvement
Example Queries:
import requests
api_key = "YOUR_API_KEY"
url = "https://api.fda.gov/device/event.json"
# Find adverse events for a specific device
params = {
"api_key": api_key,
"search": "device.brand_name:pacemaker",
"limit": 10
}
response = requests.get(url, params=params)
data = response.json()
# Count events by type
params = {
"api_key": api_key,
"search": "device.generic_name:insulin+pump",
"count": "event_type"
}
# Find death events for Class III devices
params = {
"api_key": api_key,
"search": "event_type:Death+AND+device.device_class:3",
"limit": 50,
"sort": "date_received:desc"
}
2. Device 510(k) Clearances
Endpoint: https://api.fda.gov/device/510k.json
Purpose: Access 510(k) premarket notification data demonstrating device equivalence to legally marketed predicate devices.
Data Source: 510(k) Premarket Notifications
Key Fields:
k_number- 510(k) number (unique identifier)applicant- Company submitting 510(k)device_name- Name of devicedevice_class- Device classification (1, 2, or 3)decision_date- Date of FDA decisiondecision_description- Substantially Equivalent (SE) or Not SEproduct_code- FDA product codestatement_or_summary- Type of summary providedclearance_type- Traditional, Special, Abbreviated, etc.expedited_review_flag- Whether expedited reviewadvisory_committee- Advisory committee nameopenfda.device_name- Official device nameopenfda.device_class- Device class descriptionopenfda.medical_specialty_description- Medical specialtyopenfda.regulation_number- CFR regulation number
Common Use Cases:
- Regulatory pathway research
- Predicate device identification
- Market entry analysis
- Competitive intelligence
- Device development planning
Example Queries:
# Find 510(k) clearances by company
params = {
"api_key": api_key,
"search": "applicant:Medtronic",
"limit": 50,
"sort": "decision_date:desc"
}
response = requests.get("https://api.fda.gov/device/510k.json", params=params)
# Search for specific device type clearances
params = {
"api_key": api_key,
"search": "device_name:*surgical+robot*",
"limit": 10
}
# Get all Class III 510(k) clearances in recent year
params = {
"api_key": api_key,
"search": "device_class:3+AND+decision_date:[20240101+TO+20241231]",
"limit": 100
}
3. Device Classification
Endpoint: https://api.fda.gov/device/classification.json
Purpose: Access device classification database with medical device names, product codes, medical specialty panels, and classification information.
Data Source: FDA Device Classification Database
Key Fields:
product_code- Three-letter FDA product codedevice_name- Official device namedevice_class- Class (1, 2, or 3)medical_specialty- Medical specialty (e.g., Radiology, Cardiovascular)medical_specialty_description- Full specialty descriptionregulation_number- CFR regulation number (e.g., 21 CFR 870.2300)review_panel- FDA review paneldefinition- Official device definitionphysical_state- Solid, liquid, gastechnical_method- Method of operationtarget_area- Body area/system targetedgmp_exempt_flag- Whether exempt from Good Manufacturing Practiceimplant_flag- Whether device is implantedlife_sustain_support_flag- Whether life-sustaining/supporting
Common Use Cases:
- Device identification
- Regulatory requirement determination
- Product code lookup
- Classification research
- Device categorization
Example Queries:
# Look up device by product code
params = {
"api_key": api_key,
"search": "product_code:LWL",
"limit": 1
}
response = requests.get("https://api.fda.gov/device/classification.json", params=params)
# Find all cardiovascular devices
params = {
"api_key": api_key,
"search": "medical_specialty:CV",
"limit": 100
}
# Get all implantable Class III devices
params = {
"api_key": api_key,
"search": "device_class:3+AND+implant_flag:Y",
"limit": 50
}
4. Device Recall Enforcement Reports
Endpoint: https://api.fda.gov/device/enforcement.json
Purpose: Access medical device product recall enforcement reports.
Data Source: FDA Enforcement Reports
Key Fields:
status- Current status (Ongoing, Completed, Terminated)recall_number- Unique recall identifierclassification- Class I, II, or IIIproduct_description- Description of recalled devicereason_for_recall- Why device was recalledproduct_quantity- Amount of product recalledcode_info- Lot numbers, serial numbers, model numbersdistribution_pattern- Geographic distributionrecalling_firm- Company conducting recallrecall_initiation_date- When recall beganreport_date- When FDA received noticeproduct_res_number- Product problem number
Common Use Cases:
- Quality monitoring
- Supply chain risk management
- Patient safety tracking
- Regulatory compliance
- Device surveillance
Example Queries:
# Find all Class I device recalls (most serious)
params = {
"api_key": api_key,
"search": "classification:Class+I",
"limit": 20,
"sort": "report_date:desc"
}
response = requests.get("https://api.fda.gov/device/enforcement.json", params=params)
# Search recalls by manufacturer
params = {
"api_key": api_key,
"search": "recalling_firm:*Philips*",
"limit": 50
}
5. Device Recalls
Endpoint: https://api.fda.gov/device/recall.json
Purpose: Access information about device recalls addressing problems that violate FDA law or pose health risks.
Data Source: FDA Recalls Database
Key Fields:
res_event_number- Recall event numberproduct_code- FDA product codeopenfda.device_name- Device nameopenfda.device_class- Device classproduct_res_number- Product recall numberfirm_fei_number- Firm establishment identifierk_numbers- Associated 510(k) numberspma_numbers- Associated PMA numbersroot_cause_description- Root cause of issue
Common Use Cases:
- Recall tracking
- Quality investigation
- Root cause analysis
- Trend identification
Example Queries:
# Search recalls by product code
params = {
"api_key": api_key,
"search": "product_code:DQY",
"limit": 20
}
response = requests.get("https://api.fda.gov/device/recall.json", params=params)
6. Premarket Approval (PMA)
Endpoint: https://api.fda.gov/device/pma.json
Purpose: Access data from FDA's premarket approval process for Class III medical devices.
Data Source: PMA Database
Key Fields:
pma_number- PMA application number (e.g., P850005)supplement_number- Supplement number if applicableapplicant- Company nametrade_name- Trade/brand namegeneric_name- Generic nameproduct_code- FDA product codedecision_date- Date of FDA decisiondecision_code- Approval status (APPR = approved)advisory_committee- Advisory committeeopenfda.device_name- Official device nameopenfda.device_class- Device classopenfda.medical_specialty_description- Medical specialtyopenfda.regulation_number- Regulation number
Common Use Cases:
- High-risk device research
- Approval timeline analysis
- Regulatory strategy
- Market intelligence
- Clinical trial planning
Example Queries:
# Find PMA approvals by company
params = {
"api_key": api_key,
"search": "applicant:Boston+Scientific",
"limit": 50
}
response = requests.get("https://api.fda.gov/device/pma.json", params=params)
# Search for specific device PMAs
params = {
"api_key": api_key,
"search": "generic_name:*cardiac+pacemaker*",
"limit": 10
}
7. Registrations and Listings
Endpoint: https://api.fda.gov/device/registrationlisting.json
Purpose: Access location data for medical device establishments and devices they manufacture.
Data Source: Device Registration and Listing Database
Key Fields:
registration.fei_number- Facility establishment identifierregistration.name- Facility nameregistration.registration_number- Registration numberregistration.reg_expiry_date_year- Registration expiration yearregistration.address_line_1- Street addressregistration.city- Cityregistration.state_code- State/provinceregistration.iso_country_code- Country coderegistration.zip_code- Postal codeproducts.product_code- Device product codeproducts.created_date- When device was listedproducts.openfda.device_name- Device nameproducts.openfda.device_class- Device classproprietary_name- Proprietary/brand namesestablishment_type- Types of operations (manufacturer, etc.)
Common Use Cases:
- Manufacturer identification
- Facility location lookup
- Supply chain mapping
- Due diligence research
- Market analysis
Example Queries:
# Find registered facilities by country
params = {
"api_key": api_key,
"search": "registration.iso_country_code:US",
"limit": 100
}
response = requests.get("https://api.fda.gov/device/registrationlisting.json", params=params)
# Search by facility name
params = {
"api_key": api_key,
"search": "registration.name:*Johnson*",
"limit": 10
}
8. Unique Device Identification (UDI)
Endpoint: https://api.fda.gov/device/udi.json
Purpose: Access the Global Unique Device Identification Database (GUDID) containing device identification information.
Data Source: GUDID
Key Fields:
identifiers.id- Device identifier (DI)identifiers.issuing_agency- Issuing agency (GS1, HIBCC, ICCBBA)identifiers.type- Primary or Package DIbrand_name- Brand nameversion_model_number- Version/model numbercatalog_number- Catalog numbercompany_name- Device companydevice_count_in_base_package- Quantity in base packagedevice_description- Descriptionis_rx- Prescription device (true/false)is_otc- Over-the-counter device (true/false)is_combination_product- Combination product (true/false)is_kit- Kit (true/false)is_labeled_no_nrl- Latex-free labeledhas_lot_or_batch_number- Uses lot/batch numbershas_serial_number- Uses serial numbershas_manufacturing_date- Has manufacturing datehas_expiration_date- Has expiration datemri_safety- MRI safety statusgmdn_terms- Global Medical Device Nomenclature termsproduct_codes- FDA product codesstorage- Storage requirementscustomer_contacts- Contact information
Common Use Cases:
- Device identification and verification
- Supply chain tracking
- Adverse event reporting
- Inventory management
- Procurement
Example Queries:
# Look up device by UDI
params = {
"api_key": api_key,
"search": "identifiers.id:00884838003019",
"limit": 1
}
response = requests.get("https://api.fda.gov/device/udi.json", params=params)
# Find prescription devices by brand name
params = {
"api_key": api_key,
"search": "brand_name:*insulin+pump*+AND+is_rx:true",
"limit": 10
}
# Search for MRI safe devices
params = {
"api_key": api_key,
"search": 'mri_safety:"MR Safe"',
"limit": 50
}
9. COVID-19 Serological Testing Evaluations
Endpoint: https://api.fda.gov/device/covid19serology.json
Purpose: Access FDA's independent evaluations of COVID-19 antibody tests.
Data Source: FDA COVID-19 Serology Test Performance
Key Fields:
manufacturer- Test manufacturerdevice- Device/test nameauthorization_status- EUA statuscontrol_panel- Control panel used for evaluationsample_sensitivity_report_one- Sensitivity data (first report)sample_specificity_report_one- Specificity data (first report)sample_sensitivity_report_two- Sensitivity data (second report)sample_specificity_report_two- Specificity data (second report)
Common Use Cases:
- Test performance comparison
- Diagnostic accuracy assessment
- Procurement decision support
- Quality assurance
Example Queries:
# Find tests by manufacturer
params = {
"api_key": api_key,
"search": "manufacturer:Abbott",
"limit": 10
}
response = requests.get("https://api.fda.gov/device/covid19serology.json", params=params)
# Get all tests with EUA
params = {
"api_key": api_key,
"search": "authorization_status:*EUA*",
"limit": 100
}
Integration Tips
Comprehensive Device Search
def search_device_across_databases(device_name, api_key):
"""
Search for a device across multiple FDA databases.
Args:
device_name: Name or partial name of device
api_key: FDA API key
Returns:
Dictionary with results from each database
"""
results = {}
# Search adverse events
events_url = "https://api.fda.gov/device/event.json"
events_params = {
"api_key": api_key,
"search": f"device.brand_name:*{device_name}*",
"limit": 10
}
results["adverse_events"] = requests.get(events_url, params=events_params).json()
# Search 510(k) clearances
fiveten_url = "https://api.fda.gov/device/510k.json"
fiveten_params = {
"api_key": api_key,
"search": f"device_name:*{device_name}*",
"limit": 10
}
results["510k_clearances"] = requests.get(fiveten_url, params=fiveten_params).json()
# Search recalls
recall_url = "https://api.fda.gov/device/enforcement.json"
recall_params = {
"api_key": api_key,
"search": f"product_description:*{device_name}*",
"limit": 10
}
results["recalls"] = requests.get(recall_url, params=recall_params).json()
# Search UDI
udi_url = "https://api.fda.gov/device/udi.json"
udi_params = {
"api_key": api_key,
"search": f"brand_name:*{device_name}*",
"limit": 10
}
results["udi"] = requests.get(udi_url, params=udi_params).json()
return results
Product Code Lookup
def get_device_classification(product_code, api_key):
"""
Get detailed classification information for a device product code.
Args:
product_code: Three-letter FDA product code
api_key: FDA API key
Returns:
Classification details dictionary
"""
url = "https://api.fda.gov/device/classification.json"
params = {
"api_key": api_key,
"search": f"product_code:{product_code}",
"limit": 1
}
response = requests.get(url, params=params)
data = response.json()
if "results" in data and len(data["results"]) > 0:
classification = data["results"][0]
return {
"product_code": classification.get("product_code"),
"device_name": classification.get("device_name"),
"device_class": classification.get("device_class"),
"regulation_number": classification.get("regulation_number"),
"medical_specialty": classification.get("medical_specialty_description"),
"gmp_exempt": classification.get("gmp_exempt_flag") == "Y",
"implant": classification.get("implant_flag") == "Y",
"life_sustaining": classification.get("life_sustain_support_flag") == "Y"
}
return None
Best Practices
- Use product codes - Most efficient way to search across device databases
- Check multiple databases - Device information is spread across multiple endpoints
- Handle large result sets - Device databases can be very large; use pagination
- Validate device identifiers - Ensure UDIs, 510(k) numbers, and PMA numbers are properly formatted
- Filter by device class - Narrow searches by risk classification when relevant
- Use exact brand names - Wildcards work but exact matches are more reliable
- Consider date ranges - Device data accumulates over decades; filter by date when appropriate
- Cross-reference data - Link adverse events to recalls and registrations for complete picture
- Monitor recall status - Recall statuses change from "Ongoing" to "Completed"
- Check establishment registrations - Facilities must register annually; check expiration dates
Additional Resources
- OpenFDA Device API Documentation: https://open.fda.gov/apis/device/
- Device Classification Database: https://www.accessdata.fda.gov/scripts/cdrh/cfdocs/cfpcd/classification.cfm
- GUDID: https://accessgudid.nlm.nih.gov/
- API Basics: See
api_basics.mdin this references directory - Python examples: See
scripts/fda_device_query.py