Search medicines
GET/v1/drugs
Searches every record of every source in one country by name, active ingredient or identifier. Names match anywhere in the text; identifiers such as AIC, CN, NDC or DIN codes match from their first character. Matching ignores accents and case. Results rank exact matches first, then prefix matches, then other matches, each by record name.
Parameters
-
countrystring Required - Two-letter ISO 3166-1 country code, lowercase. Every search is scoped to one country.
-
qstring Required - The text to search for: a name, an active ingredient or an identifier. 3 to 120 characters, matched literally.
-
limitinteger - Number of results to return, from 1 to 50. Defaults to 20.
-
offsetinteger - Number of results to skip, from 0 to 10000. Use the nextOffset of the previous page.
-
kindsstring - Keep only these record kinds, as comma-separated sourceId:kind pairs of the requested country, at most 12. Applied before pagination.
-
useDomainenum -
Keep only records whose source classifies them for this use. human and veterinary also include products the source marks for both. Applied before pagination.
Possible values:
humanveterinarybothunknownnot-applicable -
speciesstring - Keep only records with this reviewed target species, such as dog, cat, horse or cattle. Records with unknown or unmapped species are excluded. Applied before pagination.
Returns
-
countrystring - The country searched.
-
resultsRecord[] - The matching records, best matches first.
-
nextOffsetinteger | null - The offset of the next page, or null on the last page.
Errors
400 401
403
429 503 ·
Errors and rate limits
curl -G https://api.medifontis.com/v1/drugs \
-H "Authorization: Bearer $MEDIFONTIS_API_KEY" \
--data-urlencode "country=de" \
--data-urlencode "q=ozempic"const params = new URLSearchParams({ country: 'de', q: 'ozempic' })
const response = await fetch(`https://api.medifontis.com/v1/drugs?${params}`, {
headers: { Authorization: `Bearer ${process.env.MEDIFONTIS_API_KEY}` },
})
if (!response.ok) throw new Error(`Medifontis ${response.status}`)
const { results, nextOffset } = await response.json()import os
import requests
response = requests.get(
"https://api.medifontis.com/v1/drugs",
params={"country": "de", "q": "ozempic"},
headers={"Authorization": f"Bearer {os.environ['MEDIFONTIS_API_KEY']}"},
timeout=10,
)
response.raise_for_status()
results = response.json()["results"]
{
"country": "de",
"results": [
{
"country": "de",
"sourceId": "de.ema.article57",
"id": "de:ema:article57:3f301c505c8d15200fcc",
"kind": "products",
"name": "Ozempic",
"data": {
"name": "Ozempic",
"holder": "Novo Nordisk A/S",
"routes": [
"Subcutaneous Use"
],
"marketed": null,
"useDomain": "unknown",
"databaseDate": "2026-10-09",
"sourceStatus": null,
"supplyRegime": null,
"listingStatus": "listed-as-authorised",
"targetSpecies": [],
"sourceRowCount": 1,
"activeSubstances": [
"Semaglutide"
],
"documentRevision": "90",
"documentReference": "EMA/518502/2018",
"useDomainEvidence": {
"basis": "unreviewed",
"field": null,
"value": null,
"version": 1,
"sourceId": "de.ema.article57"
},
"patientEligibility": "not-assessed",
"centrallyAuthorised": true,
"targetSpeciesStatus": "not-reported",
"activeSubstancesText": "Semaglutide",
"administrativeStatus": "unknown",
"prescriptionCategory": "unknown",
"prescriptionRequired": null,
"authorisationTerritory": "European Union",
"pharmacovigilanceContacts": [
{
"email": "SOSPON@novonordisk.com",
"phone": "+45 4444 8888",
"masterFileLocation": "Denmark"
}
]
},
"region": null,
"retrievedAt": "2026-10-20T01:00:19.432Z",
"sourceUrl": "https://www.ema.europa.eu/en/documents/other/article-57-product-data_en.xlsx",
"licence": {
"id": "LicenseRef-EMA-Legal-Notice",
"url": "https://www.ema.europa.eu/en/about-us/legal-notice",
"scope": "rows of EMA’s public Article 57 product data authorised in Germany or centrally in the European Union",
"reviewedAt": "2026-09-29",
"attribution": "Source: European Medicines Agency (EMA), Article 57 product data (EMA/518502/2018), based on data submitted by marketing-authorisation holders.",
"documentsIncluded": false
},
"limitations": [
"Germany has no free, complete official bulk medicine database with PZNs: BfArM’s AMIce public search is interactive only, its § 31b reference database is supplied to commercial users on request, and the GKV-Spitzenverband and BfArM price lists are PDF-only for reasons of usage rights.",
"EMA’s Article 57 export names every medicinal product authorised in Germany (national, mutual-recognition and decentralised procedures) and every centrally authorised EU product, as submitted by marketing-authorisation holders; submissions can lag an authorisation change.",
"A record is one product name, active-substance text, route and marketing-authorisation holder. Strengths, forms, packs, PZNs, authorisation numbers and dates are not published, so rows EMA lists more than once for one such product are kept together with their count.",
"The export publishes no legal category (verschreibungspflichtig, apothekenpflichtig, freiverkäuflich), so the prescription classification stays unknown; listing is not proof of current authorisation, marketing, availability or reimbursement.",
"Active-substance names are the English xEVMPD names EMA publishes, not German INN spellings.",
"EMA’s legal notice permits commercial and non-commercial reproduction with acknowledgement of EMA as the source; its exception for third-party content leaves the status of holder-submitted text unconfirmed."
],
"names": [
"Ozempic",
"Semaglutide"
],
"identifiers": []
}
],
"nextOffset": null
}