Autentikasi
Dua cara autentikasi dengan API s.id, API key untuk server-ke-server, OAuth 2.0 untuk bertindak atas nama pengguna.
Akses server-ke-server
API key dipakai buat autentikasi integrasi server-ke-server. Buat satu di Dashboard → Developer → API Keys, pilih scope kamu, lalu kirim sebagai token Bearer.
| Scope | Akses |
|---|---|
links:read | Lihat daftar dan detail link |
links:write | Buat dan perbarui link (buat, edit, pulihkan) |
links:archive | Arsipkan link |
links:analytics | Lihat statistik klik per link dan jumlah sepanjang waktu |
qr:read | Lihat pengaturan QR (global dan per link) |
qr:write | Sesuaikan pengaturan QR (global dan per link) |
user:read | Lihat profil pengguna terautentikasi dan kuota akun |
microsites:read | Lihat microsite |
microsites:write | Buat, perbarui, dan kelola komponen microsite |
microsites:delete | Hapus microsite dan komponennya |
bash
Authorization: Bearer sk_live_...bash
curl https://api.s.id/v2/links \
-H "Authorization: Bearer sk_live_..."- Kunci diawali sk_live_ dan hanya ditampilkan sekali saat pembuatan.
- Minta scope seminimal mungkin yang integrasimu butuhkan.
- Cabut kunci segera jika dikompromi, buat yang baru.
- Jangan pernah mengekspos API key di sisi klien (browser, aplikasi mobile).
Alur otorisasi
Arahkan pengguna ke s.id untuk memberikan persetujuan, verifikasi state saat callback, lalu tukarkan kode sekali pakai dengan access token dan refresh token yang berotasi.
- Buat nilai state acak, simpan di sesi pengguna, lalu verifikasi kecocokan persis saat callback untuk mencegah CSRF.
- Gunakan redirect_uri yang persis sama dengan URI yang terdaftar untuk aplikasi OAuth-mu.
PKCE wajib, tanpa client secret
Untuk SPA, aplikasi mobile, dan CLI. Buat code_verifier acak, kirim challenge S256 saat authorize, lalu kirim verifier asli ketika menukar token.
bash
https://api.s.id/oauth/authorize?
response_type=code&
client_id=YOUR_CLIENT_ID&
redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback&
scope=links%3Aread%20links%3Awrite&
state=RANDOM_CSRF_VALUE&
code_challenge=BASE64URL_SHA256_VERIFIER&
code_challenge_method=S256bash
curl -X POST https://api.s.id/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "client_id=YOUR_CLIENT_ID" \
-d "code=AUTHORIZATION_CODE" \
-d "redirect_uri=https://app.example.com/callback" \
-d "code_verifier=ORIGINAL_RANDOM_VERIFIER"Client secret di backend tepercaya
Untuk aplikasi server-rendered atau backend yang dapat menjaga client_secret. PKCE tetap opsional dan disarankan sebagai perlindungan tambahan.
bash
https://api.s.id/oauth/authorize?
response_type=code&
client_id=YOUR_CLIENT_ID&
redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback&
scope=links%3Aread%20links%3Awrite&
state=RANDOM_CSRF_VALUEbash
curl -X POST https://api.s.id/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=authorization_code" \
-d "client_id=YOUR_CLIENT_ID" \
-d "client_secret=YOUR_CLIENT_SECRET" \
-d "code=AUTHORIZATION_CODE" \
-d "redirect_uri=https://app.example.com/callback"| Access token | Keterangan |
|---|---|
access_token | Berlaku selama 1 jam |
refresh_token | Berlaku selama 30 hari |
code | Sekali pakai; kedaluwarsa setelah 10 menit |
bash
curl -X POST https://api.s.id/oauth/token \
-H "Content-Type: application/x-www-form-urlencoded" \
-d "grant_type=refresh_token" \
-d "client_id=YOUR_CLIENT_ID" \
-d "refresh_token=CURRENT_REFRESH_TOKEN"bash
curl -X POST https://api.s.id/oauth/revoke \
-H "Content-Type: application/json" \
-d '{"token":"TOKEN_TO_REVOKE"}'| Discovery dan operasi token | Keterangan |
|---|---|
https://api.s.id/.well-known/oauth-authorization-server | Temukan URL endpoint, scope yang didukung, dan metode PKCE melalui metadata RFC 8414. |
POST /oauth/introspect | Resource server rahasia dapat memeriksa apakah token aktif dan melihat scope-nya. |
POST /oauth/revoke | Cabut access token atau refresh token saat pengguna memutus integrasimu. |
GET /oauth/userinfo | Baca profil yang terkait dengan access token OAuth yang memiliki user:read. |