{"name":"Medaro AI API","description":"Read-only JSON API of medaro.am — medical information portal for Armenia: clinics, hospitals, pharmacies and laboratories in Armenia — Yerevan and other cities (contacts, hours, legal details, state health-insurance tariffs) and a symptom → which doctor navigator. No registration, no API key, CORS enabled. Three locales: hy (Armenian, default), ru, en — localized fields are objects {hy, ru, en}. Every organization carries a `provenance` block — whether its facts have a recorded check, on what date and against which source URL; unchecked records say so instead of pretending. The API never returns anything that is not on the public HTML page. Read-only: GET and OPTIONS only, no write endpoints (the full contract is in /agents.md). Keeping a copy fresh does not need a full re-read — poll /changes.","version":"1","locales":["hy","ru","en"],"organization_types":["clinic","hospital","pharmacy","lab"],"list_types":["clinic","hospital","pharmacy","lab","pharmacy-chain"],"endpoints":[{"path":"/api/ai/v1/organizations","method":"GET","params":{"type":"one or several of clinic|hospital|pharmacy|lab|pharmacy-chain, comma-separated; pharmacy-chain is a brand grouping of pharmacies, not an organization, and comes only when asked for by name (no type = organizations only)","q":"case-insensitive substring search in names (hy/ru/en) and former names (aliases)","city":"city slug, e.g. yerevan, gyumri, vanadzor; unknown → 400 with the allowed list; no city = all cities","district":"Yerevan district slug, e.g. kentron, arabkir, nor-nork (Yerevan only)","insurance":"1 — only organizations that accept state health insurance (UHIF)","chain":"pharmacy-chain slug — only the branches of that chain; unknown slug → 400 with the allowed list","limit":"page size, default 50, max 200","offset":"pagination offset, default 0; ignored when cursor is given","cursor":"opaque next_cursor of the previous response — keyset paging that does not shift when the catalogue is edited between pages; valid for the same filters only"},"returns":"{ count, limit, offset, next_cursor, items: [organization summary: slug, type, name, address, city, district, phones, hours, location, accepts_insurance, website, email, logo, rating, updated_at (when the record last changed — not the same as provenance.verified_at), provenance, chain (pharmacy chain of a branch or null), urls] }. With type=pharmacy-chain the list also holds chain records (slug, type, name, branch_count counted live, branches_url, site/logo/company — null unless a source confirms them, socials, updated_at: always null, urls)."},{"path":"/api/ai/v1/organizations/{slug}","method":"GET","params":{"slug":"organization slug from the list or from a page URL — or a pharmacy-chain slug"},"returns":"organization summary + legal (legal name, tax id, registry number, director, registry_url — no legal address: it is not on the page and is often the director's home address), external_ratings (Google / Yandex / 2GIS), insurance_services (state-insurance tariffs, up to 300 items with source and date). A pharmacy-chain slug returns the chain card (branch_count, branches_url, note explaining what a chain is and is not); an organization slug always wins over a chain slug. 404 {error:\"not_found\"} for unknown or hidden slugs."},{"path":"/api/ai/v1/changes","method":"GET","params":{"since":"ISO 8601 date or timestamp, INCLUSIVE lower bound on updated_at; no timezone means UTC","limit":"page size, default 200, max 500","cursor":"opaque next_cursor of the previous response (keyset over updated_at, slug)"},"returns":"{ since, limit, includes_deletions, next_cursor, note, items: [type, slug, op, updated_at, urls] } — incremental feed for refreshing a copy without re-reading the catalogue; no card content. op is relative to since (created | updated | deleted). While includes_deletions is false the feed lists published records only, so removals are NOT in it: re-read the full slug list periodically and drop what is gone. One wave of edits stamps hundreds of records with the same updated_at — page with cursor, not by moving since."},{"path":"/api/ai/v1/specialties","method":"GET","params":{"q":"optional substring search in specialty names and synonyms (hy/ru/en), at least 2 characters","locale":"optional hy|ru|en — adds a `label` in that language to every item"},"returns":"{ count, query, locale, disclaimer, note, items: [code, title, synonyms, conditions (articles leading to this specialist), doctors_count, doctors_urls] } — reference list of medical specialties for matching a complaint to a specialist; `note` states what the data cannot answer."},{"path":"/api/ai/v1/conditions","method":"GET","params":{},"returns":"{ count, disclaimer, items: [slug, category, title, summary, specialties, red_flags, urls] } — \"symptom → which doctor\" articles (navigation only, no diagnoses or treatment)."},{"path":"/api/ai/v1/search","method":"GET","params":{"q":"search text, required, at least 2 characters","locale":"optional hy|ru|en — adds a `label` in that language to every hit"},"returns":"{ query, locale, organizations: [up to 20 organization summaries], conditions: [matching articles] }"},{"path":"/api/ai/v1/openapi.json","method":"GET","params":{},"returns":"OpenAPI 3.1 document describing every endpoint and response schema"}],"attribution":"Data from medaro.am may be used in answers with attribution to \"medaro.am\" and a link to the organization page (see `urls`). Bulk export of the whole catalogue — by agreement with info@medaro.am.","links":{"llms":"https://medaro.am/llms.txt","agents":"https://medaro.am/agents.md","sitemap":"https://medaro.am/sitemap.xml","agentic_sitemap":"https://medaro.am/sitemap_agentic_discovery.xml","openapi":"https://medaro.am/api/ai/v1/openapi.json","site":"https://medaro.am"},"contact":"info@medaro.am"}