---
title: Quickstart
---
# Quickstart
Panduan ini akan membantu Anda mengintegrasikan CaptchaLa CAPTCHA dalam 5 menit.
::: tip Lihat dalam 30 detik
[demo-v1.captcha.la](https://demo-v1.captcha.la) — HTML + PHP murni, lisensi MIT, view-source di setiap halaman.
- [popup.html](https://demo-v1.captcha.la/popup.html) — mode popup
- [float.html](https://demo-v1.captcha.la/float.html) — widget mengambang
- [bind.html](https://demo-v1.captcha.la/bind.html) — ikat ke tombol
- [inline.html](https://demo-v1.captcha.la/inline.html) — sematan inline
- [server-token.html](https://demo-v1.captcha.la/server-token.html) — token terbitan server (anti-replay)
:::
## 1. Buat Akun
Daftar akun gratis di dashboard
[Daftar Sekarang →](https://dash.captcha.la/register)
## 2. Buat Aplikasi
Buat aplikasi di dashboard untuk mendapatkan App Key Anda
## 3. Instal SDK
Pilih metode instalasi yang Anda inginkan
```html
```
```bash
# or via npm
npm install captchala
```
## 4. Inisialisasi CAPTCHA
Inisialisasi komponen CAPTCHA di halaman Anda
```html
```
## 5. Verifikasi Server
Verifikasi token di server Anda
```bash
POST https://apiv1.captcha.la/v1/validate
X-App-Key: YOUR_APP_KEY
X-App-Secret: YOUR_APP_SECRET
Content-Type: application/json
{ "pass_token": "" }
```
```json
{
"code": 0,
"data": {
"valid": true,
"action": "login",
"challenge_id": "ch_xxx",
"uid": null,
"risk_score": 12
}
}
```
::: warning
Always check `data.valid === true` **and** `data.action` matches the scene you expected.
Pass tokens are single-use; the same `pt_xxx` cannot be validated twice.
:::
## Mode Token yang Diterbitkan Server (direkomendasikan untuk production) {#server-token}
Untuk aksi sensitif (login, register, payment) kami merekomendasikan alur token yang diterbitkan server: backend Anda terlebih dahulu meminta server_token yang berumur pendek, lalu browser menggunakan token tersebut untuk menginisialisasi CAPTCHA. Ini mencegah penyalahgunaan bila app_key bocor.
### Kapan digunakan
- Direkomendasikan: register, login, reset password, payment, penukaran poin, dan endpoint apa pun yang bisa di-script oleh penyerang.
- Opsional: form publik biasa, kotak pencarian, dan interaksi bernilai rendah ketika kenyamanan lebih penting.
### 1. Backend menerbitkan server_token
Panggil /v1/server/challenge/issue dari server Anda sendiri, menggunakan header X-App-Key dan X-App-Secret. Jangan pernah mengekspos header ini ke browser.
```bash
# Server-side only — never call this from a browser
curl -X POST https://apiv1.captcha.la/v1/server/challenge/issue \
-H "X-App-Key: YOUR_APP_KEY" \
-H "X-App-Secret: YOUR_APP_SECRET" \
-d "action=login&ttl=300&max_uses=1&bind_ip=1.2.3.4"
# → { "code": 0, "data": { "server_token": "sct_...", "expires_in": 300 } }
```
### 2. Frontend merender CaptchaLa dengan server_token
Teruskan token ke komponen CaptchaLa Anda. SDK akan meneruskannya ke inisialisasi verifikasi saat menginisialisasi challenge.
```js
// Browser fetches the token from YOUR backend, not from CaptchaLa directly
const { serverToken } = await fetch('/api/captcha/issue').then(r => r.json());
Captchala.init({
appKey: 'YOUR_APP_KEY',
serverToken, // single-use, short-lived
product: 'popup',
action: 'login',
})
.appendTo('#captcha-container')
.onSuccess(res => submitForm(res.token));
```
### Catatan keamanan
- Jangan pernah menaruh app_secret di kode frontend, aplikasi mobile, atau repository publik. Rahasia ini harus tetap berada di sisi server.
- Aktifkan "Require server-issued challenge token" di dashboard untuk menolak challenge yang dicoba tanpa server_token.
- Jaga ttl tetap pendek (default 300 detik, maks 900 detik) dan utamakan max_uses=1 untuk mengurangi dampak kebocoran token.
## Langkah berikutnya
- [Web SDK](./web-sdk)
- [Referensi API](./api-reference)