REFERENCE
Search
GET/v1/medicines/search
The best matches for a person typing a name, best match first. Each word of q matches the start of a brand, alternate name, generic or manufacturer word. When q is an ID in any profile, an old ID or a UUID, the answer is that one medicine. There is no cursor: to page every match, use List medicines with q.
Requestcurl
curl -G https://api.oushodh.dev/v1/medicines/search \ -d q=MED-012933 \ -H "Authorization: Bearer $OUSHODH_KEY"
Query parameters
q is required.| NAME | TYPE | WHAT IT DOES |
|---|---|---|
qrequired | string | What the person typed: brand, generic, manufacturer or alternate-name words, or an ID. |
limit | integer | Most medicines to return. 1 to 50. Default 20. |
- What the person typed: brand, generic, manufacturer or alternate-name words, or an ID.
qstring, required - Most medicines to return. 1 to 50. Default 20.
limitinteger
Response
The best matches.
| FIELD | TYPE | WHAT IT HOLDS |
|---|---|---|
items | list | The best matches first, at most limit. Each is a medicine object. |
total | integer | How many medicines match, including those past limit. |
- The best matches first, at most
itemslistlimit. Each is a medicine object. - How many medicines match, including those past
totalintegerlimit.
Response200
{
"items": [
{
"id": "MED-012933",
"uuid": "01a1ba6f-f4d6-7143-ac84-9376f520eef8",
"brand": "Napa",
"category": null,
"product_name": "Napa 500 mg Tablet",
"product_image": null,
"unit": null,
"size": null,
"price": 1.2,
"price_per": "unit",
"price_source": "dgda_price",
"description_en": null,
"description_bn": null,
"dosage_form": "Tablet",
"strength": "500 mg",
"generic_name": "Paracetamol",
"manufacturer": "Beximco Pharmaceuticals PLC.",
"source_url": "https://medex.com.bd/brands/10452/napa-500-mg-tablet",
"last_updated": "2026-11-09T15:27:34Z",
"dgda_listed": true,
"medicine_type": "allopathic"
}
],
"total": 1
}Errors
Each error has a code and a message.
| STATUS | CODE | WHEN |
|---|---|---|
400 | bad_request | A bad parameter, such as limit=0, a time in another form, or a missing q. |
401 | unauthorized | No key, an unknown key or a revoked key. The answer never says which. |
403 | plan_expired | The key's account has no active plan. |
429 | rate_limited | More requests in a minute than the key's plan allows. |
429 | quota_exceeded | The plan's requests for this month are used up. |
500 | internal | A fault on our side. The details go to our log, not the answer. |
400 bad_requestA bad parameter, such aslimit=0, a time in another form, or a missingq.401 unauthorizedNo key, an unknown key or a revoked key. The answer never says which.403 plan_expiredThe key's account has no active plan.429 rate_limitedMore requests in a minute than the key's plan allows.429 quota_exceededThe plan's requests for this month are used up.500 internalA fault on our side. The details go to our log, not the answer.