API Reference — Otentikasi
Endpoint login JWT, logout, dan manajemen API key (x-api-key) tingkat pengguna.
← Kembali ke Otentikasi
Panduan JWT, API key, dan header federation untuk integrasi.
Memulai
Panduan pertama kali menggunakan Lenz Dashboard.
Endpoint Login (POST /api/auth/token) tidak memerlukan header Authorization — Anda belum memiliki token saat memanggil endpoint ini. Semua endpoint lain, termasuk logout dan seluruh manajemen API key, memerlukan header Authorization: Bearer <token>. Basis URL mengikuti variabel lingkungan VITE_API_URL yang dikonfigurasi pada instalasi Lenz.
Login & Token
Endpoint untuk memperoleh token akses (access_token) dan mengakhiri sesi. Login mendukung dua metode: username/password via JSON body, atau API key via header X-Api-Key — keduanya mengarah ke endpoint yang sama dan mengembalikan format respons yang identik.
Login — Dapatkan Token Akses
Header Parameters
API key yang valid (untuk metode login via API key — abaikan jika menggunakan username/password)
Request Body
application/json
Kredensial login (wajib untuk metode username/password; abaikan untuk metode API key)
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
application/json
curl -X POST "https://lenz.example.com/api/auth/token" \ -H "Content-Type: application/json" \ -d '{ "user_access": "admin@example.com", "password": "rahasia123" }'{ "ok": true, "message": "success", "access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsImVtYWlsIjoiYWRtaW5AZXhhbXBsZS5jb20iLCJpYXQiOjE3NDYwMDAwMDB9.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c", "refresh_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiI0MiIsInR5cGUiOiJyZWZyZXNoIiwiaWF0IjoxNzQ2MDAwMDAwfQ.abc123def456ghi789", "name": "Siti Rahayu"}{ "ok": false, "message": "invalid request"}Logout — Akhiri Sesi
curl -X POST "https://lenz.example.com/api/auth/logout"{ "success": true, "message": "logout successful"}API Keys
Endpoint untuk mengelola API key tingkat pengguna. API key berguna untuk integrasi service-to-service, skrip otomatis, dan CI/CD pipeline. Setelah API key dibuat atau diperbarui, nilai key rahasia hanya dikembalikan satu kali pada respons — simpan segera.
Jangan menyimpan nilai API key di source code atau commit ke repository publik. Gunakan environment variable, secret manager (seperti Vault atau AWS Secrets Manager), atau file .env yang masuk ke dalam .gitignore.
Daftar API Key
Authorization
bearerAuth In: header
Query Parameters
Nomor halaman, dimulai dari 1
1Jumlah data per halaman
20Pencarian berdasarkan nama API key
Filter berdasarkan status API key
"active" | "inactive"Response Body
application/json
curl -X GET "https://lenz.example.com/api/api-keys"{ "ok": true, "message": "success", "results": { "limit": 20, "current_page": 1, "total_data": 2, "total_page": 1, "api_keys": [ { "id": 7, "user_id": 42, "name": "Integrasi CCTV Gedung A", "status": "active", "last_used_at": "2026-04-28T08:30:00Z", "expires_at": "2027-04-30T00:00:00Z", "created_by": 1, "created_at": "2026-01-15T10:00:00Z", "updated_at": "2026-04-01T09:00:00Z", "username": "siti.rahayu", "email": "siti.rahayu@example.com" } ] }}Buat API Key Baru
Authorization
bearerAuth In: header
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X POST "https://lenz.example.com/api/api-keys" \ -H "Content-Type: application/json" \ -d '{ "name": "Integrasi CCTV Gedung B", "expires_at": "2027-12-31T23:59:59Z" }'{ "ok": true, "message": "success", "api_key": { "id": 9, "user_id": 42, "name": "Integrasi CCTV Gedung B", "status": "active", "key": "lenz_ak_4f8e2a1b3d7c9e0f5a2b6d8c1e4f7a3b", "last_used_at": null, "expires_at": "2027-12-31T23:59:59Z", "created_by": 42, "created_at": "2026-04-30T12:00:00Z", "updated_at": "2026-04-30T12:00:00Z", "username": "siti.rahayu", "email": "siti.rahayu@example.com" }}Detail API Key
Authorization
bearerAuth In: header
Path Parameters
ID numerik API key
Response Body
application/json
curl -X GET "https://lenz.example.com/api/api-keys/7"{ "ok": true, "message": "string", "api_key": { "id": 7, "user_id": 42, "name": "Integrasi CCTV Gedung A", "status": "active", "last_used_at": "2026-04-28T08:30:00Z", "expires_at": "2027-04-30T00:00:00Z", "created_by": 1, "created_at": "2026-01-15T10:00:00Z", "updated_at": "2026-04-01T09:00:00Z", "username": "siti.rahayu", "email": "siti.rahayu@example.com" }}Perbarui API Key
Authorization
bearerAuth In: header
Path Parameters
ID numerik API key
Request Body
application/json
TypeScript Definitions
Use the request body type in TypeScript.
Response Body
application/json
curl -X PUT "https://lenz.example.com/api/api-keys/7" \ -H "Content-Type: application/json" \ -d '{ "name": "Integrasi CCTV Gedung A — Diperbarui", "expires_at": "2028-01-01T00:00:00Z" }'{ "ok": true, "message": "string", "api_key": { "id": 7, "user_id": 42, "name": "Integrasi CCTV Gedung A", "status": "active", "last_used_at": "2026-04-28T08:30:00Z", "expires_at": "2027-04-30T00:00:00Z", "created_by": 1, "created_at": "2026-01-15T10:00:00Z", "updated_at": "2026-04-01T09:00:00Z", "username": "siti.rahayu", "email": "siti.rahayu@example.com", "key": "lenz_ak_4f8e2a1b3d7c9e0f5a2b6d8c1e4f7a3b" }}Hapus API Key
Authorization
bearerAuth In: header
Path Parameters
ID numerik API key
Response Body
application/json
curl -X DELETE "https://lenz.example.com/api/api-keys/7"{ "ok": true, "message": "success"}Federation Headers
Dalam arsitektur multi-instance Lenz, header X-User-Permissions digunakan oleh Federation Module (Core) saat meneruskan request pengguna ke remote instance (backend) — bukan oleh integrator eksternal. Tidak ada endpoint khusus untuk alur ini; mekanisme ini terjadi otomatis di layer middleware backend.
Ketika Federation Module membuat request ke remote instance, dua header berikut selalu disertakan bersama-sama:
| Header | Nilai | Keterangan |
|---|---|---|
X-Api-Key | API key remote instance yang valid | Mengotentikasi Federation Module ke remote instance |
X-User-Permissions | JWT bertanda tangan HMAC-SHA256 | Membawa identitas dan izin pengguna yang sudah difilter |
JWT X-User-Permissions ditandatangani menggunakan API key remote instance sebagai secret, sehingga remote instance dapat memvalidasi keasliannya tanpa perlu lookup ke database lokal. TTL JWT ini adalah 5 menit — Federation Module membuat JWT baru untuk setiap batch request.