Data Anda, di tempat Anda mengambil keputusan
Setiap identifikasi bisa mencapai sistem Anda lewat dua jalan: dikirim ke server Anda begitu ia terjadi, atau Anda tarik sendiri pada detik Anda memutuskan. Kedua kanal membawa angka yang sama — dan itu dikunci oleh sebuah tes, bukan oleh janji.
Push atau pull
Webhook mendorong event kepada Anda saat kejadiannya berlangsung. Data API membuat Anda bisa bertanya tepat ketika Anda butuh jawaban. Kebanyakan tim menjalankan keduanya: webhook untuk mencatat dan bereaksi, Data API untuk memeriksa secara inline.
Webhook — push, secara real time
Kami mem-POST event JSON bertanda tangan ke endpoint Anda begitu sesuatu terjadi: seorang pengunjung teridentifikasi, sebuah pengambilalihan akun ditandai, sebuah serangan bot dimulai. Tidak ada yang perlu di-polling, tidak ada yang perlu dijadwalkan.
Paling cocok untuk: mencatat setiap kunjungan, bereaksi terhadap serangan, memasok gudang data atau SIEM Anda.
Latensi pengiriman p50 44–140 ms, dari event sampai ke endpoint Anda.
Data API — pull, sesuai permintaan
Sebuah API privat server-ke-server. Backend Anda melakukan autentikasi dengan secret key dan membaca persis apa yang kami ketahui tentang seorang pengunjung pada detik ia memutuskan — biasanya di dalam handler login atau checkout.
Paling cocok untuk: pemeriksaan inline sebelum Anda menagih kartu, menyetujui pendaftaran, atau membuka kunci akun.
Tersedia mulai paket Pro.
Empat jenis event, satu amplop
Setiap pengiriman datang dalam amplop yang sama, dengan jenis event ada di body sekaligus di header X-Tracio-Event-Type — sehingga satu handler bisa merutekan keempatnya.
Pengunjung teridentifikasi
Event inti: sebuah kunjungan telah dinilai. Membawa ID pengunjung, browser dan OS, geo dan jaringan, verdict bot serta keputusan risiko. Dikirim bertahap — event utama saat halaman dimuat, lalu fase lanjutan atau koreksi ketika bukti yang lebih lambat mengubah verdict. Korelasikan antar-fase lewat requestId.
identificationPengambilalihan akun
Detektor pengambilalihan akun menyala pada sebuah kunjungan: perangkat di balik akun yang sudah dikenal tidak lagi tampak seperti perangkat pemiliknya. Ia datang sebagai event tersendiri, lengkap dengan konteks akun, alih-alih bersembunyi di dalam body identifikasi.
account_takeoverSerangan bot
Lonjakan trafik otomatis di workspace Anda. Yang satu ini tidak punya kunjungan di baliknya — ini peringatan tingkat workspace, jadi blok kunjungan cukup absen dari body alih-alih datang sebagai cangkang kosong dengan skor nol.
attack_detectedPerubahan reputasi
Sebuah profil berpindah antar-pita reputasi. Amplopnya sama dengan peringatan serangan — event tingkat profil tanpa kunjungan, membawa pita yang baru dan yang sebelumnya.
reputation_changedSebuah pengiriman, dipangkas
Ini body dasarnya. Pro menambahkan visit velocity; Business menambahkan kode alasan verdict, sinyal perilaku, Guidance, dan data perangkat lintas-browser ke bentuk yang persis sama — blok baru bermunculan, jalur yang sudah ada tidak pernah berpindah.
{ "version": 2, "event": "identification", "eventId": "req_8f21c4:primary", "requestId": "req_8f21c4", "phase": "primary", "visitorId": "3f9a1b2c4d5e6f70", "timestamp": "2026-07-30T12:00:00Z", "geo": { "country": "DE", "city": "Berlin", "timezone": "Europe/Berlin" }, "network": { "vpn": true, "proxy": false, "tor": false, "datacenter": false }, "bot": { "result": "human", "score": 12 }, "identification": { "confidence": 0.97, "incognito": false }, "decision": { "action": "suspicious", "riskScore": 65.9 }}Setiap permintaan membawa dua tanda tangan
X-Tracio-Signature adalah HMAC-SHA256 atas gabungan timestamp tanda tangan dan body permintaan mentah, dengan kunci berupa webhook secret Anda — ia membuktikan bahwa pengirim tahu secret yang Anda berdua pegang. X-Tracio-Signature-Ed25519 adalah tanda tangan platform: Anda memverifikasinya dengan kunci publik yang diambil dari endpoint well-known, jadi tidak ada rahasia apa pun yang perlu disimpan di sisi Anda. Timestamp adalah bagian dari isi yang ditandatangani, dan itulah yang membuat rekaman lama tidak berguna untuk diputar ulang.
Verifikasi terhadap byte permintaan mentah — JSON yang diserialisasi ulang mengubah byte-nya dan tanda tangannya tidak akan cocok. Percobaan ulang membawa X-Tracio-Event-Id yang sama, jadi lakukan deduplikasi berdasarkan itu.
Header pada setiap pengiriman
X-Tracio-Signature: t=1753444800,v1=5257a869e7ecebed...X-Tracio-Signature-Ed25519: t=1753444800,kid=k1,v1=0Zx0M0n8...X-Tracio-Event-Type: identificationX-Tracio-Event-Id: req_8f21c4:primaryX-Tracio-Delivery-Attempt: 1X-Tracio-Payload-Version: 2Dibangun agar tidak kehilangan event
Pengiriman berjalan di atas armada khusus, dan sumber kebenarannya adalah antrean — bukan memori sebuah proses. Itulah yang membuat at-least-once menjadi nyata: kalau satu node pengiriman mati di tengah jalan, event-nya masih ada di antrean dan node lain mengambilnya.
Percobaan ulang yang pas dengan gangguan nyata
5 detik, 30 detik, 2 menit, 10 menit, 30 menit, 2 jam, 6 jam. Percobaan pertama mendarat dalam satu menit, jadi restart singkat layanan Anda tidak merugikan apa pun. Setiap jeda dipilih acak antara separuh nilai yang tercantum dan nilai penuhnya, sehingga percobaan ulang tidak kembali sebagai satu gelombang setelah gangguan.
Penonaktifan otomatis yang tidak salah tembak
Sebuah webhook baru dimatikan ketika kegagalan mencapai ambang sekaligus sudah berlangsung setidaknya 15 menit berturut-turut — ledakan pengiriman yang mengantre saat restart tidak akan mematikan integrasinya. 410 Gone menonaktifkan seketika. Dashboard menampilkan alasannya, kode responsnya, dan tombol untuk mengaktifkan kembali.
Rotasi secret tanpa jeda
Setelah rotasi, kedua secret tetap berlaku selama 24 jam dan header membawa kedua tanda tangan, jadi cocok pada salah satunya sudah cukup. Anda memperbarui konfigurasi di dalam jendela itu alih-alih berkejaran dengan pergantian; “Revoke now” memangkas jendelanya ketika Anda memang ingin ia segera hilang.
Log pengiriman yang bisa Anda baca
Setiap percobaan — kode respons, durasi, teks error — terlihat per webhook di dashboard, bersebelahan dengan aksi uji yang mengirim contoh payload bertanda tangan ke endpoint Anda, sehingga Anda bisa memastikan verifier Anda sebelum tayang.
Bertanya pada saat Anda memutuskan
Sebuah API privat server-ke-server di api.tracio.ai. Backend Anda melakukan autentikasi dengan secret key dan membaca datanya sendiri. Ia sengaja tidak mengirim header CORS: sebuah secret key memberi akses ke semua isi workspace Anda dan tidak boleh sampai ke browser. Tersedia mulai paket Pro.
| Metode | Path | Mengembalikan |
|---|---|---|
| GET | /v1/visitors/{visitorId} | Ringkasan pengunjung: pertama dan terakhir terlihat, jumlah kunjungan, IP dan negara unik, browser dan perangkat, riwayat risiko — plus sesi terbarunya. |
| GET | /v1/visitors/{visitorId}/sessions | Daftar sesi dengan paginasi kursor dan filter berdasarkan rentang tanggal, hasil bot, dan skor risiko minimum. |
| GET | /v1/visitors/{visitorId}/sessions/latest | Sesi terbaru sebagai satu objek tunggal, tanpa amplop daftar. |
| GET | /v1/sessions/{requestId} | Satu sesi tertentu. Sertakan visitorId bersamanya dan pencarian berjalan lewat indeks pengunjung alih-alih seluruh riwayat Anda. |
| GET | /v1/visitors/{visitorId}/velocity | Aktivitas dalam satu jendela — 1h, 24h, atau 7d: berapa banyak kunjungan, dari berapa banyak IP, dari berapa banyak negara, di bawah berapa banyak akun. |
Memeriksa pengunjung saat checkout
Panggilan yang lazim: di dalam handler pembayaran Anda, sebelum Anda mengotorisasi kartu. Satu permintaan, satu jawaban, dan blok meta melaporkan jendela yang benar-benar Anda dapatkan — kalau Anda meminta enam bulan sementara paket Anda menyimpan 30 hari, ia mengembalikan 30 hari dan menyatakannya.
Permintaan
# Inside your checkout handler, before you authorize the cardcurl -s -H "Authorization: Bearer $TRACIO_SECRET_KEY" \ "https://api.tracio.ai/v1/visitors/3f9a1b2c/velocity?window=24h"Respons
{ "window": "24h", "events": 128, "uniqueIps": 4, "uniqueCountries": 2, "uniqueAccounts": 1, "meta": { "plan": "business", "retentionDays": 30 }}Angka yang sama di mana-mana
Kunjungan yang berskor 65,9 di dashboard Anda juga berskor 65,9 di Data API dan 65,9 di body webhook. Dua rendering independen bisa saja menyimpang — skala adalah cara klasiknya, satu kanal memberi Anda 0,93 sementara yang lain mengatakan 93 — maka sebuah tes paritas membangun satu kunjungan, merender-nya lewat kedua kanal, lalu membandingkan kolom publiknya pada JSON mentah. Kesesuaian itu ditegakkan, bukan sekadar dinyatakan.
Saran, bukan sekadar angka
Skor memberi tahu apa yang kami lihat. Guidance memberi tahu apa yang perlu Anda lakukan, untuk empat keputusan yang sungguh-sungguh menyangkut uang — dihitung oleh aturan berversi, lengkap dengan alasannya.
Terima pembayarannya?
Menimbang risiko, reputasi penipuan, dan verdict bot sebelum Anda mengotorisasi kartu.
Terima pendaftarannya?
Menangkap akun sekali pakai sebelum ia ada — multi-akun dan reputasi paling berat bobotnya di sini.
Izinkan masuk?
Mengetat otomatis ketika detektor pengambilalihan akun menyala pada kunjungan tersebut.
Hitung konversinya?
Memisahkan referral asli dari referral ke diri sendiri atau bot berinsentif.
Kosakata empat kata
Setiap skenario mendapat satu dari empat jawaban, dan bersamanya dasar yang melandasinya — sumbu penentu dari kosakata tetap: bot, risiko, reputasi penipuan, perilaku, multi-akun, pengambilalihan akun, jaringan, pola afiliasi. Anda selalu tahu sumbu mana yang menggeser sarannya, tanpa pernah melihat nama sinyal, bobot, atau ambang.
Satu perhitungan, tiga kanal
Blok Guidance yang sama menumpang webhook, menjawab di Data API, dan tampil di kartu pengunjung dalam dashboard — satu kumpulan aturan, satu hasil, tanpa rekonsiliasi di sisi Anda. Bacalah saran untuk skenario Anda, bukan yang keseluruhan: yang keseluruhan hanyalah yang paling ketat dari keempatnya, ringkasan untuk dashboard dan bukan keputusan pembayaran. Versi aturan ikut dikirim di payload, jadi perubahan aturan adalah sesuatu yang Anda lihat, bukan sesuatu yang Anda simpulkan dari saran yang tiba-tiba bergeser.
"guidance": { "version": 1, "overall": "review", "payment": "review", "registration": "challenge", "login": "allow", "affiliate": "allow", "basis": ["risk", "fraud_reputation"]}Lima SDK di sisi depan, dua kanal di sisi belakang
Sisi browser hadir sebagai lima SDK — JavaScript murni, React, Vue 3, Angular, dan Svelte 5. Tidak ada SDK sisi server, dan itu disengaja: backend Anda terhubung lewat HTTP biasa melalui webhook bertanda tangan dan Data API. Verifikasi tanda tangan hanya selusin baris terhadap vektor referensi yang kami terbitkan, dan tidak ada tambahan apa pun yang harus terus Anda upgrade di pohon dependensi server Anda.
Pertanyaan yang sering diajukan
Rangkai dalam satu sore
Buat webhook di dashboard, arahkan ke endpoint Anda, lalu tekan Test. Verifikasi tanda tangannya terhadap vektor referensi kami, dan bagian sulitnya sudah lewat.