Product · Batch API

Enrich 100 IPs per round trip.

POST /v1/batch takes an ordered array of IPs and returns results in the same order, with per-IP error objects for the ones that don't parse. One authenticated call charges your quota once.

Request

curl -X POST https://api.ip-atlas.io/v1/batch \
  -H "X-API-Key: ipa_live_..." \
  -H "Content-Type: application/json" \
  -d '{"ips":["8.8.8.8","1.1.1.1","not-an-ip"]}'

Response

{
  "results": [
    {"ip":"8.8.8.8","country":"US","asn":15169, ...},
    {"ip":"1.1.1.1","country":"AU","asn":13335, ...},
    {"ip":"not-an-ip","error":"invalid IP address"}
  ]
}

Semantics you can rely on

When to use it

Log enrichment

Append geo/ASN to every line of yesterday's access log. 1M lines = 10,000 batch calls.

Bulk user analysis

Resolve thousands of signup IPs during a fraud review without 10,000 individual RTTs.

Migration / backfill

Moving off another IP API? Enrich your historical data in big batches with clean rate limiting.

Node example

import { IPAtlas } from '@trellisdigitalservices/ip-atlas';
const c = new IPAtlas({ apiKey: 'ipa_live_...' });

// Read IPs from a file, chunk, enrich, write.
const chunks = chunk(ips, 100);
for (const c100 of chunks) {
  const batch = await c.lookupBatch(c100);
  for (const r of batch.results) { /* ... */ }
}