Akses data analytics RevKlik secara programatik melalui REST API. Autentikasi dengan scoped tokens, rate-limited per plan, dan response JSON terstandarisasi.
Semua request ke Public API harus menyertakan Authorization: Bearer header dengan API token yang valid. Token diawali prefix rvt_ (account) atau rv_ (site-scoped).
https://app.revklik.com/api/v1curl https://app.revklik.com/api/v1/whoami \
-H "Authorization: Bearer rvt_your_token_here"rvt_ dan rv_ yang diterima oleh Public API. Token sesi kp_ hanya berlaku di dashboard internal.
RevKlik menyediakan dua jenis API token dengan level akses berbeda:
| Prefix | Tipe | Akses |
|---|---|---|
rvt_ | Account Token | Akses ke semua sites dan fitur sesuai scopes yang diberikan. |
rv_ | Site Token | Terbatas ke satu site saja. Default scope: analytics:read, analytics:export. |
Token disimpan sebagai SHA-256 hash di database. Full token hanya ditampilkan sekali saat pembuatan.
Setiap token memiliki daftar scope yang menentukan endpoint apa saja yang bisa diakses.
| Scope | Akses | Default |
|---|---|---|
sites:read | List dan lihat detail sites | Account |
analytics:read | Query data analytics | Account & Site |
analytics:export | Export data CSV/JSON | Account & Site |
tokens:read | List API tokens | Account |
tokens:write | Create & revoke tokens | Account |
Setiap API key memiliki rate limit per menit berdasarkan plan subscription Anda.
| Plan | Limit | Max Tokens |
|---|---|---|
| Free / Micro | 30 req/min | 2 |
| Starter | 120 req/min | 5 |
| Growth | 300 req/min | Unlimited |
Setiap response menyertakan headers standar:
X-RateLimit-Limit: 120
X-RateLimit-Remaining: 87
X-RateLimit-Reset: 1715800000Saat limit terlampaui, API mengembalikan 429 Too Many Requests.
Mendapatkan informasi tentang token yang sedang digunakan, user, dan plan.
sites:read
{
"user": {
"id": "abc123",
"name": "John Doe",
"email": "john@example.com"
},
"plan": "starter",
"token": {
"type": "account",
"scopes": ["sites:read", "analytics:read", "..."],
"site_id": null,
"name": "My CLI Token",
"created_at": "2026-05-15T00:00:00Z"
}
}Menampilkan daftar semua sites. Account token melihat semua sites; site token hanya melihat site yang terikat.
sites:read
[
{
"id": "site_abc123",
"name": "My Website",
"domain": "mysite.com",
"created_at": "2026-01-15T00:00:00Z"
}
]Detail satu site berdasarkan ID.
Semua endpoint analytics membutuhkan parameter site_id dan range.
| Parameter | Tipe | Deskripsi |
|---|---|---|
| site_id | string | ID site yang ingin di-query. Wajib. |
| range | string | Periode: 1h, 6h, 12h, 24h, 7d, 30d, 90d |
| limit | number | Jumlah hasil (default 10, max 100). Opsional. |
analytics:read
GET /analytics/overview?site_id=xxx&range=7d
{
"pageviews": 12483,
"visitors": 3241,
"sessions": 4812,
"bounceRate": 0.342,
"avgDuration": 252,
"revenue": 2490000,
"conversions": 87
}GET /analytics/timeseries?site_id=xxx&range=7d
[
{ "date": "2026-05-09", "pageviews": 1520, "visitors": 412 },
{ "date": "2026-05-10", "pageviews": 1689, "visitors": 467 }
]GET /analytics/pages?site_id=xxx&range=7d&limit=10
[
{ "path": "/", "pageviews": 4521, "visitors": 1892 },
{ "path": "/pricing", "pageviews": 2104, "visitors": 987 }
]GET /analytics/referrers?site_id=xxx&range=7d
GET /analytics/geo?site_id=xxx&range=7d
GET /analytics/devices?site_id=xxx&range=7d
{
"devices": [{ "device": "Mobile", "visitors": 1823, "percentage": 56.2 }],
"os": [{ "device": "iOS", "visitors": 987, "percentage": 30.4 }],
"browsers": [{ "device": "Chrome", "visitors": 2456, "percentage": 75.7 }]
}GET /analytics/revenue?site_id=xxx&range=30d
GET /analytics/export?site_id=xxx&range=30d&format=csv&type=events
analytics:export
Parameter format: csv atau json. Parameter type: events, visitors, atau sessions.
Menampilkan daftar semua API tokens (masked).
tokens:read
Membuat API token baru.
tokens:write
{
"name": "My CLI Token",
"type": "account",
"scopes": ["sites:read", "analytics:read"],
"site_id": null
}{
"id": "tok_abc123",
"token": "rvt_a1b2c3d4e5f6...",
"prefix": "rvt_a1b",
"name": "My CLI Token",
"type": "account",
"scopes": ["sites:read", "analytics:read"],
"created_at": "2026-05-15T00:00:00Z"
}Mencabut (revoke) API token. Token yang sudah di-revoke langsung tidak bisa digunakan.
tokens:write
| Code | Meaning |
|---|---|
200 | Success |
400 | Parameter tidak valid atau missing |
401 | Token tidak valid, expired, atau revoked |
403 | Scope tidak cukup untuk endpoint ini |
404 | Resource tidak ditemukan |
429 | Rate limit terlampaui. Coba lagi setelah X-RateLimit-Reset. |
500 | Server error internal |
{
"success": false,
"error": "Insufficient scope: analytics:export required"
}const token = "rvt_your_token_here";
const base = "https://app.revklik.com/api/v1";
// Get analytics overview
const res = await fetch(
`${base}/analytics/overview?site_id=SITE_ID&range=7d`,
{ headers: { Authorization: `Bearer ${token}` } }
);
const data = await res.json();
console.log(data.data);import requests
TOKEN = "rvt_your_token_here"
BASE = "https://app.revklik.com/api/v1"
HEADERS = {"Authorization": f"Bearer {TOKEN}"}
# List sites
sites = requests.get(f"{BASE}/sites", headers=HEADERS).json()
# Get analytics overview
params = {"site_id": "SITE_ID", "range": "7d"}
overview = requests.get(
f"{BASE}/analytics/overview",
params=params, headers=HEADERS
).json()
print(overview["data"])# Get timeseries data
curl "https://app.revklik.com/api/v1/analytics/timeseries?site_id=SITE_ID&range=30d" \
-H "Authorization: Bearer rvt_your_token_here"