First request
curl 'https://api.doctorhub.ai/v1/doctors?city=Istanbul&limit=20' \
-H 'Authorization: Bearer dh_v1_<key-id>.<secret>'
{
"data": [{
"id": 123,
"slug": "ornek-doktor",
"name": "Op. Dr. Örnek Doktor",
"city": "İstanbul",
"scorehub": { "value": 8.4, "scale": 10, "as_of": "2026-09-13T10:00:00Z" },
"badges": []
}],
"page": { "next_cursor": null, "limit": 20 }
}Endpoints
| Method | Path | Scope | Response |
|---|
| GET | /v1/doctors | doctors:read | Publishable doctor list |
| GET | /v1/doctors/:id | doctors:read | Public summary for one doctor |
| GET | /v1/doctors/:id/review-summary | review-summaries:read | Source and rating-distribution summary |
| GET | /v1/procedures | procedures:read | Canonical procedure list |
| GET | /v1/procedures/:slug | procedures:read | Published procedure hub summary |
Query limits
Doctor lists accept city, procedure, source, cursor, limit and locale. The maximum limit is 50. Cursors are bound to the filter set.
Errors
- 400 — invalid query/cursor
- 401 — missing, invalid, expired or revoked key
- 403 — missing scope
- 429 — quota exceeded; includes Retry-After
- 503 — safe quota counter unavailable
Source rating example
{
"source": "realself",
"rating": 4.8,
"rating_scale": 5,
"source_review_count": 120,
"ingested_review_count": 84,
"rated_sample_count": 82,
"source_url": "https://www.realself.com/...",
"fetched_at": "2026-09-13T10:00:00Z"
}Attribution and excluded fields
Preserve source names and observation dates. Raw review, Q&A or article text; patient identity; gallery media; consent records; private notes; embeddings; audits; prompts and scoring weights never appear in v1 responses.