REST API

Baca data analitik RevKlik dari kode Anda sendiri: token API bercakupan, endpoint JSON untuk situs, trafik, pendapatan, ekspor, dan batas laju per paket.

REST API menyajikan data yang sama dengan dashboard, server MCP, dan CLI. Semuanya berjalan di satu lapisan kueri yang sama, jadi angkanya identik di mana pun.

https://app.revklik.com/api/v1

Autentikasi

Kirim token API sebagai Bearer token di setiap permintaan:

curl https://app.revklik.com/api/v1/whoami \
  -H "Authorization: Bearer rvt_TOKEN_ANDA"

Buat token di Share → API tokens (lihat berbagi dan akses). Token lengkap hanya tampil sekali; RevKlik hanya menyimpan hash SHA-256, jadi simpan di tempat yang aman.

AwalanJenisAkses
rvt_AkunSemua situs yang Anda miliki atau diundang, sesuai cakupan yang diberikan
rv_SitusSatu situs. Hanya cakupan analytics:read dan analytics:export

Hanya token rvt_ dan rv_

Token sesi dashboard ditolak API publik dengan 401. Buat token API sebagai gantinya.

Cakupan (scope)

CakupanMengizinkan
sites:readMelihat daftar situs dan satu situs
analytics:readSemua endpoint analitik kecuali ekspor
analytics:exportGET /analytics/export
events:writePOST /events/server (lihat API event server)
tokens:readMelihat daftar token API
tokens:writeMembuat dan mencabut token API

Token akun secara bawaan mendapat sites:read, analytics:read, analytics:export, tokens:read, dan tokens:write. Token situs mendapat analytics:read dan analytics:export. Token situs yang dipakai untuk situs lain mendapat 403.

Batas laju

Batas dihitung per menit dan bergantung pada paket Anda:

PaketPermintaan per menitToken API
Micro302
Starter1205
Growth300Tanpa batas

Setiap respons membawa X-RateLimit-Limit, X-RateLimit-Remaining, dan X-RateLimit-Reset (stempel waktu Unix dalam detik). Saat batas terlampaui, API menjawab 429 dengan header Retry-After dalam detik.

Data yang lebih lama dari retensi event mentah paket Anda (30, 60, atau 180 hari untuk Micro, Starter, dan Growth) tidak lagi tersedia untuk kueri.

Format respons

Respons sukses membungkus isinya dalam data:

{ "data": {}, "success": true }

Galat memakai amplop yang sama:

{ "error": "Insufficient scope: analytics:export required", "success": false }
StatusArti
400Parameter tidak valid atau hilang
401Token hilang, salah format, tidak dikenal, kedaluwarsa, atau awalannya tidak cocok
403Cakupan kurang, token terikat ke situs lain, atau batas jumlah token tercapai
404Situs atau token tidak ditemukan
429Batas laju terlampaui

Pesan galat dikirim dalam bahasa Inggris.

Akun

GET /whoami

Menjelaskan token yang sedang dipakai. Tidak butuh cakupan.

{
	"data": {
		"user": { "id": "abc123", "name": "Dewi", "email": "dewi@example.com" },
		"plan": "starter",
		"token": {
			"type": "account",
			"scopes": ["sites:read", "analytics:read"],
			"site_id": null,
			"name": "Laporan",
			"created_at": "2026-05-15T00:00:00Z"
		}
	},
	"success": true
}

GET /sites dan GET /sites/:siteId

Butuh sites:read. Token akun menampilkan semua situs yang Anda miliki atau diundang; token situs hanya menampilkan situsnya sendiri.

{
	"data": [
		{
			"id": "9f1c...",
			"name": "Situs Saya",
			"domain": "situssaya.com",
			"created_at": "2026-01-15T00:00:00Z"
		}
	],
	"success": true
}

Analitik

Semua endpoint analitik butuh analytics:read dan parameter kueri berikut:

ParameterKeterangan
site_idID situs. Wajib.
range24h, 7d, 30d, atau 90d; bawaan 7d. Bisa juga pasangan tanggal ISO awal,akhir. Nilai lain kembali ke 7d.
limitHanya endpoint daftar. Maksimal 100.

Pendapatan dalam satuan utama mata uang pendapatan situs; respons menyertakan currency.

EndpointMengembalikanlimit bawaan
GET /analytics/overviewPageview, pengunjung, sesi, bounce rate, durasi rata-rata, pendapatan, konversin/a
GET /analytics/timeseriesPageview dan pengunjung per hari (per jam untuk rentang pendek)n/a
GET /analytics/pagesHalaman teratas10
GET /analytics/referrersSumber trafik dengan porsi pengunjung10
GET /analytics/geoNegara, wilayah, dan kota50
GET /analytics/devicesRincian perangkat, OS, dan browsern/a
GET /analytics/revenuePendapatan per sumber, per negara, dan dari waktu ke waktun/a
GET /analytics/campaignsPerforma kampanye UTMn/a
GET /analytics/journeysPerjalanan pengunjung terbaru; filter path opsional50
curl "https://app.revklik.com/api/v1/analytics/overview?site_id=SITE_ID&range=7d" \
  -H "Authorization: Bearer rvt_TOKEN_ANDA"
{
	"data": {
		"pageviews": 12483,
		"visitors": 3241,
		"sessions": 4812,
		"bounceRate": 34,
		"avgDuration": 252,
		"revenue": 2490000,
		"currency": "IDR",
		"conversions": 87
	},
	"success": true
}

bounceRate berupa persentase bulat dan avgDuration dalam detik.

/analytics/pages mengembalikan path, pageviews, dan visitors per baris. /analytics/devices mengembalikan larik devices, os, dan browsers berisi { device, visitors, percentage }.

Ekspor

GET /analytics/export butuh analytics:export.

ParameterKeterangan
site_idWajib.
rangeNilai sama seperti di atas; bawaan 30d.
formatcsv (bawaan) atau json.
typeevents (bawaan), visitors, atau sessions.
event_typeFilter opsional untuk events, misalnya pageview atau conversion.
limitJumlah baris, 1 sampai 10000; bawaan 10000.
curl "https://app.revklik.com/api/v1/analytics/export?site_id=SITE_ID&range=30d&format=csv&type=events" \
  -H "Authorization: Bearer rvt_TOKEN_ANDA" -o events.csv

Pendapatan portofolio

GET /portfolio/revenue?from=YYYY-MM-DD&to=YYYY-MM-DD&currency=IDR (cakupan analytics:read) menjumlahkan pendapatan semua situs yang dapat Anda akses, dikonversi ke satu mata uang. Datanya sama dengan tool MCP portfolio_revenue.

Event server

POST /events/server (cakupan events:write) memungkinkan backend Anda melaporkan pembelian, perpanjangan, dan refund. Isi permintaan dan aturan idempotensinya ada di API event server.

Kelola token

Endpoint ini butuh token akun dengan cakupan yang sesuai.

EndpointCakupanFungsi
GET /tokenstokens:readDaftar token Anda (hanya awalan)
POST /tokenstokens:writeMembuat token
DELETE /tokens/:idtokens:writeMencabut token; langsung berhenti berfungsi
curl -X POST https://app.revklik.com/api/v1/tokens \
  -H "Authorization: Bearer rvt_TOKEN_ANDA" \
  -H "Content-Type: application/json" \
  -d '{"name": "Laporan", "type": "account", "scopes": ["sites:read", "analytics:read"]}'

type bernilai account atau site. Token situs juga butuh site_id dan hanya menerima cakupan analitik. Respons memuat token lengkap sekali saja, beserta id, prefix, scopes, dan created_at.

Contoh

const res = await fetch(
	"https://app.revklik.com/api/v1/analytics/overview?site_id=SITE_ID&range=7d",
	{ headers: { Authorization: `Bearer ${process.env.REVKLIK_TOKEN}` } },
);
const { data } = await res.json();
console.log(data.visitors, data.revenue);
import os, requests

res = requests.get(
    "https://app.revklik.com/api/v1/analytics/overview",
    params={"site_id": "SITE_ID", "range": "7d"},
    headers={"Authorization": f"Bearer {os.environ['REVKLIK_TOKEN']}"},
)
print(res.json()["data"])

Terkait

  • Server MCP: data yang sama untuk Codex, Cursor, dan Claude
  • CLI: endpoint yang sama dari terminal Anda