Discover/apteka API
live

apteka APIapteka.uz ↗

Search the apteka.uz medicine catalogue and retrieve real-time pharmacy offers, prices, and pickup/delivery availability across Tashkent pharmacies.

Endpoint health
verified 35m ago
search_medicines
get_medicine_offers
2/2 passing latest checkself-healing
Endpoints
2
Updated
1h ago

What is the apteka API?

The apteka.uz API covers 2 endpoints that expose Uzbekistan's largest online pharmacy catalogue: search the full medicine database by name or active ingredient via search_medicines, then pull every current pharmacy offer — price in UZS, pickup and delivery flags, booking URL, and district location — for a specific product via get_medicine_offers. Responses include parsed dosage, package size, manufacturer, country of origin, and per-offer pharmacy address for Tashkent.

This call costs1 credit / call— charged only on success
Try it
1-based result page.
Medicine name or active ingredient to search for, e.g. one shape is 'paracetamol'.
Results per page; values above 100 are clamped to 100.
→ api.parse.bot/scraper/5fb54a06-f6de-49b3-b4b1-1ff1b5c6204c/<endpoint>
Ready to send
Fill in the parameters and hit sign in to send to see live response data here.
Call it over HTTPgrab a free API key at signup
curl -X GET 'https://api.parse.bot/scraper/5fb54a06-f6de-49b3-b4b1-1ff1b5c6204c/search_medicines?query=paracetamol' \
  -H 'X-API-Key: $PARSE_API_KEY'
Python SDK · recommended

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 apteka-uz-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.

"""Walkthrough: search medicines on apteka.uz, then fetch pharmacy offers."""
from parse_apis.apteka_uz_api import AptekaUz, OfferSort, MedicineNotFound

client = AptekaUz()

# Search the catalogue for paracetamol products.
for med in client.medicines.search(query="paracetamol", limit=5):
    print(med.name, med.slug, med.min_price, med.availability)

# Drill into the first hit to see pharmacy-level offers sorted by price.
hit = client.medicines.search(query="paracetamol", limit=1).first()
if hit is not None:
    try:
        listing = hit.offers(sort=OfferSort.PRICE)
    except MedicineNotFound:
        print("medicine no longer listed")
    else:
        print(f"{listing.medicine.name}: {listing.total_offers} offers, cheapest {listing.min_price} UZS")
        for offer in listing.offers[:3]:
            print(f"  {offer.pharmacy_name} — {offer.price} {offer.currency}, {offer.pharmacy_address}")

print("exercised: medicines.search / offers / OfferSort / MedicineNotFound")
All endpoints · 2 totalmissing one? ·

Searches the apteka.uz medicine catalogue by name (brand, generic or active ingredient; Latin or Cyrillic spelling as the site accepts) and returns one row per medicine product (a specific dosage, form, package and manufacturer). Each row carries the catalogue summary: name, parsed dosage and package size (null when the name does not contain them), dosage form, manufacturer, country, availability flag, number of Tashkent pharmacies stocking it, the lowest listed price in UZS (min_price, min_price_order for online order, min_price_booking for reservation; null when no pharmacy lists it), the product page URL and the slug accepted by get_medicine_offers. Results are paginated with page/per_page (per_page is clamped to 100); total and total_pages come from the site. An unknown name returns an empty results list with total 0. One upstream request per call.

Input
ParamTypeDescription
pageinteger1-based result page.
queryrequiredstringMedicine name or active ingredient to search for, e.g. one shape is 'paracetamol'.
per_pageintegerResults per page; values above 100 are clamped to 100.
Response
{
  "type": "object",
  "fields": {
    "page": "current page number",
    "query": "echo of the search term",
    "total": "total matching medicines reported by the site",
    "results": "array of medicine summaries: id, slug (input for get_medicine_offers), name, brand_name, dosage (parsed from name, nullable), dosage_form, package_size (units per pack parsed from name, nullable), manufacturer, country, active_ingredients, drug_group, availability ('available'/'not_available'), is_purchasable, over_the_counter, pharmacy_count, min_price/min_price_order/min_price_booking in UZS (nullable), currency, product_url",
    "has_more": "true when a later page exists",
    "per_page": "page size applied",
    "total_pages": "number of pages at this per_page"
  },
  "sample": {
    "data": {
      "page": 1,
      "query": "paracetamol",
      "total": 114,
      "results": [
        {
          "id": 59823,
          "name": "PARASETAMOL tabletkalari 500mg N10",
          "slug": "paratsetamol-tabletki-500-mg-10sht-3797",
          "dosage": "500mg",
          "country": "Rossiya Federatsiyasi",
          "currency": "UZS",
          "min_price": 2000,
          "brand_name": "PARASETAMOL",
          "drug_group": "Paratsetamol",
          "dosage_form": "Tabletkalar",
          "product_url": "https://apteka.uz/uz/offer/paratsetamol-tabletki-500-mg-10sht-3797",
          "availability": "available",
          "manufacturer": "Dalximfarm, OAO",
          "package_size": 10,
          "is_purchasable": true,
          "pharmacy_count": 33,
          "min_price_order": 2000,
          "over_the_counter": false,
          "min_price_booking": 3000,
          "active_ingredients": [
            "Parasetamol"
          ]
        }
      ],
      "has_more": true,
      "per_page": 5,
      "total_pages": 23
    },
    "status": "success"
  }
}

About the apteka API

Medicine Search

The search_medicines endpoint accepts a query string (brand name, generic name, or active ingredient in Latin or Cyrillic script) and returns a paginated catalogue. Each result row includes id, slug, name, brand_name, dosage (parsed from the product name, nullable), package_size, manufacturer, country, and category. The slug field is the key input for the second endpoint. Pagination is controlled by page and per_page (capped at 100); the response includes total, total_pages, and has_more to support full traversal.

Pharmacy Offers

The get_medicine_offers endpoint takes a slug and returns the medicine's detail header alongside an offers array. Each offer carries price (in UZS), currency, has_pickup, has_delivery, booking_url (nullable), offer_name, and the pharmacy's name, address, and parsed district. The response also surfaces min_price across all returned offers — useful for price comparison without iterating the full array.

Filtering and Sorting Offers

Offers can be filtered by offer_type to restrict results to pharmacies that support pickup or delivery (omitting this param includes listing-only pharmacies without a booking option). The district param does case-insensitive text matching against the pharmacy address, so passing a Tashkent district name like Yunusobod narrows results geographically. A sort param controls offer ordering. The response reports both total_offers (site-reported count before district filtering) and returned_offers (count after the district filter is applied).

Coverage Scope

All pharmacy offers are scoped to Tashkent city. The city field is always Toshkent; finer granularity comes from the district parsed from each pharmacy's address, which may be null for some listings. Product data such as manufacturer country and category reflect what apteka.uz catalogues for Uzbekistan's market.

Reliability & maintenanceVerified

The apteka API is a managed, monitored endpoint for apteka.uz — not a raw scraper you maintain. Every endpoint is automatically health-checked on a schedule, and when apteka.uz 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 apteka.uz 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.

Last verified
35m ago
Latest check
2/2 endpoints passing
Maintenance
Monitored & self-healing
Will this API break when the source site changes?+
It's built not to. Every endpoint is health-checked on a schedule with automated test probes. When the source site changes and a check fails, the API is automatically queued for repair and re-verified — that's the self-healing layer. Each API page shows when its endpoints were last verified. And because marketplace APIs are shared, any fix reaches everyone using it.
Is this an official API from the source site?+
No — Parse APIs are independent, managed REST wrappers over publicly available data. That is the point: where a site has no official API (or only a limited one), Parse gives you a maintained, monitored endpoint for that data and keeps it working as the site changes — so you get a stable contract over a source that never promised one.
Can I fix or extend this API myself if I need a new endpoint or field?+
Yes — and you don't have to wait on us. This API was generated by the Parse agent, which stays attached. Describe the change in plain English ("add an endpoint that returns reviews", "fix the price field") in the revise box on the API page or via the revise_api MCP tool, and the agent rebuilds it against the live site in minutes. Contributing the change back to the public API is free.
What happens if I call an endpoint that has an issue?+
Errors are machine-readable: a bad call returns a clean status with the list of available endpoints and a repair hint, so an agent (or you) can recover or trigger a fix instead of failing silently. Confirmed failures feed the automatic repair queue.
Common use cases
  • Compare current UZS prices for a generic drug across all Tashkent pharmacies using min_price and the offers array.
  • Filter pharmacy offers by Tashkent district to surface the nearest pickup location for a given medicine.
  • Build a delivery-only drug availability checker using the offer_type filter and has_delivery flag.
  • Track price changes over time for a specific slug by polling get_medicine_offers on a schedule.
  • Map Tashkent pharmacy locations for a specific medicine using the address and district fields from each offer.
  • Catalogue Uzbekistan medicines by manufacturer or country using fields returned by search_medicines.
  • Identify which pharmacies offer a booking URL for a given medicine using the nullable booking_url field.
Pricing & limitsSee full pricing →
TierPriceCredits/monthRate limit
Free$0/mo2005 req/min
Hobby$30/mo1,00020 req/min
Developer$100/mo5,000100 req/min
Team$300/mo20,000300 req/min
Company$1,000/mo100,000500 req/min

Each endpoint has a fixed posted price per successful call — most fall between 1 and 10 credits — shown on this API's page before you run it. Exceeding the rate limit returns a 429 response. Authenticate with the X-API-Key header.

Frequently asked questions
Does apteka.uz have an official developer API?+
apteka.uz does not publish a documented public developer API or developer portal. This Parse API provides structured access to its medicine catalogue and pharmacy offer data.
What does get_medicine_offers return and how can I filter results?+
It returns the medicine's detail header plus every current pharmacy offer on the site for that product: price in UZS, pickup and delivery flags, a nullable booking URL, and the pharmacy's name, address, and parsed district. You can narrow results with the district parameter (case-insensitive text match on the address) and the offer_type parameter to restrict to pharmacies that support pickup or delivery.
Are pharmacy offers available outside Tashkent?+
No. Pharmacy offers on apteka.uz are scoped to Tashkent city; the city field is always Toshkent. District-level granularity is parsed from pharmacy addresses and may be null for some listings. You can fork this API on Parse and revise it if apteka.uz extends coverage to other Uzbekistan cities.
Does the API return patient reviews or ratings for medicines?+
Not currently. The API covers catalogue fields (name, dosage, manufacturer, category) and pharmacy offer data (price, availability, address). You can fork it on Parse and revise to add a reviews endpoint if apteka.uz exposes that data.
How does pagination work in search_medicines?+
Results are 1-based pages controlled by page and per_page. The per_page value is clamped to a maximum of 100. The response includes total, total_pages, and has_more, so you can determine how many pages exist and iterate through them programmatically.
Page content last updated . Spec covers 2 endpoints from apteka.uz.
Related APIs in HealthcareSee all →