API Mobile

Dokumentasi API RESTful untuk aplikasi pelanggan, aplikasi teknisi, dan API publik. Total 53 endpoint menggunakan JSON dan autentikasi Bearer Token.

Autentikasi

API menggunakan Laravel Sanctum untuk autentikasi token-based. Setiap aplikasi memiliki endpoint login terpisah.

Login Pelanggan

POST /api/ispms/customer/auth/login
// Request
{
    "phone": "08123456789",
    "password": "password",
    "device_name": "Samsung Galaxy S24"
}

// Response 200 OK
{
    "token": "1|abc123...",
    "user": {
        "id": 1,
        "name": "Ahmad Fauzi",
        "customer_code": "BNA-0001",
        "phone": "08123456789"
    }
}

Login Teknisi

POST /api/ispms/technician/auth/login
// Request
{
    "email": "teknisi@acehlink.id",
    "password": "password",
    "device_name": "Xiaomi Redmi Note 12"
}

// Response 200 OK
{
    "token": "2|def456...",
    "user": {
        "id": 5,
        "name": "Rizki Pratama",
        "role": "technician",
        "branch": "Banda Aceh"
    }
}

Customer App API (29 Endpoint)

Endpoint untuk aplikasi pelanggan. Semua memerlukan autentikasi kecuali yang ditandai publik.

Customer API Endpoints
MethodEndpointDeskripsi
POST/api/ispms/customer/auth/loginLogin pelanggan
POST/api/ispms/customer/auth/registerRegistrasi pelanggan baru
POST/api/ispms/customer/auth/logoutLogout & hapus token
POST/api/ispms/customer/auth/forgot-passwordRequest reset password
GET/api/ispms/customer/profileData profil pelanggan
PUT/api/ispms/customer/profileUpdate profil
POST/api/ispms/customer/profile/photoUpload foto profil
GET/api/ispms/customer/subscriptionsDaftar langganan
GET/api/ispms/customer/subscriptions/{id}Detail langganan
GET/api/ispms/customer/invoicesDaftar invoice
GET/api/ispms/customer/invoices/{id}Detail invoice
GET/api/ispms/customer/invoices/{id}/payGenerate link pembayaran QRIS
GET/api/ispms/customer/paymentsRiwayat pembayaran
GET/api/ispms/customer/payments/{id}Detail pembayaran
GET/api/ispms/customer/ticketsDaftar tiket
GET/api/ispms/customer/tickets/{id}Detail tiket
POST/api/ispms/customer/ticketsBuat tiket baru
POST/api/ispms/customer/tickets/{id}/commentTambah komentar pada tiket
GET/api/ispms/customer/notificationsDaftar notifikasi
PUT/api/ispms/customer/notifications/{id}/readTandai notifikasi dibaca
GET/api/ispms/customer/servicesDaftar paket tersedia
POST/api/ispms/customer/upgrade-requestRequest upgrade/downgrade paket
GET/api/ispms/customer/usageData penggunaan bandwidth
GET/api/ispms/customer/speed-testHasil speed test terakhir
POST/api/ispms/customer/speed-testSimpan hasil speed test
GET/api/ispms/customer/branchesDaftar cabang
POST/api/ispms/customer/fcm-tokenRegister FCM token push notification
PUT/api/ispms/customer/change-passwordUbah password
GET/api/ispms/customer/faqDaftar FAQ

Technician App API (16 Endpoint)

Endpoint untuk aplikasi teknisi lapangan.

Technician API Endpoints
MethodEndpointDeskripsi
POST/api/ispms/technician/auth/loginLogin teknisi
POST/api/ispms/technician/auth/logoutLogout teknisi
GET/api/ispms/technician/profileProfil teknisi
GET/api/ispms/technician/work-ordersDaftar work order yang ditugaskan
GET/api/ispms/technician/work-orders/{id}Detail work order
PUT/api/ispms/technician/work-orders/{id}/startMulai pengerjaan WO
PUT/api/ispms/technician/work-orders/{id}/completeSelesaikan WO
POST/api/ispms/technician/work-orders/{id}/photosUpload foto bukti pengerjaan
GET/api/ispms/technician/ticketsDaftar tiket yang ditugaskan
GET/api/ispms/technician/tickets/{id}Detail tiket
PUT/api/ispms/technician/tickets/{id}/statusUpdate status tiket
POST/api/ispms/technician/tickets/{id}/photosUpload foto bukti tiket
POST/api/ispms/technician/locationUpdate lokasi GPS teknisi
GET/api/ispms/technician/scheduleJadwal kerja teknisi
POST/api/ispms/technician/fcm-tokenRegister FCM token
GET/api/ispms/technician/notificationsDaftar notifikasi

Public API (3 Endpoint)

Endpoint publik yang tidak memerlukan autentikasi.

Public API Endpoints
MethodEndpointDeskripsi
GET/api/ispms/public/servicesDaftar paket internet yang tersedia
GET/api/ispms/public/coverageArea cakupan layanan (koordinat)
POST/api/ispms/public/check-coverageCek apakah lokasi tercover layanan

Contoh: Cek Coverage

POST /api/ispms/public/check-coverage
// Request
{
    "latitude": 5.5483,
    "longitude": 95.3238
}

// Response 200 OK
{
    "covered": true,
    "nearest_odp": {
        "name": "ODP-BNA-03-05",
        "distance_meters": 120,
        "available_ports": 4
    },
    "available_services": [
        {
            "name": "Paket Home 10 Mbps",
            "price": 150000
        },
        {
            "name": "Paket Home 20 Mbps",
            "price": 200000
        }
    ]
}

Callback Pembayaran

MonetaPay mengirim callback ke endpoint berikut saat pembayaran QRIS berhasil.

POST /api/ispms/payment/callback
// Callback dari MonetaPay
{
    "transaction_id": "TRX-123456",
    "invoice_number": "INV-2026-04-0001",
    "amount": 200000,
    "status": "success",
    "payment_method": "QRIS",
    "paid_at": "2026-04-01T10:30:00Z",
    "signature": "sha256_hash..."
}

// Response 200 OK
{
    "status": "ok",
    "message": "Payment processed"
}

Rate Limiting

Batas Rate Limit
EndpointLimitWindow
Auth (login/register)5 requestPer menit
API Customer (authenticated)60 requestPer menit
API Technician (authenticated)60 requestPer menit
Public API30 requestPer menit
Payment Callback10 requestPer menit

Format Error Response

Contoh Error Response
// 401 Unauthorized
{
    "message": "Unauthenticated."
}

// 422 Validation Error
{
    "message": "The given data was invalid.",
    "errors": {
        "phone": ["Nomor telepon wajib diisi."],
        "password": ["Password minimal 8 karakter."]
    }
}

// 429 Too Many Requests
{
    "message": "Too many attempts. Please try again in 60 seconds."
}
Tips: Semua response menggunakan format JSON. Gunakan header Accept: application/json dan Authorization: Bearer {token} pada setiap request yang memerlukan autentikasi.