Ordino API dokumentacija · v1

Ordino API

REST API za povezivanje Ordino sistema s vašim softverom: doktori, rasporedi, termini, web feed i TV ekrani. Sve rute vraćaju JSON (UTF-8).

Uvod i osnove

Osnovna adresa API-ja dodjeljuje se pri aktivaciji API pristupa (Premium paket).

BAZA = https://app.ordino.ba/api
  • Svi zahtjevi i odgovori su JSON — šaljite header Content-Type: application/json i Accept: application/json.
  • Zaštićene rute traže header Authorization: Bearer <token>.
  • Svi podaci su izolovani po ustanovi — token vidi samo podatke svoje ustanove.
  • Datumi su YYYY-MM-DD, vremena HH:MM (24h).

Autentikacija

Prijava slugom ustanove i PIN-om korisnika. Vraća Sanctum bearer token koji šaljete u svakom sljedećem zahtjevu.

POST /login
PoljeTipOpis
slug obaveznostringOznaka ustanove (dobijete pri aktivaciji)
pin obaveznostringPIN korisnika (4–12 znakova)
# zahtjev
curl -X POST {BAZA}/login \
  -H "Content-Type: application/json" \
  -d '{"slug": "vasa-klinika", "pin": "1234"}'

# odgovor 200
{
  "token": "1|xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx",
  "user":    { "id": 1, "ime": "Sestra Milica", "role": "nurse" },
  "partner": { "id": 1, "slug": "vasa-klinika", "name": "Vaša Klinika" }
}
GET /me

Podaci o prijavljenom korisniku i ustanovi.

POST /logout

Poništava trenutni token. Odgovor: {"ok": true}

Doktori

Baza doktora ustanove.

GET /doctors
POST /doctors
PUT /doctors/{id}
DELETE /doctors/{id} — samo admin uloga
PoljeTipOpis
titlestringTitula, npr. „prim. dr" (opciono)
name obaveznostringIme i prezime
specialtystringSpecijalnost, npr. „Kardiolog"
photo_pathstringPutanja fotografije (opciono)
published_on_webbooleanPrikaz na web sajtu
sort_orderintegerRedoslijed prikaza
# primjer: novi doktor
curl -X POST {BAZA}/doctors \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"title": "dr", "name": "Milica Jovanović", "specialty": "Pedijatar", "published_on_web": true}'

# odgovor 201
{ "id": 7, "title": "dr", "name": "Milica Jovanović", "specialty": "Pedijatar",
  "photo_path": null, "published_on_web": true, "sort_order": 0 }

Raspored

Termini rada doktora — ono što se prikazuje na webu, TV-u i u objavama.

GET /schedule
POST /schedule
PUT /schedule/{id}
DELETE /schedule/{id}
PoljeTipOpis
doctor_id obaveznointegerID doktora iz vaše ustanove
date obaveznodateDatum, npr. „2026-07-15"
time_fromHH:MMPočetak, npr. „09:00"
time_toHH:MMKraj, npr. „15:00"
locationstringLokacija/ordinacija (opciono)
notestringNapomena (opciono)
# primjer: doktor radi u srijedu
curl -X POST {BAZA}/schedule \
  -H "Authorization: Bearer $TOKEN" \
  -H "Content-Type: application/json" \
  -d '{"doctor_id": 7, "date": "2026-07-15", "time_from": "09:00", "time_to": "15:00"}'
✦ Nakon svake izmjene rasporeda, web feed i TV ekrani automatski dobijaju nove podatke — bez dodatnih poziva.

Termini (zakazivanja)

Zakazani pregledi pacijenata.

GET /appointments
POST /appointments
PUT /appointments/{id}

Termin nosi doktora, pacijenta, datum i vrijeme te status (npr. potvrđen / otkazan). Duplikat termina za isti slot API odbija sa 422.

Pacijenti

Evidencija pacijenata ustanove (osoblje).

GET /patients
POST /patients
PUT /patients/{id}
⚠ Podaci pacijenata su osjetljivi — token čuvajte na serveru, nikad u javnom frontend kodu.

Web feed — raspored za vaš sajt

Javni, read-only feed rasporeda za prikaz na web stranici ustanove (koristi ga i naš WordPress dodatak). Autorizacija ključem ustanove.

GET /feed
ParametarGdjeOpis
key obaveznoquery ili header X-Ordino-KeyWeb ključ ustanove (iz Ordino postavki)
# zahtjev
curl "{BAZA}/feed?key=VAS-WEB-KLJUC"

# odgovor 200 — doktori + raspored narednih 14 dana
{
  "doctors": [
    { "id": 7, "title": "dr", "name": "Milica Jovanović", "specialty": "Pedijatar", "photo_path": null }
  ],
  "schedule": [
    { "doctor_id": 7, "doctor": "dr Milica Jovanović", "specialty": "Pedijatar",
      "date": "2026-07-15", "time_from": "09:00", "time_to": "15:00", "location": null }
  ]
}

Vraćaju se samo doktori označeni sa published_on_web: true.

Javni podaci ustanove

Javne rute za prikaz doktora i slobodnih termina (npr. za vlastitu formu zakazivanja). Bez tokena — po slugu ustanove.

GET /public/{slug}/doctors
GET /public/{slug}/slots?doctor_id=7&date=2026-07-15
GET /public/{slug}/next-slot?doctor_id=7
# slobodni termini doktora za dan
curl "{BAZA}/public/vasa-klinika/slots?doctor_id=7&date=2026-07-15"

# odgovor
{ "slots": ["09:00", "09:30", "10:00", "11:30"] }

TV ekrani

Uparivanje i podaci za TV prikaz u čekaonici. Ove rute koristi Ordino TV aplikacija — dokumentovane su radi potpunosti.

POST /tv/register — TV zatraži kod za uparivanje
GET /tv/status — provjera da li je uparivanje potvrđeno
GET /tv/data — sadržaj za prikaz (header X-Ordino-Tv-Token)
POST /tv/confirm — osoblje potvrđuje TV (Bearer token, admin)

Greške i limiti

Standardni HTTP statusi + Laravel JSON format grešaka.

StatusZnačenje
401Nedostaje ili je nevažeći token / ključ
403Uloga nema pravo na akciju (npr. sestra briše doktora)
404Resurs ne postoji ili nije iz vaše ustanove
422Validacija — odgovor sadrži errors po poljima
429Prekoračen rate limit — sačekajte pa ponovite
# primjer 422
{ "message": "The name field is required.",
  "errors": { "name": ["The name field is required."] } }

Rate limiti (po minuti)

RutaLimit
POST /login20
GET /feed60
GET /public/*300
GET /tv/*300
Trebate veće limite ili webhook obavještenja? Javite se — info@ordino.ba · 065 00 11 65.