Dokumentasi API RESTful untuk aplikasi mobile pasien dan tenaga medis. Semua endpoint menggunakan JSON dan autentikasi Bearer Token.
API menggunakan Laravel Sanctum untuk autentikasi token-based.
// Request
{
"email": "dr.ahmad@hospital.test",
"password": "password",
"device_name": "iPhone 15 Pro"
}
// Response 200 OK
{
"token": "1|abc123...",
"user": {
"id": 1,
"name": "dr. Ahmad, Sp.PD",
"email": "dr.ahmad@hospital.test",
"role": "dokter_spesialis"
}
}
// Request
{
"name": "Joko Widodo",
"email": "joko@email.com",
"password": "password",
"password_confirmation": "password",
"nik": "3201234567890001",
"phone": "081234567890",
"birth_date": "1990-01-15"
}
// Response 201 Created
{
"token": "2|def456...",
"user": { ... },
"patient": {
"mr_number": "MR-20260331-0042"
}
}
// Header: Authorization: Bearer {token}
// Response 200 OK
{ "message": "Logged out successfully" }
| Method | Endpoint | Deskripsi | Auth |
|---|---|---|---|
| POST | /api/hospital/auth/login | Login dan dapatkan token | Tidak |
| POST | /api/hospital/auth/register | Registrasi pasien baru | Tidak |
| POST | /api/hospital/auth/logout | Logout dan revoke token | Ya |
| GET | /api/hospital/profile | Data profil pasien | Ya |
| PUT | /api/hospital/profile | Update profil pasien | Ya |
| GET | /api/hospital/appointments | Daftar janji temu | Ya |
| POST | /api/hospital/appointments | Buat janji temu baru | Ya |
| DELETE | /api/hospital/appointments/{id} | Batalkan janji temu | Ya |
| GET | /api/hospital/encounters | Riwayat kunjungan | Ya |
| GET | /api/hospital/encounters/{id} | Detail encounter | Ya |
| GET | /api/hospital/medical-records | Riwayat rekam medis | Ya |
| GET | /api/hospital/lab-results | Hasil laboratorium | Ya |
| GET | /api/hospital/radiology-results | Hasil radiologi | Ya |
| GET | /api/hospital/prescriptions | Riwayat resep obat | Ya |
| GET | /api/hospital/bills | Daftar tagihan | Ya |
| GET | /api/hospital/bills/{id} | Detail tagihan | Ya |
| GET | /api/hospital/doctors | Daftar dokter | Ya |
| GET | /api/hospital/departments | Daftar poliklinik | Ya |
| GET | /api/hospital/schedules | Jadwal dokter | Ya |
| GET | /api/hospital/queue-status | Status antrian real-time | Ya |
// Header: Authorization: Bearer {token}
// Request
{
"doctor_id": 5,
"department_id": 2,
"date": "2026-04-05",
"time_slot": "09:00",
"payment_type": "bpjs",
"complaint": "Kontrol tekanan darah"
}
// Response 201 Created
{
"data": {
"id": 142,
"booking_number": "B-042",
"date": "2026-04-05",
"time_slot": "09:00",
"doctor": "dr. Ahmad, Sp.PD",
"department": "Poli Penyakit Dalam",
"status": "confirmed"
}
}
// Response 200 OK
{
"data": [
{
"id": 89,
"date": "2026-03-28",
"panel": "Darah Lengkap",
"status": "completed",
"results": [
{
"parameter": "Hemoglobin",
"value": "14.2",
"unit": "g/dL",
"reference": "12-16",
"flag": "normal"
},
{
"parameter": "Leukosit",
"value": "12500",
"unit": "/uL",
"reference": "5000-10000",
"flag": "high"
}
]
}
]
}
| Endpoint | Limit | Window |
|---|---|---|
| Auth (login/register) | 5 request | Per menit |
| API Umum (authenticated) | 60 request | Per menit |
| Queue Status | 30 request | Per menit |
Response header menyertakan X-RateLimit-Limit, X-RateLimit-Remaining, dan Retry-After (saat limit tercapai). HTTP status 429 (Too Many Requests) dikembalikan saat limit terlampaui.
message dan errors (untuk validasi). Gunakan header Accept: application/json pada setiap request.