$ curl https://api.adkar.in/v1/
API Reference
REST API for publisher integrations. All endpoints require an API key.
Authentication
Pass your API key as a Bearer token in the Authorization header:
curl https://api.adkar.in/v1/publisher/stats \ -H "Authorization: Bearer ak_live_7x9k2mq_f8d2a1c3e5b7d9f1a3c5e7" \ -G -d "publisher_id=pub_7x9k2mq"
Base URL: https://api.adkar.in · All amounts are in INR (₹) · Dates are ISO 8601 (YYYY-MM-DD)
# SDK Quickstart
The easiest way to integrate is via the SDK — it handles impression tracking, dedup, and click attribution automatically.
# Install npm install @adkar/sdk // Initialize in your extension/tool import { AdKar } from '@adkar/sdk' const adkar = new AdKar({ publisherId: 'pub_7x9k2mq', surfaces: ['sidebar', 'inline'], }); // In your activate() / init() await adkar.init();
# Endpoints
GET
/v1/publisher/statsFetch aggregated impressions, clicks, and revenue for a publisher.
Parameters
publisher_idstringrequiredYour publisher ID (e.g. pub_7x9k2mq)fromdateoptionalStart date in YYYY-MM-DD format (default: 30 days ago)todateoptionalEnd date in YYYY-MM-DD format (default: today)surfacestringoptionalFilter by surface ID (e.g. vscode-sidebar)Response (200 OK)
{
"publisher_id": "pub_7x9k2mq",
"period": { "from": "2025-06-01", "to": "2025-06-17" },
"impressions": 218600,
"clicks": 3279,
"revenue_inr": 12025,
"surfaces": [
{ "id": "vscode-sidebar", "impressions": 98200, "revenue": 5410 },
{ "id": "claude-code", "impressions": 76400, "revenue": 4280 },
{ "id": "cursor-inline", "impressions": 44000, "revenue": 2335 }
]
}POST
/v1/impressionRecord a single ad impression. Called by the SDK automatically — you rarely need this directly.
Parameters
publisher_idstringrequiredYour publisher IDsurfacestringrequiredSurface identifier (e.g. vscode-sidebar)ad_idstringrequiredID of the ad shown (provided by SDK)session_idstringoptionalOpaque session identifier for dedupResponse (200 OK)
{
"ok": true,
"impression_id": "imp_9f3a2b7c",
"revenue_credited_inr": 0.018
}POST
/v1/clickRecord an ad click. Called by the SDK automatically.
Parameters
impression_idstringrequiredImpression ID from the /v1/impression responseResponse (200 OK)
{
"ok": true,
"click_id": "clk_4d8e1f9a",
"revenue_credited_inr": 0.08
}GET
/v1/publisher/surfacesList all surfaces registered to a publisher and their current status.
Parameters
publisher_idstringrequiredYour publisher IDResponse (200 OK)
{
"surfaces": [
{
"id": "vscode-sidebar",
"name": "VS Code Sidebar",
"status": "active",
"cpm_range": [15, 35]
},
{
"id": "claude-code",
"name": "Claude Code CLI",
"status": "active",
"cpm_range": [20, 50]
}
]
}GET
/v1/publisher/payoutsList payout history for a publisher.
Parameters
publisher_idstringrequiredYour publisher IDlimitintegeroptionalMax results (default 20, max 100)Response (200 OK)
{
"payouts": [
{
"id": "pay_001",
"date": "2025-06-01",
"amount_inr": 4820,
"upi_id": "rahul@ybl",
"status": "paid",
"txn_id": "UPI2025060112345"
}
],
"pending_inr": 6800
}Rate Limits
• Impression/click endpoints: 10,000 req/min per publisher ID
• Stats/reporting endpoints: 60 req/min per API key
• Rate limit headers are included in all responses:
X-RateLimit-Remaining