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
| Property | Value |
|---|---|
| Max entities per call | 100 |
| Timeout | 30 seconds |
| Quota consumption | 1 token per entity checked |
| Mixed types | Yes — domain, email, phone, IBAN in same batch |