API Reference

Public API Documentation

Akses data analytics RevKlik secara programatik melalui REST API. Autentikasi dengan scoped tokens, rate-limited per plan, dan response JSON terstandarisasi.

Autentikasi & Base URL

Semua request ke Public API harus menyertakan Authorization: Bearer header dengan API token yang valid. Token diawali prefix rvt_ (account) atau rv_ (site-scoped).

Base URL

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

Contoh Request

curl https://app.revklik.com/api/v1/whoami \ -H "Authorization: Bearer rvt_your_token_here"
Token Prefix: Hanya token rvt_ dan rv_ yang diterima oleh Public API. Token sesi kp_ hanya berlaku di dashboard internal.

Token Types

RevKlik menyediakan dua jenis API token dengan level akses berbeda:

PrefixTipeAkses
rvt_Account TokenAkses ke semua sites dan fitur sesuai scopes yang diberikan.
rv_Site TokenTerbatas 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.

Scopes & Permissions

Setiap token memiliki daftar scope yang menentukan endpoint apa saja yang bisa diakses.

ScopeAksesDefault
sites:readList dan lihat detail sitesAccount
analytics:readQuery data analyticsAccount & Site
analytics:exportExport data CSV/JSONAccount & Site
tokens:readList API tokensAccount
tokens:writeCreate & revoke tokensAccount

Rate Limits

Setiap API key memiliki rate limit per menit berdasarkan plan subscription Anda.

PlanLimitMax Tokens
Free / Micro30 req/min2
Starter120 req/min5
Growth300 req/minUnlimited

Rate Limit Headers

Setiap response menyertakan headers standar:

X-RateLimit-Limit: 120 X-RateLimit-Remaining: 87 X-RateLimit-Reset: 1715800000

Saat limit terlampaui, API mengembalikan 429 Too Many Requests.

Whoami

GET /whoami

Mendapatkan informasi tentang token yang sedang digunakan, user, dan plan.

sites:read

Response
{ "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" } }

Sites

GET /sites

Menampilkan daftar semua sites. Account token melihat semua sites; site token hanya melihat site yang terikat.

sites:read

Response
[ { "id": "site_abc123", "name": "My Website", "domain": "mysite.com", "created_at": "2026-01-15T00:00:00Z" } ]

GET /sites/:siteId

Detail satu site berdasarkan ID.

Analytics Endpoints

Semua endpoint analytics membutuhkan parameter site_id dan range.

Parameter

ParameterTipeDeskripsi
site_idstringID site yang ingin di-query. Wajib.
rangestringPeriode: 1h, 6h, 12h, 24h, 7d, 30d, 90d
limitnumberJumlah hasil (default 10, max 100). Opsional.

analytics:read

Overview

GET /analytics/overview?site_id=xxx&range=7d

Response
{ "pageviews": 12483, "visitors": 3241, "sessions": 4812, "bounceRate": 0.342, "avgDuration": 252, "revenue": 2490000, "conversions": 87 }

Timeseries

GET /analytics/timeseries?site_id=xxx&range=7d

Response
[ { "date": "2026-05-09", "pageviews": 1520, "visitors": 412 }, { "date": "2026-05-10", "pageviews": 1689, "visitors": 467 } ]

Pages

GET /analytics/pages?site_id=xxx&range=7d&limit=10

Response
[ { "path": "/", "pageviews": 4521, "visitors": 1892 }, { "path": "/pricing", "pageviews": 2104, "visitors": 987 } ]

Referrers

GET /analytics/referrers?site_id=xxx&range=7d

Geo

GET /analytics/geo?site_id=xxx&range=7d

Devices

GET /analytics/devices?site_id=xxx&range=7d

Response
{ "devices": [{ "device": "Mobile", "visitors": 1823, "percentage": 56.2 }], "os": [{ "device": "iOS", "visitors": 987, "percentage": 30.4 }], "browsers": [{ "device": "Chrome", "visitors": 2456, "percentage": 75.7 }] }

Revenue

GET /analytics/revenue?site_id=xxx&range=30d

Export

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.

Token Management

GET /tokens

Menampilkan daftar semua API tokens (masked).

tokens:read

POST /tokens

Membuat API token baru.

tokens:write

Request Body
{ "name": "My CLI Token", "type": "account", "scopes": ["sites:read", "analytics:read"], "site_id": null }
Important: Full token hanya ditampilkan pada response saat pembuatan. Token ini tidak bisa dilihat lagi setelahnya. Simpan dengan aman.
Response
{ "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" }

DELETE /tokens/:id

Mencabut (revoke) API token. Token yang sudah di-revoke langsung tidak bisa digunakan.

tokens:write

Error Codes

CodeMeaning
200Success
400Parameter tidak valid atau missing
401Token tidak valid, expired, atau revoked
403Scope tidak cukup untuk endpoint ini
404Resource tidak ditemukan
429Rate limit terlampaui. Coba lagi setelah X-RateLimit-Reset.
500Server error internal
Error Response Format
{ "success": false, "error": "Insufficient scope: analytics:export required" }

SDK Examples

JavaScript / Node.js

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);

Python

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"])

cURL

# 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"