Data API v1

Read-only, scope-controlled data access.

Send the key in the Authorization: Bearer header. Never put it in a URL, browser storage or logs.

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

MethodPathScopeResponse
GET/v1/doctorsdoctors:readPublishable doctor list
GET/v1/doctors/:iddoctors:readPublic summary for one doctor
GET/v1/doctors/:id/review-summaryreview-summaries:readSource and rating-distribution summary
GET/v1/proceduresprocedures:readCanonical procedure list
GET/v1/procedures/:slugprocedures:readPublished 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.