Lewati ke konten utama

Autentikasi

Markdown

Panduan ini memandu Anda melakukan autentikasi di Human Dashboard dan membuat x-unico-accesskey yang akan Anda gunakan di semua permintaan Human Token API.

Alurnya terdiri dari dua fase:

  1. Autentikasi — selesaikan login dan dapatkan token akses. Tersedia dua metode autentikasi:
    • Login biometrik — pengambilan wajah melalui Unico SDK (tersedia untuk pendaftaran maupun masuk)
    • Login OTP email — kode sekali pakai yang dikirim ke alamat email terdaftar (hanya untuk masuk)
  2. Siapkan organisasi Anda — buat profil perusahaan Anda dan buat kunci akses (hanya pada pendaftaran pertama)

Dua cara menyiapkan kredensial Anda​

Semua yang ada di panduan ini juga dapat dilakukan melalui Human Dashboard di dashboard.unico.app — tanpa perlu panggilan API.

OpsiKapan digunakan
DashboardPengaturan pertama, rotasi kunci manual, pengelolaan sesekali
APIPenyediaan otomatis, pipeline CI/CD, pengelolaan kunci secara programatik

Menggunakan dashboard​

  1. Buka dashboard.unico.app
  2. Daftar atau masuk — gunakan login biometrik (pengambilan wajah) atau OTP email
  3. Buat organisasi Anda — isi nama perusahaan, negara, dan domain yang diizinkan
  4. Buat kunci akses — buka Access Keys dan klik Create key; salin segera, kunci hanya ditampilkan satu kali
  5. Kelola cabang — buat dan konfigurasikan cabang di Branches; setiap cabang menghasilkan kunci aksesnya sendiri

Kunci akses yang Anda dapatkan dari dashboard adalah x-unico-accesskey yang sama yang digunakan dalam semua permintaan API — kedua pendekatan sepenuhnya dapat dipertukarkan.

URL Dasar​

Setiap endpoint di halaman ini dilayani oleh Human Dashboard API. Permintaan Human Token API, seperti Create Process dan Get Process, dikirim ke host API yang tercantum di Environment.

LingkunganAPIURL Dasar
ProduksiHuman Dashboard API (login, organisasi, kunci akses, dan cabang)https://api.humantoken.unico.app

Metode autentikasi​

Tersedia dua metode untuk mengautentikasi dan mendapatkan authToken:

MetodeEndpointKapan digunakan
BiometrikPOST /api/console/v1/auth/biometric/sessionsPendaftaran (akun baru) atau masuk (pengguna lama)
OTP emailPOST /api/console/v1/auth/email/sessionsHanya untuk masuk — akun harus sudah ada

Intent login biometrik​

Setiap panggilan ke POST /api/console/v1/auth/biometric/sessions harus mendeklarasikan intent:

intentKapan digunakanField emailField name
LOGIN_INTENT_SIGNUPPendaftaran pertama — membuat akun baruWajibWajib
LOGIN_INTENT_SIGNINPengguna lama — akun sudah adaTidak digunakanTidak digunakan
(dihilangkan)Diperlakukan sebagai LOGIN_INTENT_SIGNINTidak digunakanTidak digunakan

Intent mengontrol validasi yang dilakukan saat Anda melakukan polling sesi (Langkah 2):

  • SIGNUP — menolak login jika identitas biometrik tersebut sudah terdaftar (mencegah akun duplikat).
  • SIGNIN — menolak login jika identitas biometrik tersebut belum terdaftar (akun harus ada untuk bisa login).

Fase 1 — Autentikasi​

Langkah 1: Mulai sesi login biometrik​

SIGNUP (pendaftaran pertama)

curl -X POST https://api.humantoken.unico.app/api/console/v1/auth/biometric/sessions \
-H "Content-Type: application/json" \
-d '{
"intent": "LOGIN_INTENT_SIGNUP",
"email": "[email protected]",
"name": "Jane Doe"
}'
Keunikan email

Jika sudah ada akun yang terdaftar dengan email tersebut, permintaan mengembalikan 400 Bad Request.

Respons:

{
"session": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"link": "",
"token": ""
}
}

Untuk SIGNUP, field link dan token kosong dalam respons — tautan pengambilan biometrik dikirim ke alamat email yang diberikan.

SIGNIN (pengguna lama)

curl -X POST https://api.humantoken.unico.app/api/console/v1/auth/biometric/sessions \
-H "Content-Type: application/json" \
-d '{
"intent": "LOGIN_INTENT_SIGNIN"
}'

Respons:

{
"session": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"link": "https://humantoken.unico.io/...",
"token": "eyJhbGciOiJSUzI1NiJ9..."
}
}

Simpan sessionId.

  • SIGNUP: tautan pengambilan biometrik dikirim ke email yang diberikan di Langkah 1. Minta pengguna memeriksa kotak masuk mereka dan menyelesaikan pengambilan.
  • SIGNIN: buka link di browser Anda dan selesaikan pengambilan biometrik.

Langkah 2: Lakukan polling hingga sesi terselesaikan​

curl https://api.humantoken.unico.app/api/console/v1/auth/biometric/sessions/b3f1a2c4-0000-0000-0000-abcdef012345

Lakukan polling setiap 2–3 detik hingga status mencapai status akhir.

statusoutcomeArti
pendingpendingPengguna belum menyelesaikan pengambilan — lanjutkan polling
processingpendingPengambilan selesai, hasil sedang dihitung — lanjutkan polling
completedmatchedLogin berhasil — authToken tersedia
completedno_matchBiometrik tidak cocok dengan catatan mana pun
completedinconclusivePengambilan berhasil tetapi tidak dapat diselesaikan
expired—Tautan kedaluwarsa — mulai ulang dari Langkah 1
canceled—Sesi dibatalkan — mulai ulang dari Langkah 1

Error tambahan khusus intent saat melakukan polling sesi:

HTTPKondisi
400SIGNUP — identitas biometrik sudah terdaftar (akun duplikat)
400SIGNIN — identitas biometrik belum terdaftar (akun tidak ada)

Respons berhasil:

{
"result": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"status": "completed",
"outcome": "matched",
"authToken": "eyJhbGciOiJSUzI1NiJ9..."
}
}

Simpan authToken — gunakan sebagai header x-console-authorization di semua permintaan Human Dashboard API berikutnya.

Fase 1 (alternatif) — Masuk dengan OTP email​

Gunakan alur ini sebagai pengganti biometrik jika pengguna sudah memiliki akun dan lebih memilih mengautentikasi melalui kode sekali pakai yang dikirim ke email terdaftarnya. Pendaftaran tidak didukung melalui OTP email — gunakan alur biometrik untuk pendaftaran pertama.

Langkah 1: Kirim OTP​

curl -X POST https://api.humantoken.unico.app/api/console/v1/auth/email/sessions \
-H "Content-Type: application/json" \
-d '{
"email": "[email protected]"
}'
catatan

Email harus milik akun yang sudah ada. Jika akun tidak ditemukan, Langkah 2 (validasi OTP) mengembalikan 404 Not Found.

Respons:

{
"session": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345"
}
}

Simpan sessionId. Kode 6 digit dikirim ke alamat email yang diberikan.

Langkah 2: Validasi OTP​

curl https://api.humantoken.unico.app/api/console/v1/auth/email/sessions/{sessionId}/{code}
HTTPKondisi
200Kode valid — authToken tersedia
400Kode salah (invalid otp code)
400OTP sudah digunakan, batas percobaan tercapai, atau kedaluwarsa
404Email tidak terdaftar

Respons berhasil:

{
"result": {
"sessionId": "b3f1a2c4-0000-0000-0000-abcdef012345",
"status": "completed",
"outcome": "matched",
"authToken": "eyJhbGciOiJSUzI1NiJ9..."
}
}

Simpan authToken — gunakan sebagai header x-console-authorization di semua permintaan Human Dashboard API berikutnya.

Fase 2 — Siapkan organisasi Anda​

Langkah 3: Buat organisasi Anda​

catatan

Panggilan ini hanya dapat dilakukan satu kali. Panggilan ini menyediakan tenant Anda dan menghasilkan branchId Anda.

Negara mana pun diterima. Gunakan kode tiga huruf ISO 3166-1 alpha-3 (misalnya BRA, USA, MEX, DEU, IND). taxId bersifat opsional untuk semua negara.

curl -X POST https://api.humantoken.unico.app/api/console/v1/organization \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"logo": "https://acme.com/logo.png",
"allowedDomains": ["https://app.acme.com"]
}'

Respons:

{
"organization": {
"id": "e5d3f1a2-0000-0000-0000-abcdef012345",
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"tenantId": "tenant-acme-prod",
"branchId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"taxId": "12345678000195"
}
}

Simpan branchId — nilai ini mengidentifikasi cabang default Anda dan digunakan saat mengelola cabang dan kunci akses.

Langkah 4: Buat kunci akses​

curl -X POST https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"label": "production-key"
}'

Respons:

{
"accessKey": "uip_ak.prod.a1b2c3d4.e5f6g7h8.i9j0k1l2"
}
peringatan

accessKey hanya dikembalikan satu kali dan tidak dapat diambil kembali. Segera simpan di pengelola rahasia Anda sebagai HUMAN_TOKEN_ACCESS_KEY.

Nilai ini adalah header x-unico-accesskey yang digunakan di semua permintaan Human Token API.

Yang sekarang Anda miliki​

NilaiTempat menggunakannya
branchIdMengidentifikasi cabang default Anda; membuat kunci akses khusus cabang
accessKeyHeader x-unico-accesskey di semua permintaan Human Token

Mengelola organisasi Anda​

Dapatkan organisasi​

curl https://api.humantoken.unico.app/api/console/v1/organization/<organizationId> \
-H "x-console-authorization: <authToken>"

Respons:

{
"organization": {
"id": "e5d3f1a2-0000-0000-0000-abcdef012345",
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"tenantId": "tenant-acme-prod",
"branchId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"taxId": "12345678000195"
}
}

Perbarui organisasi​

curl -X PUT https://api.humantoken.unico.app/api/console/v1/organization \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"id": "e5d3f1a2-0000-0000-0000-abcdef012345",
"name": "Acme Corp",
"responsibleEmail": "[email protected]",
"websiteUrl": "https://acme.com",
"countryCode": "BRA",
"taxId": "12345678000195",
"logo": "https://acme.com/logo-updated.png",
"allowedDomains": ["https://app.acme.com", "https://checkout.acme.com"]
}'

Mengelola kunci akses​

Daftar kunci (hanya metadata — rahasia tidak pernah dikembalikan):

curl https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>"

Rotasi kunci (kunci lama langsung tidak berlaku):

curl -X POST https://api.humantoken.unico.app/api/console/v1/access-keys/rotate \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{"accessKey": "uip_ak.prod.a1b2c3d4.e5f6g7h8.i9j0k1l2"}'

Cabut kunci (tidak dapat dibatalkan):

curl -X DELETE https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{"accessKey": "uip_ak.prod.a1b2c3d4.e5f6g7h8.i9j0k1l2"}'

Mengelola cabang​

Cabang memungkinkan Anda membagi konfigurasi organisasi (nama, logo, domain yang diizinkan) per produk atau lingkungan. Setiap cabang memiliki kunci aksesnya sendiri, sehingga konteks cabang ditentukan secara otomatis dari kunci yang digunakan dalam permintaan — tidak perlu mengirim branchId di CreateProcess.

Buat cabang​

curl -X POST https://api.humantoken.unico.app/api/console/v1/organization/branches \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"name": "Mobile App",
"logo": "https://acme.com/mobile-logo.png",
"allowedDomains": ["https://mobile.acme.com"]
}'

Respons:

{
"branchId": "7ab1c2d3-0000-0000-0000-abcdef012345"
}

Simpan branchId — gunakan saat membuat kunci akses khusus cabang.

Perbarui cabang​

curl -X PUT https://api.humantoken.unico.app/api/console/v1/organization/branches \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"branchId": "7ab1c2d3-0000-0000-0000-abcdef012345",
"name": "Mobile App v2",
"logo": "https://acme.com/mobile-logo-v2.png",
"allowedDomains": ["https://mobile.acme.com", "https://app.acme.com"]
}'

Buat kunci akses khusus cabang​

Untuk membuat kunci akses yang dibatasi pada cabang tertentu, sertakan branchId dalam body permintaan:

curl -X POST https://api.humantoken.unico.app/api/console/v1/access-keys \
-H "x-console-authorization: <authToken>" \
-H "Content-Type: application/json" \
-d '{
"label": "mobile-app-key",
"branchId": "7ab1c2d3-0000-0000-0000-abcdef012345"
}'

Respons:

{
"accessKey": "uip_ak.prod.z9y8x7w6.v5u4t3s2.r1q0p9o8"
}
peringatan

accessKey hanya dikembalikan satu kali. Segera simpan. Setiap permintaan CreateProcess yang diautentikasi dengan kunci ini akan otomatis menggunakan konfigurasi cabang yang terkait dengannya.