Dokumentasi
DocsAPI & Webhooks

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

1
Buka Dashboard Admin

Navigasi ke menu Settings > API Keys di dashboard admin. Halaman ini menampilkan daftar API key yang sudah dibuat.

2
Generate API Key Baru

Klik tombol Generate API Key. Masukkan nama deskriptif (contoh: Integration ERP) dan pilih permission scope yang dibutuhkan.

3
Salin & Simpan Key

API key hanya ditampilkan sekali saat dibuat. Salin dan simpan di tempat yang aman. Jika hilang, buat key baru dan revoke yang lama.

4
Test Koneksi API

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
}
FieldTipeKeterangan
dataobject | array | nullBearer Token (JWT)
metaobject | nullAPI Key (Header)
errorobject | nullWebhook 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.

ResourceBase PathKeterangan
Subscribers/api/v1/subscribersFormat Response (JSON Envelope)
Services/api/v1/servicesLayanan internet per subscriber: PPPoE, Hotspot, Static IP, DHCP. Termasuk aktivasi dan suspend.
Invoices/api/v1/invoicesFormat Error Response
Payments/api/v1/paymentsPagination:
Packages/api/v1/packagesPaket layanan internet: harga, bandwidth, burst, FUP, quota.
Routers/api/v1/routersmeta.next_cursor
Tickets/api/v1/ticketsTiket support: create, assign, update status, add comment.
Work Orders/api/v1/work-ordersEndpoint Utama
Financial/api/v1/journalsJurnal akuntansi dan laporan keuangan. Read-only via API.
Inventory/api/v1/inventoryBase 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.

1
Navigasi ke Pengaturan > Webhooks

Buka dashboard admin dan masuk ke menu Pengaturan > Webhooks. Di sini Anda akan melihat daftar webhook yang sudah dikonfigurasi.

2
Klik Tambah Webhook

Klik tombol 'Tambah Webhook' untuk membuat webhook baru. Form konfigurasi akan muncul.

3
Masukkan URL Endpoint

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

4
Tentukan Webhook Secret

Sistem akan otomatis generate webhook secret. Salin secret ini untuk digunakan memverifikasi signature webhook di aplikasi Anda. Secret hanya ditampilkan sekali.

5
Pilih Event yang Diinginkan

Centang event-event yang ingin Anda terima. Anda bisa memilih event spesifik atau 'Semua Event' untuk menerima semua notifikasi.

6
Aktifkan dan Simpan

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.

EventTrigger
subscriber.createdHTTP Status Codes:
subscriber.updatedData subscriber diperbarui (nama, alamat, kontak).
subscriber.deletedWebhook System
service.activatedService internet baru diaktifkan (PPPoE/Hotspot/Static/DHCP).
service.suspendedService di-suspend karena tunggakan atau manual oleh admin.
service.reactivatedSetup Webhook
service.terminatedService dihentikan secara permanen (subscriber berhenti).
invoice.createdHTTPS Wajib:
invoice.paidInvoice telah dibayar dan dikonfirmasi.
invoice.overdueEvent Types
invoice.cancelledInvoice dibatalkan oleh admin.
payment.receivedWebhook Payload
ticket.createdTiket support baru dibuat oleh subscriber atau admin.
ticket.resolvedStruktur Payload
work_order.assignedHeader Webhook
work_order.completedWork 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:

HeaderKeterangan
X-Webhook-IdVerifikasi Signature
X-Webhook-Signature1 menit
X-Webhook-TimestampTimestamp Validation:
Content-Typeapplication/json
User-AgentLancarTech-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)

PercobaanDelayWaktu Total
1 (Pertama)Segera0 detik
1 (Pertama)Segera0 detik
1 (Pertama)Segera0 detik
1 (Pertama)Segera0 detik
1 (Pertama)Segera0 detik
1 (Pertama)Segera0 detik

Status Delivery

Delivered

Webhook berhasil dikirim dan endpoint merespons HTTP 2xx.

Pending

Webhook sedang dalam antrian retry. Akan dicoba lagi sesuai jadwal.

Failed

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.

PlanRequest / MenitRequest / HariWebhook Endpoint
Starter6010.0002
Professional300100.0005
Enterprise1.000500.00020
CustomUnlimited*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:

HeaderKeterangan
X-RateLimit-Limit60
X-RateLimit-Remaining300
X-RateLimit-Reset1.000
Retry-AfterHTTP 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.