---
title: "Autentikasi & Batas Pemakaian"
summary: "Cara membuat dan memakai API key (Bearer lsk_live_...), arti setiap error 401, batas 60 request/menit per key, dan praktik keamanan."
slug: developer-api-autentikasi
product: LENSIRO
source: https://lensiro.com/dokumentasi/developer-api-autentikasi
updated: 2026-08-23
---

# Autentikasi & Batas Pemakaian

> Cara membuat dan memakai API key (Bearer lsk_live_...), arti setiap error 401, batas 60 request/menit per key, dan praktik keamanan.

## Membuat API key

API key dibuat sendiri dari dalam aplikasi, di menu **Pengaturan → API Key** (butuh izin `setting:api-key`).

1. Klik **Buat API Key**.
2. Isi **Nama** — deskripsi integrasinya, misalnya `Integrasi Google Sheets` atau `Dashboard Keuangan Internal`.
3. Isi masa **kedaluwarsa** dalam hari, atau kosongkan kalau key berlaku selamanya.
4. Key ditampilkan **sekali saja** setelah dibuat. Salin dan simpan segera.

Daftar key menampilkan kolom **Nama**, **Dibuat Oleh**, **Dibuat**, **Terakhir Dipakai**, **Kedaluwarsa**, dan **Status** — berguna untuk mengecek apakah sebuah integrasi masih hidup. Kolom **Terakhir Dipakai** diperbarui paling cepat sekali per menit, jadi wajar kalau tidak berubah di setiap request.

Lensiro **tidak menyimpan** key dalam bentuk aslinya — hanya hash SHA-256 dan 4 karakter terakhir untuk ditampilkan. Artinya tim Lensiro pun tidak bisa memberitahu key lama Anda. Kalau hilang: cabut, lalu buat baru.

## Format dan cara pakai

Key berbentuk `lsk_live_` diikuti 43 karakter acak:

```
lsk_live_7Kq2mZx9Rb4TnV1cWp8yLd6EhG3sJuA5oF0iQrXtN2M
```

Kirim di setiap request lewat header `Authorization`:

```bash
curl -H "Authorization: Bearer lsk_live_xxxxxxxx" \
  "https://app-anda.lensiro.com/api/v1/sales"
```

Tidak ada cara lain — key **tidak** bisa dikirim lewat query string atau cookie.

## Apa yang bisa diakses sebuah key

- **Semua data yang diekspos API ini, di semua cabang.** Belum ada scope maupun pembatasan per cabang di v1.
- **Hanya baca.** Key tidak bisa mengubah apa pun.

Karena satu key berarti akses baca penuh, perlakukan key seperti password admin. Kalau Anda perlu memberi akses ke pihak ketiga yang hanya boleh melihat sebagian data, tunggu dukungan *scoped key* (lihat **Batasan, Versi & Rencana**) — jangan berikan key penuh.

## Error autentikasi

| HTTP | `error.code` | Arti | Yang harus dilakukan |
|---|---|---|---|
| 401 | `missing_api_key` | Header `Authorization: Bearer ...` tidak ada atau salah bentuk | Periksa penulisan header, termasuk spasi setelah `Bearer` |
| 401 | `invalid_api_key` | Key tidak dikenal, atau tidak diawali `lsk_` | Pastikan key tersalin utuh, tanpa spasi atau baris baru |
| 401 | `revoked_api_key` | Key sudah dicabut lewat menu API Key | Buat key baru |
| 401 | `expired_api_key` | Key sudah melewati tanggal kedaluwarsa | Buat key baru |

Bentuk body error selalu sama:

```json
{ "error": { "code": "invalid_api_key", "message": "The API key is not valid." } }
```

## Batas pemakaian (rate limit)

Ada dua lapis batas, keduanya memakai jendela geser 60 detik:

| Batas | Nilai | Dihitung per |
|---|---|---|
| Per API key | **60 request / menit** | key |
| Per alamat IP | **120 request / menit** | IP pemanggil |

Batas per IP diperiksa **sebelum** key divalidasi, jadi request dengan key salah pun ikut terhitung.

Saat terlampaui, API membalas:

```
HTTP/1.1 429 Too Many Requests
Retry-After: 37
```

```json
{ "error": { "code": "rate_limited", "message": "Rate limit exceeded (60 requests/minute)." } }
```

**Cara menanganinya:** tunggu sebanyak detik yang tertulis di `Retry-After`, lalu ulangi request yang sama. Jangan mencoba ulang dalam loop ketat.

Sebagai gambaran, menarik data tiap jam dari empat endpoint hanya memakai beberapa request per jam. Batas ini baru terasa saat backfill besar — di kasus itu, beri jeda sekitar satu detik antar halaman.

## Praktik keamanan

- **Jangan pernah** menaruh key di frontend, aplikasi mobile, repositori publik, atau spreadsheet yang dibagikan. Semua yang berjalan di browser bisa dibaca pengguna.
- Simpan key sebagai *environment variable* atau di secret manager. Di Google Apps Script, pakai **Script Properties**, bukan konstanta di dalam kode.
- **Satu integrasi, satu key.** Kalau nanti perlu dicabut, integrasi lain tidak ikut mati.
- Cabut key yang sudah tidak dipakai. Kolom **Terakhir Dipakai** membantu menemukannya.
- Rotasi berkala: buat key baru → pindahkan integrasi → pastikan berjalan → cabut key lama. Karena kedua key valid bersamaan, tidak ada waktu mati.
- Kalau key diduga bocor, **cabut sekarang** lalu buat baru. Pencabutan langsung berlaku.


---

Dokumentasi Lensiro · https://lensiro.com/dokumentasi/developer-api-autentikasi · diperbarui 23 Agustus 2026
