Lookip Service API

Service index, liveness and this document.

Operations 3

GET / Service Index #
GET /health Liveness Probe #
GET /openapi.json OpenAPI Document #

Work with this as data

Every API here is available over the APIs.io API and to AI agents over MCP.

MCP server

One button, every client — Claude, Cursor, VS Code and the rest.

https://apis.io/mcp

Tools for apis

7 MCP tools reach this
  • find_apisBrowse and filter every API in the catalog.
  • get_api_artifactsOne API's artifacts, grouped by type.
  • get_openapiThe primary OpenAPI for this API.
  • find_similar_apisAPIs that look like this one.
  • apis_io_searchSTART HERE — APIs, providers and tags for one query, each with its total.
  • resolveTurn a domain, URL or GitHub org into the provider it belongs to.
  • find_cohortsEvery scored population of providers in the catalog.
All 92 tools →

Call it yourself

curl for this page
This API
curl "https://apis.io/api/v1/apis/lookip-service-api"
All apis
curl "https://apis.io/api/v1/apis?limit=25"

Discovery needs no key. Ratings and market analysis are Pro.

Get an API key

Free tier, no email required.

A second provider on the same verified email joins the account you already have.

OpenAPI Specification

lookip-service-api-openapi.yml Raw ↑
openapi: 3.2.0
info:
  title: Lookip Service API
  version: 1.0.0
  summary: IP geolocation, ASN and VPN/proxy/Tor/hosting detection for any IPv4 or IPv6 address — we name the anonymising service, not just flag it. Prepaid credit, metered per query, no subscription.
  description: 'IP intelligence over plain HTTP GET and POST. Two lookup kinds, chosen by URL path and never by a header or body field:


    - **LITE** — geolocation and ASN from our local dataset. Sub-5ms p95.

    - **MAX** — full enrichment: city geolocation, VPN/proxy/Tor/relay/residential-proxy detection, hosting and anycast flags, reverse DNS, mobile carrier.


    ## Billing


    Prepaid credit, metered per query. No plans, no subscriptions, no monthly quotas — one balance funds both kinds. Amounts are in µUSD (micro-USD); 1 USD = 1,000,000 µUSD.


    | Kind | Per query | Per 1,000 |

    |------|-----------|-----------|

    | LITE | 150 µUSD | $0.15 |

    | MAX | 1,300 µUSD | $1.30 |


    Every response that debited credit carries `X-Lookup-Kind`, `X-Credit-Debit-MicroUsd` and `X-Credit-Balance-MicroUsd`. Both amounts are decimal strings holding integers that can exceed 2^53 — parse them as BigInt or int64, never as a float. Bogon and error responses carry none of the three, because nothing was charged.


    ## Limits


    50 requests/second per API key, shared across every authenticated endpoint and both kinds. A batch call counts as one request against the rate limit but debits for every resolvable address in it.


    A second ceiling of 100 requests/second applies per calling address across all of `/v1`, including the public ASN endpoints. It sits in front of authentication, so it also bounds requests that carry no key or a rejected one. It is deliberately above the per-key cap and cannot be what stops a single key from reaching 50/second. Both refusals are `rate_limited` with status 429 and neither spends credit.


    The public ASN endpoints need no key and are not metered — the ceiling above is a rate, not a charge.


    ## Errors


    Every error body is `{ "error": { "code", "message" } }`. Retry `rate_limited`, `lite_db_unavailable`, `service_busy`, `upstream_error`, `internal_error` and any 5xx with jittered backoff; never retry `invalid_request`, `invalid_ip`, `unauthorized`, `insufficient_credit` or `insufficient_credit_for_max`. A charge taken for a lookup we then failed to serve is reversed before the response is sent, so a retry costs one lookup and not two.


    A longer implementation spec written for code-generating agents is at https://lookip.io/llms.txt.'
  termsOfService: https://lookip.io/legal/terms
  contact:
    name: Lookip
    url: https://lookip.io/docs
    email: hi@lookip.io
servers:
- url: https://api.lookip.io
  description: Production
security:
- bearerAuth: []
tags:
- name: Service
  description: Service index, liveness and this document.
paths:
  /:
    get:
      tags:
      - Service
      operationId: getServiceIndex
      summary: Service Index
      description: Service name, version, and the canonical endpoint list.
      security: []
      responses:
        '200':
          description: Service index.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/ServiceIndex'
              examples:
                index:
                  summary: The service index.
                  value:
                    service: lookip-api
                    version: '1.0'
                    docs: https://lookip.io/docs
                    openapi: /openapi.json
                    endpoints:
                    - /v1/lookup/lite/:ip
                    - /v1/lookup/max/:ip
                    - /v1/lookup/me
                    - /v1/batch/lite
                    - /v1/batch/max
                    - /v1/asn/:asn
                    - /v1/asn?q=&country=
                    - /openapi.json
  /health:
    get:
      tags:
      - Service
      operationId: getHealth
      summary: Liveness Probe
      description: 'Always 200 with `ok: true` while the process is answering. `ok` is liveness and never depends on `lite`: a process whose Lite dataset failed to load is still alive and still serves every other endpoint, and reporting that in the status code would stop a container from ever becoming healthy. When `lite.loaded` is false every LITE lookup on this process answers 503 `lite_db_unavailable`, and `lite.datasetUpdatedAt` is null.'
      security: []
      responses:
        '200':
          description: The service is up.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/Health'
              examples:
                up:
                  summary: The service is up and the Lite dataset is in memory.
                  value:
                    ok: true
                    ts: 1786726485972
                    lite:
                      loaded: true
                      datasetUpdatedAt: '2026-08-22T04:11:07.000Z'
  /openapi.json:
    get:
      tags:
      - Service
      operationId: getOpenApiDocument
      summary: OpenAPI Document
      description: This document.
      security: []
      responses:
        '200':
          description: The OpenAPI 3.1 description of this API.
          content:
            application/json:
              schema:
                $ref: '#/components/schemas/OpenApiDocument'
              examples:
                head:
                  summary: The first fields of this document. The real body carries `paths` and `components`.
                  value:
                    openapi: 3.1.1
                    info:
                      title: Lookip API
                      version: 1.0.0
                      summary: IP geolocation, ASN and VPN/proxy/Tor/hosting detection for any IPv4 or IPv6 address — we name the anonymising service, not just flag it. Prepaid credit, metered per query, no subscription.
                    servers:
                    - url: https://api.lookip.io
                      description: Production
components:
  schemas:
    LiteReaderHealth:
      type: object
      title: LiteReaderHealth
      description: 'Whether the process answering this request holds the Lite dataset in memory. The file existing on disk is a different fact: a failed load leaves a current snapshot unread while every LITE lookup answers 503.'
      properties:
        loaded:
          type: boolean
          description: False means every LITE lookup on this process is answering 503.
        datasetUpdatedAt:
          type:
          - string
          - 'null'
          format: date-time
          description: When the dataset THIS process loaded was last written. Null while nothing is loaded. Older than the file on disk means the process never picked up a refresh.
      required:
      - loaded
      - datasetUpdatedAt
    OpenApiDocument:
      type: object
      title: OpenApiDocument
      description: This document. The example beside it is the first few fields only; the served body also carries the full `paths` and `components` objects.
      properties:
        openapi:
          type: string
          description: Version of the OpenAPI specification this document is written to.
          pattern: ^3\.1\.\d+$
        info:
          type: object
          description: Identity, version and contact details for the API.
          properties:
            title:
              type: string
              description: Human name of the API.
            version:
              type: string
              description: Version of the API this document describes.
            summary:
              type: string
              description: One-line description. An OpenAPI 3.1 field; absent in 3.0.
            description:
              type: string
              description: Long-form description, in Markdown.
            termsOfService:
              type: string
              description: Terms of service.
              format: uri
            contact:
              type: object
              description: Who to contact about the API.
              properties:
                name:
                  type: string
                  description: Contact name.
                url:
                  type: string
                  description: Contact URL.
                  format: uri
                email:
                  type: string
                  description: Contact email address.
          required:
          - title
          - version
        externalDocs:
          type: object
          description: The human documentation this API is described by.
          properties:
            description:
              type: string
              description: Link text.
            url:
              type: string
              description: Absolute URL.
              format: uri
          required:
          - url
        servers:
          type: array
          description: Base URLs the operations below are relative to.
          items:
            type: object
            properties:
              url:
                type: string
                description: Absolute base URL.
                format: uri
              description:
                type: string
                description: What this server is.
            required:
            - url
        security:
          type: array
          description: The security requirement applied to every operation that does not override it.
          items:
            type: object
            description: Scheme name to required scopes.
        tags:
          type: array
          description: Operation groupings, in the order a renderer should show them.
          items:
            type: object
            properties:
              name:
                type: string
                description: Tag name.
              description:
                type: string
                description: What the group is.
            required:
            - name
        paths:
          type: object
          description: Every operation, keyed by path template.
          propertyNames:
            type: string
            pattern: ^/
        components:
          type: object
          description: The reusable schemas and security schemes the operations `$ref`.
          properties:
            schemas:
              type: object
              description: Every schema a response or body `$ref`s.
            securitySchemes:
              type: object
              description: How to authenticate.
      required:
      - openapi
      - info
    Health:
      type: object
      title: Health
      properties:
        ok:
          type: boolean
          description: Liveness only. Always true on a response at all, and deliberately independent of `lite` — a process with no dataset is still alive and still serves every other endpoint.
        ts:
          type: integer
          description: Server time in milliseconds since the epoch.
        lite:
          $ref: '#/components/schemas/LiteReaderHealth'
      required:
      - ok
      - ts
      - lite
    ServiceIndex:
      type: object
      title: ServiceIndex
      properties:
        service:
          type: string
        version:
          type: string
        docs:
          type: string
          format: uri
          description: Absolute URL of the human documentation. Absolute because it is on the website, not on this host.
        openapi:
          type: string
          description: Path to this document.
        endpoints:
          type: array
          items:
            type: string
      required:
      - service
      - version
      - endpoints
  securitySchemes:
    bearerAuth:
      type: http
      scheme: bearer
      description: 'Send your key as `Authorization: Bearer <key>`. The `?token=` query parameter is no longer accepted — a credential in a URL lands in access logs, browser history and the Referer header, none of which can be un-sent.'
externalDocs:
  description: API documentation
  url: https://lookip.io/docs