Skip to content
InternetData
API

The IP and domain lookup API

One GET answers what our databases say about an IP address, an AS or a domain. Unlimited, the free plan, needs no key and has no cap. A paid plan answers every field, and one POST takes up to 1,000 lookups.

Try it in your browser

Open one of these. You don't need a key or an SDK, and any page's path on this site works on the API's host.

An Unlimited answer
{
"ip": "146.70.116.130",
"is_bogon": false,
"is_tor": false,
"is_relay": false,
"is_anycast": false,
"is_carrier": false,
"is_satellite": false,
"is_ssh": false,
"is_smtp": false,
"is_web": false,
"is_dns_resolver": false,
"is_bittorrent": false,
"tor": {},
"relay": {},
"location": {
"continent": "EU",
"continent_name": "Europe",
"country": "AT",
"country_name": "Austria",
"timezone": "Europe/Vienna",
"currency_code": "EUR",
"currency_name": "Euro",
"currency_symbol": "โ‚ฌ",
"flag_emoji": "๐Ÿ‡ฆ๐Ÿ‡น",
"flag_unicode": "U+1F1E6 U+1F1F9"
},
"asn": {
"asn": 9009,
"name": "M247 Europe SRL",
"domain": "m247global.com",
"type": "hosting",
"prefix": "146.70.116.0/24"
},
"company": {
"name": "M247 LTD Vienna Infrastructure",
"domain": "m247.ro"
},
"hostname": "",
"abuse": {
"email": "abuse@m247.ro"
}
}

Errors and limits

A limit hit, a revoked key and a target we can't read answer the same way every time, with a status your code can branch on.

When it fails
HTTP/1.1 429 Too Many Requests
Retry-After: 23
{
"error": "per-minute limit for Unlimited lookups exceeded; retry shortly, or use a paid plan"
}
200Answered. A field your plan doesn't include is left out, never sent as false.
400Not an IP address, an AS number or a domain.
401Key unknown, revoked or expired, or a batch sent with no key.
402A batch from a key on Unlimited.
403Sent from an address the key doesn't allow, or a key over plain HTTP.
429Rate limited, or a paid plan's overage cap is reached.
5xxOurs. Retry with backoff, which every SDK already does.
Retry-After

The header tells the two 429s apart. Present means a rate limit, and retrying after it works; absent means a paid plan's overage cap is reached and retrying won't help.

Retries

Retry with backoff and jitter. Every official client does this for you.

Bogons

The SDKs never send them. Private, loopback, documentation and the other reserved ranges answer with every flag false. Sent to the API, they count against Unlimited's per-minute limit and cost nothing on a paid plan.

An official client for every major language.

All SDKs on GitHub โ†’

Twelve official clients for the languages you ship in, each wrapping the lookups and the database downloads. They answer bogons without a request, cache what they look up and split a batch for you. Install commands are in the docs.

On this page

Which fields come back?

On Unlimited, with a key or without one: country-level location, asn, the company's name and domain, the abuse email, the hostname, Tor and relay with their detail, and the anycast, carrier, satellite and service flags. Every paid plan answers every field, the same on each. A flag your plan includes is always in the answer, true or false; a field it doesn't include is left out, never sent as false.

00 ยท Evaluate

Test the real build first.

An evaluation license puts a full current build in your hands, with no sampling, so you can measure it against your own traffic before anyone talks about terms.

01 ยท License

Then license what you use.

Standard, for detection and decisions inside your own product and operations.
Redistribution, when the data ships onward inside what you sell, priced by scope rather than by seat.
Annual terms, a named contact, and monthly, quarterly or yearly payment.