Camo coding

API Documentation

Manage monitors, check changes, and configure alerts programmatically.

API access requires a Business plan and an API key. Generate keys in Settings.

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
}
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