Dokumentasi API RESTful untuk aplikasi pelanggan, aplikasi teknisi, dan API publik. Total 53 endpoint menggunakan JSON dan autentikasi Bearer Token.
API menggunakan Laravel Sanctum untuk autentikasi token-based. Setiap aplikasi memiliki endpoint login terpisah.
// 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"
}
}
// 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"
}
}
Endpoint untuk aplikasi pelanggan. Semua memerlukan autentikasi kecuali yang ditandai publik.
| Method | Endpoint | Deskripsi |
|---|---|---|
| POST | /api/ispms/customer/auth/login | Login pelanggan |
| POST | /api/ispms/customer/auth/register | Registrasi pelanggan baru |
| POST | /api/ispms/customer/auth/logout | Logout & hapus token |
| POST | /api/ispms/customer/auth/forgot-password | Request reset password |
| GET | /api/ispms/customer/profile | Data profil pelanggan |
| PUT | /api/ispms/customer/profile | Update profil |
| POST | /api/ispms/customer/profile/photo | Upload foto profil |
| GET | /api/ispms/customer/subscriptions | Daftar langganan |
| GET | /api/ispms/customer/subscriptions/{id} | Detail langganan |
| GET | /api/ispms/customer/invoices | Daftar invoice |
| GET | /api/ispms/customer/invoices/{id} | Detail invoice |
| GET | /api/ispms/customer/invoices/{id}/pay | Generate link pembayaran QRIS |
| GET | /api/ispms/customer/payments | Riwayat pembayaran |
| GET | /api/ispms/customer/payments/{id} | Detail pembayaran |
| GET | /api/ispms/customer/tickets | Daftar tiket |
| GET | /api/ispms/customer/tickets/{id} | Detail tiket |
| POST | /api/ispms/customer/tickets | Buat tiket baru |
| POST | /api/ispms/customer/tickets/{id}/comment | Tambah komentar pada tiket |
| GET | /api/ispms/customer/notifications | Daftar notifikasi |
| PUT | /api/ispms/customer/notifications/{id}/read | Tandai notifikasi dibaca |
| GET | /api/ispms/customer/services | Daftar paket tersedia |
| POST | /api/ispms/customer/upgrade-request | Request upgrade/downgrade paket |
| GET | /api/ispms/customer/usage | Data penggunaan bandwidth |
| GET | /api/ispms/customer/speed-test | Hasil speed test terakhir |
| POST | /api/ispms/customer/speed-test | Simpan hasil speed test |
| GET | /api/ispms/customer/branches | Daftar cabang |
| POST | /api/ispms/customer/fcm-token | Register FCM token push notification |
| PUT | /api/ispms/customer/change-password | Ubah password |
| GET | /api/ispms/customer/faq | Daftar FAQ |
Endpoint untuk aplikasi teknisi lapangan.
| Method | Endpoint | Deskripsi |
|---|---|---|
| POST | /api/ispms/technician/auth/login | Login teknisi |
| POST | /api/ispms/technician/auth/logout | Logout teknisi |
| GET | /api/ispms/technician/profile | Profil teknisi |
| GET | /api/ispms/technician/work-orders | Daftar work order yang ditugaskan |
| GET | /api/ispms/technician/work-orders/{id} | Detail work order |
| PUT | /api/ispms/technician/work-orders/{id}/start | Mulai pengerjaan WO |
| PUT | /api/ispms/technician/work-orders/{id}/complete | Selesaikan WO |
| POST | /api/ispms/technician/work-orders/{id}/photos | Upload foto bukti pengerjaan |
| GET | /api/ispms/technician/tickets | Daftar tiket yang ditugaskan |
| GET | /api/ispms/technician/tickets/{id} | Detail tiket |
| PUT | /api/ispms/technician/tickets/{id}/status | Update status tiket |
| POST | /api/ispms/technician/tickets/{id}/photos | Upload foto bukti tiket |
| POST | /api/ispms/technician/location | Update lokasi GPS teknisi |
| GET | /api/ispms/technician/schedule | Jadwal kerja teknisi |
| POST | /api/ispms/technician/fcm-token | Register FCM token |
| GET | /api/ispms/technician/notifications | Daftar notifikasi |
Endpoint publik yang tidak memerlukan autentikasi.
| Method | Endpoint | Deskripsi |
|---|---|---|
| GET | /api/ispms/public/services | Daftar paket internet yang tersedia |
| GET | /api/ispms/public/coverage | Area cakupan layanan (koordinat) |
| POST | /api/ispms/public/check-coverage | Cek apakah lokasi tercover layanan |
// 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
}
]
}
MonetaPay mengirim callback ke endpoint berikut saat pembayaran QRIS berhasil.
// 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"
}
| Endpoint | Limit | Window |
|---|---|---|
| Auth (login/register) | 5 request | Per menit |
| API Customer (authenticated) | 60 request | Per menit |
| API Technician (authenticated) | 60 request | Per menit |
| Public API | 30 request | Per menit |
| Payment Callback | 10 request | Per menit |
// 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."
}
Accept: application/json dan Authorization: Bearer {token} pada setiap request yang memerlukan autentikasi.