API & Webhooks
Dokumentasi lengkap REST API dan sistem Webhook LancarTech untuk integrasi dengan aplikasi eksternal. Mulai dari autentikasi, endpoint utama, contoh request, hingga konfigurasi webhook untuk menerima notifikasi event secara real-time.
Overview
LancarTech menyediakan REST API yang lengkap untuk memungkinkan integrasi dengan sistem eksternal seperti CRM, aplikasi akuntansi, portal custom, atau sistem monitoring pihak ketiga. Seluruh data yang tersedia di dashboard admin dapat diakses secara programmatic melalui API ini.
Selain API untuk mengambil dan memanipulasi data, LancarTech juga menyediakan sistem Webhook yang mengirimkan notifikasi otomatis ke endpoint Anda setiap kali terjadi event penting — seperti subscriber baru terdaftar, invoice dibayar, atau layanan diaktifkan. Kombinasi API + Webhook memungkinkan Anda membangun integrasi dua arah yang powerful.
RESTful JSON API
Endpoint standar REST dengan format JSON. Konsisten, terdokumentasi, dan mudah diintegrasikan dengan bahasa pemrograman apapun.
Autentikasi JWT
Autentikasi berbasis JWT token dengan tenant isolation. Setiap request membawa token yang berisi user ID, tenant ID, dan role.
Webhook Real-Time
Terima notifikasi event secara real-time melalui webhook — subscriber baru, pembayaran masuk, status layanan berubah.
Rate Limiting & Quota
Rate limiting per API key untuk menjaga stabilitas. Quota disesuaikan berdasarkan paket SaaS yang aktif.
Autentikasi API
Semua request ke API memerlukan autentikasi menggunakan API key. API key berfungsi sebagai identitas dan otorisasi aplikasi Anda. Setiap tenant dapat membuat beberapa API key dengan scope yang berbeda-beda.
Membuat API Key
Navigasi ke menu Settings > API Keys di dashboard admin. Halaman ini menampilkan daftar API key yang sudah dibuat.
Klik tombol Generate API Key. Masukkan nama deskriptif (contoh: Integration ERP) dan pilih permission scope yang dibutuhkan.
API key hanya ditampilkan sekali saat dibuat. Salin dan simpan di tempat yang aman. Jika hilang, buat key baru dan revoke yang lama.
Gunakan cURL atau Postman untuk test endpoint /api/v1/health dengan API key Anda. Response 200 OK menandakan integrasi berhasil.
Penggunaan Bearer Token
Sertakan API key sebagai Bearer token di header Authorization pada setiap request:
Authorization: Bearer ltk_live_a1b2c3d4e5f6g7h8i9j0...Keamanan API Key:: environment variable atau secret manager. API key dengan prefix ltk_live_ untuk production dan ltk_test_ untuk sandbox/testing.
Base URL & Format
Semua endpoint API LancarTech berada di bawah base URL berikut:
https://api.lancartech.com/api/v1/Format Response (JSON Envelope)
Semua response API menggunakan format envelope JSON yang konsisten. Baik success maupun error, struktur response-nya selalu sama:
{
"data": {
"id": "01HWXYZ123456",
"name": "John Doe",
"email": "john@example.com"
},
"meta": {
"total": 150,
"next_cursor": "eyJpZCI6IjAxSFdY..."
},
"error": null
}| Field | Tipe | Keterangan |
|---|---|---|
| data | object | array | null | Bearer Token (JWT) |
| meta | object | null | API Key (Header) |
| error | object | null | Webhook Secret (HMAC-SHA256) |
Format Error Response
{
"data": null,
"meta": null,
"error": {
"code": "VALIDATION_ERROR",
"message": "Field 'email' is required.",
"details": [
{ "field": "email", "message": "must not be empty" }
]
}
}Pagination:: Untuk endpoint yang mengembalikan cursor dari meta.next_cursor di response sebelumnya. Default limit 25 item per halaman, max 100.
Endpoint Utama
Berikut adalah daftar kelompok endpoint utama yang tersedia di API LancarTech. Setiap kelompok endpoint mendukung operasi CRUD standar (Create, Read, Update, Delete) kecuali disebutkan lain.
| Resource | Base Path | Keterangan |
|---|---|---|
| Subscribers | /api/v1/subscribers | Format Response (JSON Envelope) |
| Services | /api/v1/services | Layanan internet per subscriber: PPPoE, Hotspot, Static IP, DHCP. Termasuk aktivasi dan suspend. |
| Invoices | /api/v1/invoices | Format Error Response |
| Payments | /api/v1/payments | Pagination: |
| Packages | /api/v1/packages | Paket layanan internet: harga, bandwidth, burst, FUP, quota. |
| Routers | /api/v1/routers | meta.next_cursor |
| Tickets | /api/v1/tickets | Tiket support: create, assign, update status, add comment. |
| Work Orders | /api/v1/work-orders | Endpoint Utama |
| Financial | /api/v1/journals | Jurnal akuntansi dan laporan keuangan. Read-only via API. |
| Inventory | /api/v1/inventory | Base Path |
Multi-Tenancy Otomatis:: — sistem otomatis mem-filter data berdasarkan tenant yang
Contoh Request
Berikut adalah contoh-contoh request API menggunakan curl. Anda dapat menggunakan tools seperti Postman, Insomnia, atau library HTTP di bahasa pemrograman pilihan Anda.
List Subscribers
Mengambil daftar subscriber dengan pagination dan filter pencarian.
curl -X GET "https://api.lancartech.com/api/v1/subscribers?limit=25&search=john" \ -H "Authorization: Bearer ltk_live_a1b2c3d4..." \ -H "Content-Type: application/json"
Response berisi array subscriber di field data beserta meta.total dan meta.next_cursor untuk pagination.
Detail Subscriber
Mengambil detail lengkap satu subscriber berdasarkan ID.
curl -X GET "https://api.lancartech.com/api/v1/subscribers/01HWXYZ123456" \ -H "Authorization: Bearer ltk_live_a1b2c3d4..."
Buat Invoice Manual
Membuat invoice secara manual untuk service tertentu. Berguna untuk tagihan tambahan di luar siklus billing otomatis.
curl -X POST "https://api.lancartech.com/api/v1/invoices" \
-H "Authorization: Bearer ltk_live_a1b2c3d4..." \
-H "Content-Type: application/json" \
-d '{
"service_id": "01HWXYZ789012",
"amount": 150000,
"due_date": "2026-05-01",
"description": "Tagihan Internet Mei 2026",
"items": [
{
"description": "Paket Internet 20 Mbps",
"quantity": 1,
"unit_price": 150000
}
]
}'Record Pembayaran Manual
Mencatat pembayaran cash atau transfer manual yang diterima oleh admin. Invoice akan otomatis ter-update menjadi Paid dan service di-reactivate jika suspended.
curl -X POST "https://api.lancartech.com/api/v1/payments" \
-H "Authorization: Bearer ltk_live_a1b2c3d4..." \
-H "Content-Type: application/json" \
-d '{
"invoice_id": "01HWXYZ345678",
"amount": 150000,
"method": "cash",
"note": "Bayar di kantor"
}'List Invoice dengan Filter
Mengambil daftar invoice dengan filter status dan range tanggal.
curl -X GET "https://api.lancartech.com/api/v1/invoices?status=overdue&from=2026-04-01&to=2026-04-30&limit=50" \ -H "Authorization: Bearer ltk_live_a1b2c3d4..."
HTTP Status Codes:: (Unauthorized), 403 (Forbidden), 404 (Not Found), 422
Webhook System
Webhook memungkinkan aplikasi Anda menerima notifikasi secara real-time setiap kali terjadi event penting di sistem LancarTech. Alih-alih melakukan polling ke API secara berkala, webhook akan otomatis mengirim HTTP POST ke URL endpoint yang Anda tentukan.
Webhook sangat berguna untuk skenario seperti: sinkronisasi data subscriber ke CRM, notifikasi pembayaran ke Slack/Telegram, update dashboard real-time, trigger workflow otomatis di sistem internal, atau audit trail di sistem eksternal.
Integrasi ERP/Akuntansi
Sinkronkan data invoice, pembayaran, dan subscriber dengan sistem ERP atau software akuntansi Anda secara otomatis.
Custom Dashboard
Bangun dashboard kustom menggunakan data API — tampilkan metrik bisnis ISP di tampilan yang sesuai kebutuhan Anda.
Mobile App Integration
Gunakan API untuk membangun aplikasi mobile custom bagi subscriber — cek tagihan, bayar, dan pantau status layanan.
Setup Webhook
Konfigurasi webhook dilakukan melalui dashboard admin. Anda dapat membuat beberapa webhook endpoint dengan event yang berbeda-beda.
Buka dashboard admin dan masuk ke menu Pengaturan > Webhooks. Di sini Anda akan melihat daftar webhook yang sudah dikonfigurasi.
Klik tombol 'Tambah Webhook' untuk membuat webhook baru. Form konfigurasi akan muncul.
Masukkan URL HTTPS endpoint yang akan menerima webhook. Endpoint ini harus dapat diakses dari internet dan merespons dengan HTTP 200 dalam waktu 30 detik. Contoh: https://yourapp.com/webhooks/lancartech
Sistem akan otomatis generate webhook secret. Salin secret ini untuk digunakan memverifikasi signature webhook di aplikasi Anda. Secret hanya ditampilkan sekali.
Centang event-event yang ingin Anda terima. Anda bisa memilih event spesifik atau 'Semua Event' untuk menerima semua notifikasi.
Aktifkan toggle webhook dan klik Simpan. Sistem akan mengirim test ping ke endpoint Anda untuk memastikan konektivitas. Jika test gagal, periksa URL dan firewall Anda.
HTTPS Wajib:: SSL) hanya diizinkan di environment development/sandbox.
Event Types
Berikut adalah daftar lengkap event yang dapat dikirim melalui webhook. Setiap event memiliki nama unik dan payload yang spesifik.
| Event | Trigger |
|---|---|
| subscriber.created | HTTP Status Codes: |
| subscriber.updated | Data subscriber diperbarui (nama, alamat, kontak). |
| subscriber.deleted | Webhook System |
| service.activated | Service internet baru diaktifkan (PPPoE/Hotspot/Static/DHCP). |
| service.suspended | Service di-suspend karena tunggakan atau manual oleh admin. |
| service.reactivated | Setup Webhook |
| service.terminated | Service dihentikan secara permanen (subscriber berhenti). |
| invoice.created | HTTPS Wajib: |
| invoice.paid | Invoice telah dibayar dan dikonfirmasi. |
| invoice.overdue | Event Types |
| invoice.cancelled | Invoice dibatalkan oleh admin. |
| payment.received | Webhook Payload |
| ticket.created | Tiket support baru dibuat oleh subscriber atau admin. |
| ticket.resolved | Struktur Payload |
| work_order.assigned | Header Webhook |
| work_order.completed | Work order telah diselesaikan oleh teknisi. |
Webhook Payload
Setiap webhook dikirim sebagai HTTP POST request dengan body JSON. Berikut adalah struktur payload webhook dan contoh lengkapnya.
Struktur Payload
{
"id": "evt_01HWXYZ987654",
"event": "invoice.paid",
"created_at": "2026-04-05T10:30:00Z",
"data": {
"invoice_id": "01HWXYZ345678",
"invoice_number": "INV-2026-0042",
"subscriber_id": "01HWXYZ123456",
"subscriber_name": "John Doe",
"service_id": "01HWXYZ789012",
"amount": 150000,
"paid_at": "2026-04-05T10:29:55Z",
"payment_method": "bank_transfer",
"payment_channel": "BCA Virtual Account"
}
}Header Webhook
Setiap webhook request menyertakan header berikut untuk verifikasi dan identifikasi:
| Header | Keterangan |
|---|---|
| X-Webhook-Id | Verifikasi Signature |
| X-Webhook-Signature | 1 menit |
| X-Webhook-Timestamp | Timestamp Validation: |
| Content-Type | application/json |
| User-Agent | LancarTech-Webhook/1.0 |
Verifikasi Signature
Selalu verifikasi signature webhook sebelum memproses payload. Berikut contoh verifikasi menggunakan Node.js:
const crypto = require('crypto');
function verifyWebhook(body, signature, secret) {
const expected = crypto
.createHmac('sha256', secret)
.update(body)
.digest('hex');
return crypto.timingSafeEqual(
Buffer.from(signature),
Buffer.from(expected)
);
}
// Pada handler webhook Anda:
app.post('/webhooks/lancartech', (req, res) => {
const signature = req.headers['x-webhook-signature'];
const isValid = verifyWebhook(
JSON.stringify(req.body),
signature,
process.env.WEBHOOK_SECRET
);
if (!isValid) {
return res.status(401).json({ error: 'Invalid signature' });
}
// Proses event...
const { event, data } = req.body;
console.log('Event diterima:', event, data);
res.status(200).json({ received: true });
});Timestamp Validation:: Selain verifikasi X-Webhook-Timestamp. Tolak webhook yang timestamp-nya lebih dari 5 menit dari waktu server Anda untuk mencegah replay attack.
Retry & Delivery
LancarTech memastikan webhook terkirim dengan mekanisme retry otomatis. Jika endpoint Anda tidak merespons atau mengembalikan error, sistem akan mencoba mengirim ulang webhook secara bertahap.
Jadwal Retry (Exponential Backoff)
| Percobaan | Delay | Waktu Total |
|---|---|---|
| 1 (Pertama) | Segera | 0 detik |
| 1 (Pertama) | Segera | 0 detik |
| 1 (Pertama) | Segera | 0 detik |
| 1 (Pertama) | Segera | 0 detik |
| 1 (Pertama) | Segera | 0 detik |
| 1 (Pertama) | Segera | 0 detik |
Status Delivery
Webhook berhasil dikirim dan endpoint merespons HTTP 2xx.
Webhook sedang dalam antrian retry. Akan dicoba lagi sesuai jadwal.
Semua percobaan gagal setelah 5 retry. Webhook tidak akan dicoba lagi secara otomatis.
Manual Retry
Webhook yang berstatus Failed dapat dikirim ulang secara manual dari dashboard admin. Buka Pengaturan > Webhooks > Delivery Log untuk melihat riwayat pengiriman dan status setiap event. Klik tombol "Retry" pada event yang gagal untuk mengirim ulang. Anda juga dapat mengirim test event dari halaman konfigurasi webhook untuk memvalidasi endpoint.
Timeout:: membutuhkan waktu lama, kembalikan HTTP 200 segera lalu
Rate Limiting
Untuk menjaga stabilitas dan performa sistem, API LancarTech menerapkan rate limiting berdasarkan plan SaaS yang Anda gunakan. Limit dihitung per API key per menit.
| Plan | Request / Menit | Request / Hari | Webhook Endpoint |
|---|---|---|---|
| Starter | 60 | 10.000 | 2 |
| Professional | 300 | 100.000 | 5 |
| Enterprise | 1.000 | 500.000 | 20 |
| Custom | Unlimited* | Unlimited* | Unlimited* |
* Plan Custom memiliki limit yang disesuaikan berdasarkan kesepakatan. Hubungi tim sales untuk informasi lebih lanjut.
Header Rate Limit
Setiap response API menyertakan header rate limit agar aplikasi Anda dapat mengatur tempo request secara proaktif:
| Header | Keterangan |
|---|---|
| X-RateLimit-Limit | 60 |
| X-RateLimit-Remaining | 300 |
| X-RateLimit-Reset | 1.000 |
| Retry-After | HTTP 429: |
HTTP 429: API akan mengembalikan status 429 (Too Many Requests) dengan header Retry-After yang menunjukkan berapa detik Anda harus menunggu. Implementasikan exponential backoff di aplikasi Anda untuk menangani kasus ini secara graceful.
Best Practices
Ikuti panduan best practices berikut untuk memastikan integrasi API dan Webhook Anda berjalan dengan optimal, aman, dan handal.
Idempotency
Gunakan header X-Idempotency-Key pada request POST/PUT untuk mencegah duplikasi data saat retry. Kirimkan UUID unik sebagai value. Sistem akan mengembalikan response yang sama untuk key yang sudah pernah diproses dalam 24 jam terakhir.
Verifikasi Webhook Signature
Selalu verifikasi X-Webhook-Signature sebelum memproses payload webhook. Ini memastikan webhook benar-benar dikirim oleh LancarTech dan bukan dari pihak ketiga yang berbahaya. Gunakan timing-safe comparison untuk mencegah timing attack.
Handle Error dengan Graceful
Implementasikan error handling yang komprehensif. Periksa HTTP status code dan field error di response. Untuk error 5xx (server error), implementasikan retry dengan exponential backoff. Untuk error 4xx (client error), perbaiki request Anda.
Gunakan Cursor Pagination
Untuk endpoint yang mengembalikan list data, selalu gunakan cursor-based pagination. Hindari mengambil semua data sekaligus. Gunakan meta.next_cursor dari response sebelumnya untuk halaman berikutnya.
Simpan Webhook Secret dengan Aman
Jangan hardcode webhook secret di source code. Gunakan environment variable atau secret manager. Rotasi secret secara berkala melalui dashboard admin — webhook lama tetap valid selama 24 jam setelah rotasi untuk transisi yang smooth.
Proses Webhook secara Asynchronous
Respons webhook dengan HTTP 200 secepat mungkin, lalu proses event di background job. Jangan melakukan operasi berat (API call ke sistem lain, query database kompleks) di handler webhook — ini bisa menyebabkan timeout dan retry yang tidak perlu.
Deduplikasi Webhook
Dalam kasus retry, webhook yang sama bisa dikirim lebih dari sekali. Gunakan id dari payload webhook (evt_xxx) untuk deduplikasi. Simpan ID event yang sudah diproses dan skip jika diterima ulang.
Monitoring & Alerting
Monitor delivery rate webhook Anda melalui dashboard admin. Setup alert jika terjadi banyak webhook failed — ini bisa mengindikasikan masalah pada endpoint Anda (downtime, bug, firewall block). Periksa delivery log secara berkala.
Siap Mengintegrasikan?
Buat API key pertama Anda dan mulai integrasikan LancarTech dengan sistem Anda. Jika membutuhkan bantuan, tim teknis kami siap membantu melalui tiket support.