$ 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/stats

Fetch 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/impression

Record a single ad impression. Called by the SDK automatically — you rarely need this directly.

Parameters
publisher_idstringrequiredYour publisher ID
surfacestringrequiredSurface identifier (e.g. vscode-sidebar)
ad_idstringrequiredID of the ad shown (provided by SDK)
session_idstringoptionalOpaque session identifier for dedup
Response (200 OK)
{
  "ok": true,
  "impression_id": "imp_9f3a2b7c",
  "revenue_credited_inr": 0.018
}
POST/v1/click

Record an ad click. Called by the SDK automatically.

Parameters
impression_idstringrequiredImpression ID from the /v1/impression response
Response (200 OK)
{
  "ok": true,
  "click_id": "clk_4d8e1f9a",
  "revenue_credited_inr": 0.08
}
GET/v1/publisher/surfaces

List all surfaces registered to a publisher and their current status.

Parameters
publisher_idstringrequiredYour publisher ID
Response (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/payouts

List payout history for a publisher.

Parameters
publisher_idstringrequiredYour publisher ID
limitintegeroptionalMax 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
Get your API key

Sign up as a publisher to get your Publisher ID and API key.

Get Publisher Access