Camo coding

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.

The API serves the same pipeline:1:9alert-to-check·p951sdetection → alertfull stats →

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

Live 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.json

JSON 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.xml

RSS 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:

Authorization: Bearer zk_live_your_api_key_here

Base URL: https://zikit.ai | Rate limit: 30 req/min | Format: JSON

Endpoints

GET/api/v1/monitors

List 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"
}
GET/api/v1/monitors/:id

Get 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"
    }
  ]
}
GET/api/v1/monitors/:id/changes

List 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
}
POST/api/v1/monitors

Create 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": "...", ... } }
PATCH/api/v1/monitors/:id

Update monitor settings

Request body

{
  "checkFrequency": "daily",
  "watchKeywords": "new-keyword",
  "isPaused": false
}

Response

{ "monitor": { ... } }
DELETE/api/v1/monitors/:id

Delete a monitor

Response

{ "success": true }
POST/api/v1/monitors/:id/check

Trigger a manual check

Response

{
  "changed": true,
  "summary": "Price changed from $49 to $39",
  "importanceScore": 8
}
POST/api/v1/monitors/suggest-from-sitemap

Read 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" }
  ]
}
GET/api/v1/alert-configs?monitorId=:id

Get alert preferences for a monitor

Response

{ "configs": [{ "channel": "email", "destination": "...", "minImportance": 3, "isActive": true }] }
POST/api/v1/alert-configs

Create or update alert config

Request body

{
  "monitorId": "uuid",
  "channel": "email",
  "destination": "user@example.com",
  "minImportance": 3,
  "isActive": true
}

Response

{ "config": { ... } }
GET/api/v1/changes/export

Export all changes as CSV

Response

CSV file download (Content-Type: text/csv)
GET/api/v1/monitors/:id/export

Export changes for a specific monitor as CSV

Response

CSV file download (Content-Type: text/csv)

Monitor fields reference

FieldTypeDescription
urlstringURL to monitor (required)
namestringDisplay name (required)
checkFrequencystringdaily, hourly, every_6h, weekly, 15min
cssSelectorstringCSS selector to monitor specific element
ignoreSelectorsstringComma-separated selectors to exclude
watchKeywordsstringComma-separated keywords to watch
keywordModestringany (default), appear, disappear
useCasestringcompetitor, regulatory, ecommerce, jobs, content, custom
descriptionstringNotes about why you track this page
tagsstringComma-separated tags
isPausedbooleanPause/resume monitoring

Alert channels

Available channels for the POST /alert-configs endpoint:

emailEmail addressAll plans
slackSlack webhook URLPro+
discordDiscord webhook URLPro+
telegramBOT_TOKEN:CHAT_IDPro+
webhookAny HTTPS URL (POST JSON)Business

Error codes

401Unauthorized - invalid or missing API key
403Forbidden - feature requires a higher plan
404Not found - monitor doesn't exist or wrong org
429Rate limited - too many requests
400Bad request - invalid input