Skip to content

Batch API

Check up to 100 entities in one POST call. Same response shape as /api/check, returned as an array. Batch calls count as 1 API call per entity checked.

Available on: Starter (5k checks/mo), Pro (25k), Scale (unlimited). Batch is especially useful for nightly audits of existing user bases.

Endpoint

POST /api/check
Content-Type: application/json
Authorization: Bearer kc_live_your_key_here

Request — batch format

Send an array of entity objects instead of a single object:

{
  "batch": [
    { "domain": "suspicious-shop.io" },
    { "email": "user@temp-mail.org" },
    { "domain": "stripe.com" },
    { "phone": "+351912345678" }
  ]
}

Response

{
  "results": [
    {
      "query": "suspicious-shop.io",
      "type": "domain",
      "verdict": "BLOCK",
      "score": 87,
      "signals": ["domain:brand-impersonation:stripe", "domain:high-risk-tld:.io"],
      "ref": "a1b2c3d4"
    },
    {
      "query": "user@temp-mail.org",
      "type": "email",
      "verdict": "REVIEW",
      "score": 42,
      "signals": ["disposable-email-provider"],
      "ref": "e5f6g7h8"
    }
  ],
  "count": 4,
  "checked": 4,
  "ms": 312
}

Code example — Node.js

const results = await fetch('https://kairoscheck.net/api/check', {
  method: 'POST',
  headers: {
    'Authorization': `Bearer ${process.env.KC_API_KEY}`,
    'Content-Type': 'application/json',
  },
  body: JSON.stringify({
    batch: users.map(u => ({ email: u.email, domain: u.signupDomain }))
  }),
}).then(r => r.json());

const blocked = results.results.filter(r => r.verdict === 'BLOCK');
console.log(`Blocked ${blocked.length} of ${users.length} signups`);

Limits

PropertyValue
Max entities per call100
Timeout30 seconds
Quota consumption1 token per entity checked
Mixed typesYes — domain, email, phone, IBAN in same batch