BD APIbd.com ↗
Access BD medical device recall notices and safety alerts via API. Returns product names, campaign IDs, catalog numbers, clinical impact, and status.
What is the BD API?
The BD Recalls API exposes 1 endpoint — get_recalls — that returns the full set of active recall notices and safety alerts published by Becton, Dickinson and Company. Each record includes up to 7 structured fields: a unique recall ID, campaign identifier, product name, start date, status, HTML-formatted clinical impact description, and extracted catalog or lot numbers, giving medical device teams immediate access to actionable safety data.
No input parameters required.
curl -X GET 'https://api.parse.bot/scraper/a4226e92-0368-4e88-a7f2-fbefc08744a9/get_recalls' \ -H 'X-API-Key: $PARSE_API_KEY'
Typed, relational, agent-ready
A generated client with real types, enums, and the links between objects — the structure a flat JSON response can't carry. Autocompletes in your editor and reads cleanly to coding agents.
- Fully typed · autocompletes
- Objects link to objects
- Typed errors & pagination
Typed Python client. Set up the SDK in your uv project, then pull this API’s typed client:
uv add parse-sdk uv run parse init uv run parse add --marketplace bd-com-api
uv run parse add --marketplace pulls a pinned snapshot of this canonical API — it won’t change underneath you. To customize it, subscribe and swap to your own copy.
"""BD.com Recall API - Walkthrough: fetch and inspect active medical device recalls."""
from parse_apis.bd.com_recall_api import BDRecalls, RecallsUnavailable
client = BDRecalls()
# List all active recalls, capped to 5 for quick inspection.
for recall in client.recalls.list(limit=5):
print(recall.product_name, recall.status, recall.start_date)
# Drill into the first recall for detail.
first = client.recalls.list(limit=1).first()
if first:
print(first.campaign_id, first.product_name)
print("Catalog numbers:", first.extracted_catalog_numbers)
print("Lot info:", first.extracted_lot_info)
# Typed error handling around the list call.
try:
for recall in client.recalls.list(limit=3):
print(recall.id, recall.campaign_id, recall.product_name)
except RecallsUnavailable as exc:
print(f"BD portal unavailable: {exc}")
print("exercised: recalls.list / typed field access / error handling")
Fetch all active recall notices and safety alerts published by BD. Returns metadata, clinical impact assessments, and product identifiers such as catalog numbers and lot information. No input parameters required — returns the full set of active recalls from the BD Customer Care portal. Each recall includes the campaign identifier, product name, start date, current status, and a full HTML description of the clinical impact and required user actions.
No input parameters required.
{
"type": "object",
"fields": {
"count": "integer total number of recalls returned",
"recalls": "array of recall objects with id, campaign_id, product_name, start_date, status, description_html, extracted_catalog_numbers, extracted_lot_info"
},
"sample": {
"data": {
"count": 30,
"recalls": [
{
"id": "701cx00000iumGpAAI",
"status": "Active",
"start_date": "2026-05-28",
"campaign_id": "SUR-26-06093",
"product_name": "BD ChloraPrep™ Clear - 1 mL and FREPP™ Clear 1.5 mL Applicators",
"description_html": "<p>The BD ChloraPrep™ Clear - 1 mL and FREPP™ Clear 1.5 mL Applicators with paper lidding are being recalled due to potential breach of sterility...</p>",
"extracted_lot_info": [],
"extracted_catalog_numbers": []
}
]
},
"status": "success"
}
}About the BD API
What the API Returns
The get_recalls endpoint returns every active recall and safety alert currently listed on BD's Customer Care recall page. The response contains a top-level count integer indicating how many recall records were returned, alongside a recalls array. Each object in that array carries an id, a campaign_id (BD's internal campaign reference), a product_name, a start_date, and a status field indicating whether the recall is active or resolved.
Clinical Detail and Product Identifiers
The description_html field contains the full clinical impact summary as published by BD, including recommended user actions, risk assessments, and any relevant regulatory context. This field is HTML-formatted, so it preserves structure like lists and emphasis from the source notice. The extracted_catalog_numbers field is a parsed array of catalog and lot number strings pulled from that narrative, making it straightforward to match recalls against your own inventory records without parsing the HTML yourself. An extra field carries any additional metadata present in the record.
Parameters and Freshness
get_recalls accepts no input parameters — it returns the complete active recall dataset in a single call. There is no filtering by date range, product line, or status at the API level; filtering must be applied client-side against the returned array. The data reflects the current state of BD's published recall listings, so repeated polling is the appropriate pattern for monitoring new or updated notices.
The BD API is a managed, monitored endpoint for bd.com — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when bd.com changes and a check fails, the API is automatically queued for repair and re-verified. It is built to keep working as the site underneath it changes.
This isn't an official bd.com API — it's an independent, maintained REST wrapper over public data. Where the source has no official API (or only a limited one), Parse gives you a stable contract over a source that never promised one, and keeps it current. Need a new endpoint or field? You can revise it yourself in plain English and the agent rebuilds it against the live site in minutes — contributing the change back to the shared API is free.
Will this API break when the source site changes?+
Is this an official API from the source site?+
Can I fix or extend this API myself if I need a new endpoint or field?+
What happens if I call an endpoint that has an issue?+
- Alert hospital procurement teams when a device they stock appears in
product_nameorextracted_catalog_numbers - Feed recall
campaign_idandstart_dateinto a compliance audit log for medical device inventory systems - Cross-reference
extracted_catalog_numbersagainst a distributor's active product catalog to flag affected SKUs - Ingest
description_htmlinto a document store to surface recall language during clinical staff training - Monitor
statuschanges across repeated API calls to detect when a recall moves from active to resolved - Build a dashboard showing open BD recalls grouped by
start_datefor a biomedical engineering department - Trigger purchasing holds automatically when a new recall record appears with a matching catalog number
| Tier | Price | Credits/month | Rate limit |
|---|---|---|---|
| Free | $0/mo | 100 | 5 req/min |
| Hobby | $30/mo | 1,000 | 20 req/min |
| Developer | $100/mo | 5,000 | 100 req/min |
One credit = one API call regardless of which marketplace API you call. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.
Does BD have an official developer API for recall data?+
What does the `extracted_catalog_numbers` field contain, and how is it structured?+
extracted_catalog_numbers is an array of strings, each representing a catalog or lot number referenced in the recall notice. This lets you programmatically match recall records against an inventory database without needing to parse the description_html field yourself. Some recalls reference multiple catalog numbers; others may have an empty array if no discrete identifiers were present in the notice text.Can I filter recalls by product category, date range, or geographic region through the API?+
get_recalls returns the full set of active recalls in one response with no server-side filtering. You can apply client-side filtering on fields like start_date, product_name, or status after retrieving the array. You can fork this API on Parse and revise it to add a filtered endpoint if your use case requires server-side scoping.Does the API include historical or closed recalls, not just active ones?+
How often does the recall data refresh, and how should I poll for new notices?+
get_recalls at a regular interval — daily is typical for compliance monitoring — and comparing returned id or campaign_id values against previously stored records is the standard approach for detecting new or changed notices.