IP Address Today

← API documentation

Error reference

Every error uses RFC 7807 problem+json, and the type field links straight to the entry below. All 46 errors are listed here.

{
  "type": "https://www.ipaddresstoday.com/docs/errors#invalid-ip",
  "title": "Invalid IP address",
  "status": 400,
  "detail": "'999.1.1.1' is not a valid IPv4 or IPv6 address."
}

Lookups

Returned by the lookup and batch endpoints.

invalid-ip400Invalid IP address

The value in the path is not a valid IPv4 or IPv6 address.

Fix: Send a literal address such as 8.8.8.8 or 2001:4860:4860::8888. Hostnames are not resolved — resolve them yourself first.

non-routable-ip400Non-routable IP address

The address is private, loopback, link-local, or otherwise reserved, so it has no public geolocation.

Fix: Only look up publicly routable addresses. Use the ipInfo fields to classify an address before looking it up.

geo-data-unavailable503Geolocation data unavailable

The GeoLite2 databases are not loaded yet — normally only during the first minutes after a cold start.

Fix: Retry shortly. If you are self-hosting, check that a MaxMind licence key is configured.

unsupported-lang400Unsupported language

The lang parameter is not one we support.

Fix: Use one of: en, de, es, fr, ja, pt-BR, ru, zh-CN.

invalid-callback400Invalid JSONP callback

format=jsonp was requested without a callback, or the callback is not a valid JavaScript identifier.

Fix: Pass callback=myFunction using letters, digits, underscore, or dollar sign, up to 64 characters.

empty-batch400No addresses supplied

A batch request arrived with an empty or missing ips array.

Fix: Send a body of the form {"ips": ["8.8.8.8", "1.1.1.1"]}.

batch-too-large400Too many addresses

A batch may contain at most 100 addresses.

Fix: Split the work into chunks of 100 or fewer.

Authentication and keys

Returned when a key is missing, wrong, or lacks permission.

api-key-required401API key required

The endpoint requires a key and none was supplied.

Fix: Send your key as the X-API-Key header, an Authorization: Bearer header, or a ?key= query parameter.

missing-scope403Missing scope

The key is valid but does not carry the scope this endpoint needs.

Fix: Create or rotate the key with the required scope — lookup.read for lookups, batch.lookup for batch.

plan-required403Paid plan required

The feature is not available on the Free plan.

Fix: Upgrade from the billing page in your dashboard.

invalid-scope400Invalid scope

A scope named when creating a key is not one we recognise.

Fix: Valid scopes are lookup.read, batch.lookup, usage.read, and account.read.

invalid-label400Invalid label

The key label is empty or too long.

Fix: Use a short descriptive label, for example “production web app”.

invalid-expiration400Invalid expiry

The requested expiry is out of range.

Fix: Choose between 1 and 365 days, or omit it for a key that does not expire.

invalid-allowed-ip400Invalid IP restriction

An entry in the key's IP allow-list is not a valid address or CIDR block.

Fix: Use addresses or CIDR blocks such as 203.0.113.4 or 203.0.113.0/24.

key-limit-reached409Key limit reached

Your plan's maximum number of API keys already exists.

Fix: Revoke a key you no longer use, or upgrade for a higher limit.

key-not-found404Key not found

No key with that id belongs to your account.

Fix: List your keys to get the current ids — a revoked key is gone for good.

Rate limits and abuse

Returned when you exceed a limit or are blocked.

rate-limited429Too many requests

The keyless limit of 45 requests per minute was exceeded, or a wider per-network limit was hit.

Fix: Back off until the time in the Retry-After header, or use an API key for a much higher allowance.

quota-exceeded429Monthly quota exceeded

Your plan's monthly request quota is exhausted. Requests beyond quota are refused, never billed.

Fix: Wait for the reset shown in X-RateLimit-Reset, or upgrade your plan.

abuse-blocked403Access blocked

The address or network has been blocked for abuse.

Fix: Contact support if you believe this is a mistake.

Accounts and sign-in

Returned by the authentication endpoints.

invalid-credentials401Invalid credentials

The email or password is incorrect.

Fix: Check both, or sign in with an emailed code instead.

invalid-email400Invalid email

The email address is not well-formed.

Fix: Supply a valid address.

email-taken409Email already registered

An account with this email already exists.

Fix: Sign in instead, or use the emailed sign-in code if you have forgotten the password.

weak-password400Password too short

Passwords must be at least 8 characters.

Fix: Choose a longer password.

account-suspended403Account suspended

This account has been suspended.

Fix: Contact support.

invalid-refresh-token401Invalid refresh token

The refresh token is expired, revoked, or unknown.

Fix: Sign in again to get a new token pair.

invalid-otp401Invalid or expired sign-in code

The emailed code is wrong, expired after 10 minutes, or was attempted too many times.

Fix: Request a new code.

invalid-mfa-code401Invalid two-factor code

The authenticator or recovery code did not match.

Fix: Check your device clock is accurate, or use a recovery code.

invalid-mfa-ticket401Invalid or expired two-factor ticket

The short-lived ticket issued after the password step has expired.

Fix: Sign in again with your password to get a new ticket.

mfa-already-enabled409Two-factor already enabled

You tried to enrol while two-factor is already active.

Fix: Disable it first if you want to enrol a new device.

invalid-current-password400Current password incorrect

The current password did not match, or the account has no password because it was created through Google.

Fix: Check the password, or use the reset flow for OAuth-only accounts.

invalid-verification-token400Invalid or expired verification link

The email verification link is wrong, already used, or older than 24 hours.

Fix: Request a fresh link from your dashboard.

already-verified409Email already verified

You asked to resend verification for an address that is already confirmed.

Fix: No action needed.

invalid-google-token401Invalid Google token

The Google credential could not be verified.

Fix: Try signing in with Google again.

google-not-configured503Google sign-in not configured

The server has no Google client id configured.

Fix: Use email and password, or an emailed sign-in code.

session-not-found404Session not found

No active session with that id belongs to your account.

Fix: List your sessions again — it may already have been revoked.

user-not-found404User not found

No account matches the identifier supplied.

Fix: Check the id or email.

Billing

Returned by the billing and subscription endpoints.

billing-not-configured503Billing not configured

Payments are not enabled on this deployment.

Fix: Contact support if you are trying to subscribe.

billing-upstream-error502Payment provider error

Stripe returned an error we could not handle.

Fix: Try again shortly. If it persists, contact support with the time of the attempt.

no-billing-account409No billing account

You opened the billing portal before subscribing to anything.

Fix: Start a subscription first.

unknown-plan400Unknown plan

The plan requested at checkout does not exist.

Fix: Choose a plan from the pricing page.

invalid-webhook-signature400Invalid webhook signature

A request to our Stripe webhook failed signature verification.

Fix: This endpoint is for Stripe only — you should not be calling it.

Support and administration

Returned by support tickets and admin endpoints.

invalid-ticket400Invalid ticket

The support ticket is missing a subject or message, or the field is too long.

Fix: Supply both a subject and a message body.

invalid-abuse-rule400Invalid abuse rule

An admin abuse rule is malformed.

Fix: Use a valid IP, CIDR block, or AS number.

cannot-suspend409Cannot suspend

The account cannot be suspended — for example, it is your own or another admin's.

Fix: Admins cannot suspend themselves or other admins.

cannot-unsuspend409Cannot unsuspend

The account is not currently suspended.

Fix: No action needed.

cannot-promote409Cannot promote

The account cannot be promoted to admin.

Fix: The account may already be an admin.

Hit something not listed here? Tell us — an undocumented error is a bug in these docs.