
API Documentation
Manage monitors, check changes, and configure alerts programmatically.
Private API (manage monitors / changes / alerts) requires a Business plan + API key - generate keys in Settings. A small public read-only API is also available with no auth.
Public endpoints (no auth)
These endpoints return the same public data you see on the site. CORS is open, so you can call them from a browser. Cached at the edge so they cost nothing at scale.
GET /api/v1/public/statsLive production aggregates: teams, registered users, active monitors, snapshots captured, and change counts for the last 24h / 7d / 30d.
curl https://zikit.ai/api/v1/public/stats
Example response:
{
"teams": 10,
"registered_users": 10,
"active_monitors": 48,
"snapshots_captured_all_time": 2959,
"changes_detected": {
"last_24h": 82,
"last_7d": 224,
"last_30d": 870
}
}GET /recent-catches/feed.jsonJSON Feed 1.1 of high-importance (≥6/10) catches from the last 60 days. Per-domain variant at /tracked/[host]/feed.json.
curl https://zikit.ai/tracked/vercel.com/feed.json
GET /recent-catches/feed.xmlRSS 2.0 version of the same feeds, for classic readers.
GET /catches/[id]Durable permalink for any public-interest catch. Every catch on a HERO_DOMAIN (vercel, openai, stripe, supabase, github, anthropic, paddle, techcrunch, producthunt) has one. Includes the AI summary, importance, change type, time, source link, and up to 3 related catches on the same host. NewsArticle JSON-LD + dynamic OG image for social shares.
Embed widget
Drop the 3 most recent catches onto your own blog with one iframe (style-isolated, cached 10 min, no JS to load):
<iframe src="https://zikit.ai/embed/recent-catches" width="400" height="520" frameborder="0" style="border-radius:16px;" ></iframe>
Or embed a single-vendor feed (Vercel, OpenAI, Stripe, Supabase, GitHub, Anthropic, Paddle, TechCrunch, Product Hunt):
<iframe src="https://zikit.ai/embed/tracked/vercel.com" width="400" height="520" frameborder="0" style="border-radius:16px;" ></iframe>
Authentication
All requests require a Bearer token in the Authorization header:
Base URL: https://zikit.ai | Rate limit: 30 req/min | Format: JSON
Endpoints
/api/v1/monitorsList all monitors
Response
{
"monitors": [
{
"id": "uuid",
"name": "Competitor Pricing",
"url": "https://example.com/pricing",
"checkFrequency": "hourly",
"healthStatus": "healthy",
"lastCheckedAt": "2026-04-04T12:00:00Z",
"totalChanges": 5,
"totalChecks": 120
}
],
"plan": "business"
}/api/v1/monitors/:idGet monitor details + recent changes
Response
{
"monitor": { "id": "uuid", "name": "...", "url": "...", ... },
"changes": [
{
"id": "uuid",
"summary": "Pro plan price dropped from $49 to $39",
"importanceScore": 8,
"changeType": "price",
"createdAt": "2026-04-04T12:00:00Z"
}
]
}/api/v1/monitors/:id/changesList changes for a monitor (JSON). Supports ?limit=N (max 100, default 20)
Response
{
"changes": [
{
"id": "uuid",
"summary": "Pro plan price dropped from $49 to $39",
"importanceScore": 8,
"changeType": "price",
"details": "Pricing page updated...",
"actionItem": "Consider adjusting your pricing",
"keywordMatched": true,
"createdAt": "2026-04-04T12:00:00Z"
}
],
"count": 1
}/api/v1/monitorsCreate a new monitor
Request body
{
"url": "https://example.com/pricing",
"name": "Competitor Pricing",
"checkFrequency": "hourly",
"useCase": "competitor",
"watchKeywords": "price, sale, discount",
"cssSelector": "#pricing-table"
}Response
{ "monitor": { "id": "uuid", "name": "...", ... } }/api/v1/monitors/:idUpdate monitor settings
Request body
{
"checkFrequency": "daily",
"watchKeywords": "new-keyword",
"isPaused": false
}Response
{ "monitor": { ... } }/api/v1/monitors/:idDelete a monitor
Response
{ "success": true }/api/v1/monitors/:id/checkTrigger a manual check
Response
{
"changed": true,
"summary": "Price changed from $49 to $39",
"importanceScore": 8
}/api/v1/monitors/suggest-from-sitemapRead a sitemap.xml and return up to 20 candidate URLs worth monitoring (pricing / changelog / legal / docs / blog / careers / about). Use the returned list to batch-create monitors. Rate limit: 5 requests / min.
Request body
{
"sitemapUrl": "https://vercel.com/sitemap.xml"
}Response
{
"sitemapUrl": "https://vercel.com/sitemap.xml",
"sitemapsProcessed": ["https://vercel.com/sitemap.xml"],
"candidateCount": 12,
"candidates": [
{ "url": "https://vercel.com/pricing", "category": "pricing", "suggestedName": "vercel.com · pricing" },
{ "url": "https://vercel.com/changelog", "category": "changelog", "suggestedName": "vercel.com · changelog" },
{ "url": "https://vercel.com/legal/privacy", "category": "legal", "suggestedName": "vercel.com · privacy" }
]
}/api/v1/alert-configs?monitorId=:idGet alert preferences for a monitor
Response
{ "configs": [{ "channel": "email", "destination": "...", "minImportance": 3, "isActive": true }] }/api/v1/alert-configsCreate or update alert config
Request body
{
"monitorId": "uuid",
"channel": "email",
"destination": "user@example.com",
"minImportance": 3,
"isActive": true
}Response
{ "config": { ... } }/api/v1/changes/exportExport all changes as CSV
Response
CSV file download (Content-Type: text/csv)
/api/v1/monitors/:id/exportExport changes for a specific monitor as CSV
Response
CSV file download (Content-Type: text/csv)
Monitor fields reference
| Field | Type | Description |
|---|---|---|
url | string | URL to monitor (required) |
name | string | Display name (required) |
checkFrequency | string | daily, hourly, every_6h, weekly, 15min |
cssSelector | string | CSS selector to monitor specific element |
ignoreSelectors | string | Comma-separated selectors to exclude |
watchKeywords | string | Comma-separated keywords to watch |
keywordMode | string | any (default), appear, disappear |
useCase | string | competitor, regulatory, ecommerce, jobs, content, custom |
description | string | Notes about why you track this page |
tags | string | Comma-separated tags |
isPaused | boolean | Pause/resume monitoring |
Alert channels
Available channels for the POST /alert-configs endpoint:
emailEmail addressAll plansslackSlack webhook URLPro+discordDiscord webhook URLPro+telegramBOT_TOKEN:CHAT_IDPro+webhookAny HTTPS URL (POST JSON)BusinessError codes
401Unauthorized - invalid or missing API key403Forbidden - feature requires a higher plan404Not found - monitor doesn't exist or wrong org429Rate limited - too many requests400Bad request - invalid input