Clinic Push API — Developer Documentation

Universal API pentru clinici să integreze propriul sistem schedule cu IngesT Healthcare Routing Infrastructure. Suportă REST, CSV, Google Calendar, Manual UI, Email.

🎯 Filosofie

IngesT este middleware — clinicile își păstrează propriile sisteme. Noi acceptăm orice format prin 5 metode de integrare:

  • REST API — pentru clinici cu IT/booking software
  • CSV Upload — pentru clinici cu Excel/Google Sheets
  • Manual UI — pentru clinici fără IT (drag-to-select calendar în portal)
  • Google Calendar Sync — pentru clinici Google Workspace
  • Email Parser — pentru clinici care folosesc doar email

Această pagină acoperă REST API. Pentru celelalte metode, vezi panoul Clinic Portal după onboarding.

🔑 Authentication

Toate request-urile necesită Bearer token:

Authorization: Bearer ingest_clinic_<your_api_key>

API key se obține de la administrator IngesT după onboarding clinic. Contact: [email protected]

📡 Endpoint principal

POST /api/v1/clinic/push/availability

cURL example

curl -X POST https://api.ingest.ro/api/v1/clinic/push/availability \
  -H "Authorization: Bearer ingest_clinic_a1b2c3..." \
  -H "Content-Type: application/json" \
  -d '{
    "syncTimestamp": "2026-05-26T20:00:00Z",
    "sourceSystem": "[EHR-Provider-v2.3]",
    "mode": "INCREMENTAL",
    "slots": [
      {
        "doctorSlug": "dr-ciprian-tanasescu",
        "datetime": "2026-05-27T10:00:00+03:00",
        "durationMin": 30,
        "serviceType": "CONSULT_FIRST",
        "status": "AVAILABLE",
        "paymentMethods": ["CAS", "PRIVATE"],
        "priceFromRon": 200
      }
    ]
  }'

Python example

import requests
from datetime import datetime, timezone

API_KEY = "ingest_clinic_a1b2c3..."

response = requests.post(
    "https://api.ingest.ro/api/v1/clinic/push/availability",
    headers={
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/json",
    },
    json={
        "syncTimestamp": datetime.now(timezone.utc).isoformat(),
        "sourceSystem": "MyClinic-Custom-v1",
        "mode": "INCREMENTAL",
        "slots": [
            {
                "doctorSlug": "dr-ciprian-tanasescu",
                "datetime": "2026-05-27T10:00:00+03:00",
                "durationMin": 30,
                "serviceType": "CONSULT_FIRST",
                "status": "AVAILABLE",
                "paymentMethods": ["CAS", "PRIVATE"],
                "priceFromRon": 200,
            }
        ],
    },
)

print(response.json())

Node.js example

const response = await fetch(
  "https://api.ingest.ro/api/v1/clinic/push/availability",
  {
    method: "POST",
    headers: {
      "Authorization": "Bearer ingest_clinic_a1b2c3...",
      "Content-Type": "application/json",
    },
    body: JSON.stringify({
      syncTimestamp: new Date().toISOString(),
      sourceSystem: "MyApp-v1",
      mode: "INCREMENTAL",
      slots: [
        {
          doctorSlug: "dr-ciprian-tanasescu",
          datetime: "2026-05-27T10:00:00+03:00",
          durationMin: 30,
          serviceType: "CONSULT_FIRST",
          status: "AVAILABLE",
          paymentMethods: ["CAS", "PRIVATE"],
          priceFromRon: 200,
        },
      ],
    }),
  },
);

const data = await response.json();
console.log(data);

📋 Response format

{
  "correlationId": "cpush_1748275123_a1b2c3",
  "accepted": 47,
  "rejected": 2,
  "rejectedReasons": [
    {
      "index": 12,
      "doctorSlug": "dr-typo-here",
      "datetime": "2026-05-27T10:00:00+03:00",
      "reasons": ["Doctor slug 'dr-typo-here' not found in DB"]
    }
  ],
  "processedAt": "2026-05-26T20:00:01.234Z",
  "nextSyncRecommendedAt": "2026-05-26T20:15:01.234Z"
}

⚙️ Status codes

  • 200 — Slots procesate (vezi accepted + rejected)
  • 401 — Missing/invalid API key
  • 403 — Feature flag OFF pentru clinic sau metoda REST
  • 422 — Body invalid (vezi error details)
  • 429 — Rate limit exceeded (default 100 req/min, escalable)

📐 OpenAPI 3.1 Spec

Spec complet, machine-readable: /api/v1/clinic/push/openapi.json

Folosește orice OpenAPI client generator (openapi-generator, autorest, etc.) pentru SDK auto-generated.

🚀 Onboarding

  1. Contact [email protected] pentru parteneriat
  2. IngesT activează feature flag + emite API key
  3. Test integration prin GET /api/v1/clinic/push/health
  4. Primul push test (5-10 slots)
  5. Verifică în Clinic Portal că datele apar corect
  6. Setup cron/webhook în sistemul tău pentru push regulat (recomandat: la fiecare schimbare, sau periodic la 15 min)

📜 Open Healthcare Routing Protocol

Clinic Push API este parte din viitorul standard public Open Healthcare Routing Protocol (OHRP) v1.0 — formatul comun pentru routing decisions în sistemul healthcare AI-era.

Standardul va fi publicat la ingest.ro/standards/ohrp/v1/ (în pregătire).