Ringkasan
Scalev menggunakan OAuth 2.0 Authorization Code dengan PKCE. Alur ini terbagi ke dua permukaan:- langkah otorisasi yang menghadap merchant dimulai di halaman authorize frontend Scalev
- endpoint token, introspection, revocation, dan installation berada di permukaan API
/v3/oauth/*
- Daftarkan aplikasi Anda ke Scalev
- Buat parameter PKCE
- Redirect browser merchant ke halaman authorize Scalev
- Merchant masuk dan menyetujui aplikasi Anda untuk satu atau beberapa bisnis
- Backend Anda menerima authorization code
- Backend Anda menukar code tersebut dengan token
- Backend Anda menggunakan access token untuk memanggil API Scalev
/v3, dengan memilih satu bisnis untuk setiap request bisnis jika diperlukan - Backend Anda melakukan refresh, introspection, atau revoke token sesuai kebutuhan
Halaman authorize adalah rute frontend, bukan endpoint API untuk mesin. Halaman ini sengaja dipisahkan dari kontrak API /v3.
URL
URL Otorisasi Frontend
Base URL API
Langkah 0: Daftarkan dan Siapkan Aplikasi Anda
Sebelum merchant dapat menginstal aplikasi Anda, buat dan konfigurasi aplikasi OAuth Anda di Scalev. Field aplikasi penting meliputi:client_idclient_secretredirect_urimanage_urlopsional- scope yang diminta
- pengaturan webhook opsional
- tag billing opsional
- IP allowlist opsional
redirect_uriharus sama persisclient_secretharus tetap berada di sisi server- jika aplikasi Anda menggunakan event webhook, konfigurasi pengaturan webhook aplikasi dengan benar
- jika aplikasi Anda mendukung link launch merchant dari Scalev, atur
manage_url - instalasi merchant diblokir sampai aplikasi terverifikasi
Langkah 1: Buat Parameter PKCE
Sebelum me-redirect merchant, buat:code_verifiercode_challengeyang diturunkan dari verifier tersebut menggunakan SHA-256 dan encoding Base64 URL
Contoh Code Verifier (JavaScript)
Contoh Code Challenge (JavaScript)
code_verifier dengan aman. Anda akan membutuhkannya saat pertukaran token.
Langkah 2: Redirect Merchant ke Scalev
Redirect browser merchant ke:| Parameter | Wajib | Deskripsi |
|---|---|---|
client_id | Ya | Client ID aplikasi OAuth Anda |
redirect_uri | Ya | Harus sama persis dengan redirect URI yang dikonfigurasi |
response_type | Ya | Harus code |
state | Ya | Nilai acak perlindungan CSRF yang dibuat oleh aplikasi Anda |
code_challenge | Ya | Hash SHA-256 dari code verifier yang di-encode dengan Base64 URL |
code_challenge_method | Ya | Harus S256 |
- PKCE wajib digunakan
- hanya
S256yang diterima - entrypoint authorize adalah URL frontend, bukan API
/v3 - jika merchant belum masuk, Scalev akan membawa mereka melalui login lalu mengembalikannya ke halaman authorize dengan parameter query OAuth yang sama
Opsional: Ambil Metadata Aplikasi Publik Sebelum Redirect
Jika Anda ingin melakukan preflight atau menampilkan metadata aplikasi dari backend, panggil:client_idnamedescriptionlogo_urlhomepage_urlredirect_uri
Langkah 3: Merchant Meninjau dan Menyetujui Aplikasi
Di halaman authorize Scalev, merchant dapat meninjau dan menyetujui:- identitas aplikasi
- bisnis yang ingin dihubungkan
- scope yang diminta
- izin webhook, jika berlaku
- persetujuan tag billing, jika berlaku
redirect_uri yang Anda konfigurasi.
Langkah 4: Terima Authorization Code
Setelah disetujui, callback backend Anda menerima:- verifikasi
stateyang dikembalikan - segera tukarkan code tersebut
- hanya alur authorization-code
- TTL code adalah 10 menit
- setiap code hanya dapat ditukar satu kali
Langkah 5: Tukarkan Code dengan Token
Dari backend Anda, tukarkan code di:| Field | Deskripsi |
|---|---|
access_token | Token yang digunakan untuk permintaan API /v3 terautentikasi |
refresh_token | Token yang digunakan untuk memperoleh access token baru |
token_type | Selalu Bearer |
expires_in | Masa berlaku access token dalam detik |
Langkah 6: Gunakan Access Token
Gunakan access token di headerAuthorization:
/v3 yang diotorisasi merchant dan sesuai dengan scope yang diberikan.
Identitas Token dan Bisnis yang Terhubung
Panggil/v3/me setelah menerima access token:
/v3/me adalah identitas token dan user. Endpoint ini bukan identitas bisnis yang sedang dipilih. Instalasi OAuth yang dicabut atau inactive tidak ditampilkan di connected_businesses[]. Jika tidak ada bisnis aktif yang tersisa, Scalev mengembalikan 403 tanpa data identitas.
Pilih Bisnis untuk Request API
Request API/v3 yang bersifat business-scoped selalu berjalan pada satu bisnis yang dipilih.
- jika token memiliki satu bisnis terhubung, selector dapat dihilangkan
- jika token memiliki beberapa bisnis terhubung, kirim
b_uid=<business.unique_id>pada setiap request business-scoped - gunakan
unique_iddari/v3/me.connected_businesses[] - jika akses ke bisnis yang dipilih dicabut atau dinonaktifkan, bisnis tersebut mengembalikan
403tetapi bisnis aktif lain yang terhubung tetap dapat digunakan
unique_id bisnis yang dikembalikan oleh /v3/me sebagai selector API, misalnya b_uid=ABC123.
Pemeriksaan Awal yang Berguna
Token Introspection
Snapshot Status Instalasi
authorized_business_idclient_idis_activeis_enabledgranted_scopeswebhook_statusgranted_webhook_eventsapproved_billing_tagsmanage_launch_availableupdated_at
/v3/oauth/installation/status mengembalikan satu snapshot koneksi merchant. Jika Anda mengirim referensi token multi-bisnis, Scalev mengembalikan error karena endpoint ini tidak memiliki selector bisnis. Gunakan /v3/me untuk melihat daftar bisnis yang terhubung ke token multi-bisnis.
Langkah 7: Refresh Access Token
Ketika access token kedaluwarsa, gunakan refresh token:- selalu ganti access token dan refresh token setelah refresh berhasil
- pertukaran refresh-token adalah bagian dari alur
/v3/oauth/token - refresh memuat ulang bisnis yang terhubung ke token dan hanya mempertahankan akses bisnis yang aktif dan enabled
- jika satu bisnis dicabut atau dinonaktifkan, token baru hasil refresh hanya berisi bisnis yang masih tersisa
- jika bisnis terakhir yang terhubung dicabut atau dinonaktifkan, refresh gagal
- access token lama tidak ditulis ulang; sampai token tersebut di-refresh atau kedaluwarsa, request untuk bisnis yang dicabut atau dinonaktifkan akan gagal, tetapi bisnis lain yang terhubung masih dapat berjalan
Siklus Hidup Token
Perilaku saat ini:- TTL access token: 1 jam
- TTL refresh token: 30 hari
Revocation Token
Untuk mencabut token:token_type saat ini adalah:
accessrefresh
- HTTP
204 No Content
Opsional: Alur Merchant Manage Launch
Jika aplikasi Anda mendefinisikanmanage_url, Scalev dapat meluncurkan merchant ke aplikasi Anda dengan launch_token yang berumur singkat.
Tukarkan token tersebut dari backend Anda dengan:
/v3/oauth/installation/status.
Catatan penting:
launch_tokenbersifat sekali pakai dan berumur singkat- token ini bukan access token
- tidak ada secret manage-link bersama; backend Anda mengautentikasi pertukaran dengan
client_iddanclient_secret
Praktik Terbaik
- Redirect merchant ke halaman authorize frontend, bukan ke endpoint API backend
/v2. - Buat PKCE verifier dan challenge baru untuk setiap percobaan instalasi.
- Validasi
statepada setiap callback. - Simpan
client_secret, access token, dan refresh token hanya di server. - Gunakan hanya scope, event webhook, dan tag billing yang benar-benar dibutuhkan aplikasi Anda.
- Perlakukan
redirect_urisebagai nilai yang harus sama persis. - Gunakan
/v3/oauth/installation/statussaat Anda membutuhkan snapshot koneksi merchant yang otoritatif. - Gunakan
/v3/oauth/introspectuntuk diagnostik token runtime. - Tangani akses bisnis yang dinonaktifkan secara terpisah dari akses bisnis yang dicabut.
Rate Limiting
OAuth access token menggunakan rate limit yang di-scope ke aplikasi OAuth dan bisnis yang terhubung. Default saat ini:- 10.000 permintaan per jam per bisnis terhubung
- 100 permintaan per 10 detik per bisnis terhubung untuk burst pendek
429 Too Many Requests dengan header X-Ratelimit-Limit, X-Ratelimit-Remaining, dan X-Ratelimit-Reset. Beberapa limit khusus endpoint lebih ketat, dan respons rate-limit dapat berupa plain text, bukan bentuk error JSON normal.
Penanganan Error
Endpoint OAuth dapat mengembalikan error seperti:| Kode Error | Deskripsi |
|---|---|
invalid_request | Parameter permintaan hilang atau formatnya salah |
invalid_client | Autentikasi client gagal |
invalid_grant | Authorization code, refresh token, atau PKCE verifier tidak valid atau kedaluwarsa |
unauthorized_client | Client tidak diizinkan menggunakan grant type yang diminta |
server_error | Kegagalan sisi server yang tidak terduga |
invalid_grantketika code verifier tidak cocokinvalid_requestketika parameter PKCE wajib hilang atau formatnya salah

