API Mobile

Dokumentasi API RESTful untuk aplikasi mobile pasien dan tenaga medis. Semua endpoint menggunakan JSON dan autentikasi Bearer Token.

Autentikasi

API menggunakan Laravel Sanctum untuk autentikasi token-based.

Login

POST /api/hospital/auth/login
// 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"
    }
}

Register (Pasien)

POST /api/hospital/auth/register
// 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"
    }
}

Logout

POST /api/hospital/auth/logout
// Header: Authorization: Bearer {token}
// Response 200 OK
{ "message": "Logged out successfully" }

Referensi Endpoint

Daftar Endpoint API
MethodEndpointDeskripsiAuth
POST/api/hospital/auth/loginLogin dan dapatkan tokenTidak
POST/api/hospital/auth/registerRegistrasi pasien baruTidak
POST/api/hospital/auth/logoutLogout dan revoke tokenYa
GET/api/hospital/profileData profil pasienYa
PUT/api/hospital/profileUpdate profil pasienYa
GET/api/hospital/appointmentsDaftar janji temuYa
POST/api/hospital/appointmentsBuat janji temu baruYa
DELETE/api/hospital/appointments/{id}Batalkan janji temuYa
GET/api/hospital/encountersRiwayat kunjunganYa
GET/api/hospital/encounters/{id}Detail encounterYa
GET/api/hospital/medical-recordsRiwayat rekam medisYa
GET/api/hospital/lab-resultsHasil laboratoriumYa
GET/api/hospital/radiology-resultsHasil radiologiYa
GET/api/hospital/prescriptionsRiwayat resep obatYa
GET/api/hospital/billsDaftar tagihanYa
GET/api/hospital/bills/{id}Detail tagihanYa
GET/api/hospital/doctorsDaftar dokterYa
GET/api/hospital/departmentsDaftar poliklinikYa
GET/api/hospital/schedulesJadwal dokterYa
GET/api/hospital/queue-statusStatus antrian real-timeYa

Contoh Request/Response

Buat Janji Temu

POST /api/hospital/appointments
// 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"
    }
}

Lihat Hasil Lab

GET /api/hospital/lab-results
// 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"
                }
            ]
        }
    ]
}

Rate Limiting

Batas Rate Limit
EndpointLimitWindow
Auth (login/register)5 requestPer menit
API Umum (authenticated)60 requestPer menit
Queue Status30 requestPer 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.

Tips: Semua response menggunakan format JSON API standar. Error response menyertakan field message dan errors (untuk validasi). Gunakan header Accept: application/json pada setiap request.