Skip to main content

Tools for developers and AI agents

CloudExplorer API/MCP

Retrieve verifiable CloudExplorer data directly from applications or make it available to your AI model.

REST API

The REST API provides CloudExplorer domain, network and subdomain scan history data. GET methods read saved data; POST /api/v1/check_subdomain queues a new scan and requires a Bearer token.

Connect to the REST API

Send HTTPS requests to the base URL. GET methods allow anonymous access with a shared limit of 30 requests per second (429 when exceeded); a valid Bearer token bypasses that limit, while an invalid Authorization header returns 401. Errors use application/problem+json with a code and request_id. Interactive documentation shows the exact response schemas.

Base URL https://api.cloudexplorer.ru
Open REST API documentation

Core methods

GET
/api/v1/status

Data status

Reports the API status and availability of its connected data sets.

GET
/api/v1/zones/{zone}/domains

Zone domains

Returns active domains in a selected zone with cursor pagination; use the returned cursor to request the next page.

GET
/api/v1/zones/{zone}/statistics

Zone statistics

Returns stored daily values for a selected zone, date and metric.

GET
/api/v1/domains/{domain}/ns-history

Current domain data and NS history

Returns current A, AAAA, MX, NS, CNAME, and TXT records, current WHOIS when available, and up to 200 observed NS changes. For public IP addresses in A and AAAA records and addresses resolved from MX, NS, and CNAME targets, the response includes an AS lookup status and, on a match, the observed BGP origin AS; its current description is included when available. When no supported stored NS history exists for the domain or its zone, current data is still returned with history_available=false.

GET
/api/v1/domains/{domain}/whois

Domain WHOIS

Returns current plain-text output from the system WHOIS utility for a domain.

GET
/api/v1/as/lookup?ip={ip}

IP and origin AS

Resolves a public IP address to its observed BGP origin AS and returns its current description.

GET
/api/v1/ptr/lookup?ip={ip}

PTR record, origin AS and PTR history by IP

Returns the current PTR record, the observed BGP origin AS and the PTR change history of a public IPv4 address. PTR data comes from a daily scan of the prefixes announced by the ASes in the collector scope: IPv6 is not supported, and an address outside the scope returns ptr.status=no_data. The absent status is an authoritative absence of a PTR record, not a timeout. The limit parameter (1 to 500, default 100) caps the number of newest history entries; history_truncated=true marks a cut history.

GET
/api/v1/as/graph/dates

RouteViews snapshot dates

Returns available daily RouteViews BGP snapshot dates, newest first, for building an AS neighbor graph.

GET
/api/v1/as/{asn}/graph

AS neighbor graph

Returns the specified AS neighbor graph from one RouteViews collector and snapshot, not a global map of the internet, with traversal depth from 1 to 3 and a selectable snapshot date.

POST
/api/v1/check_subdomain

Queue a subdomain scan

Accepts only JSON {"domain":"example.com"} and requires a valid Bearer token; extra fields, including priority, are rejected. The domain string is at most 1024 characters and must be a DNS name, not a URL, IP or wildcard; it is normalized to lowercase/IDNA. The body limit is 16 KiB. Each POST creates a separate priority-10 order and returns 202 with order_id, normalized domain, status="new" and priority=10. An invalid domain returns 422; an oversized body returns 413.

GET
/api/v1/check_subdomain_order?order_id={order_id}

Check a subdomain scan order

Takes an integer order_id from 1 to 18446744073709551615. Returns the order ID and domain plus status (new/worked/done/error), priority, created_at, started_at, finished_at, duration_seconds, error_type, result_id and result. Timestamps are UTC; unset fields are null. With status="done", result is the full scan JSON, including partial scans with warnings; result is null until saved. An unknown ID returns 404; oversized results return 413 and unavailable data returns 503.

GET
/api/v1/check_subdomain_history?domain={domain}

Read subdomain scan history

Takes a 1–1024-character domain and normalizes the DNS name to lowercase/IDNA. Returns domain, scanned, latest={id,scanned_at,result}, history=[{id,scanned_at,diff}] and message. History is ordered newest first by UTC time and ID. Each JSON Patch diff (add/remove/replace) applies directly to latest.result to restore one older result. When never scanned: 200, scanned=false, latest=null, history=[] and a no-scan message. Reading does not start a scan. More than 10,000 rows, 32 MiB of stored JSON or response, or 128 MiB of processing returns 413; unavailable data returns 503.

Request examples

List domains in a zone

This request returns the first 100 active domains in the RU zone. For the next page, preserve and send the cursor returned by the server exactly.

curl 'https://api.cloudexplorer.ru/api/v1/zones/ru/domains?limit=100'

Retrieve current domain data and NS history

This request returns current A, AAAA, MX, NS, CNAME, and TXT records, current WHOIS when available, and observed NS history. For public IP addresses in A and AAAA records and addresses resolved from MX, NS, and CNAME targets, the response includes an AS lookup status and, on a match, the observed BGP origin AS; its current description is included when available. If no supported stored NS history exists for the domain or its zone, current data remains available and history_available is false.

curl 'https://api.cloudexplorer.ru/api/v1/domains/beget.ru/ns-history?limit=100'

Retrieve an AS neighbor graph

This request returns the AS15169 neighbor graph from a RouteViews snapshot with traversal depth 2. A snapshot date can be supplied as a separate parameter.

curl 'https://api.cloudexplorer.ru/api/v1/as/15169/graph?depth=2'

Retrieve the PTR record and PTR history by IP

This request returns the current PTR record, the observed BGP origin AS and up to 100 newest PTR changes of the address. Increase limit up to 500 when the history is longer.

curl 'https://api.cloudexplorer.ru/api/v1/ptr/lookup?ip=8.8.8.8'

Start a scan and check its order

First set API_TOKEN in your environment. The POST returns 202 and an order_id; substitute it for 123 in the second request. Another POST creates another order. The result appears when status="done".

curl -i -X POST 'https://api.cloudexplorer.ru/api/v1/check_subdomain' -H "Authorization: Bearer ${API_TOKEN}" -H 'Content-Type: application/json' --data '{"domain":"example.com"}'
curl 'https://api.cloudexplorer.ru/api/v1/check_subdomain_order?order_id=123'

Read subdomain scan history

This request reads the latest full result and older states as independent JSON Patches. If the domain has never been scanned, the 200 response has scanned=false and empty history.

curl 'https://api.cloudexplorer.ru/api/v1/check_subdomain_history?domain=example.com'

MCP Server

The MCP Server exposes CloudExplorer tools to models and AI agents. A model can retrieve domains, zone statistics, WHOIS, NS history, AS information and AS neighbor graphs from RouteViews snapshots without constructing REST requests itself.

The MCP server is read-only and has no subdomain scan tools. Queue scans through the REST API with a Bearer token.

Available tools

TOOL
getAS

Look up an AS by IP

Resolves a public IP address to its observed BGP origin AS and returns its description.

TOOL
getASGraph

Retrieve an AS neighbor graph

Returns the specified AS neighbor graph from one RouteViews collector and snapshot, not a global map of the internet, with traversal depth from 1 to 3 and a selectable snapshot date.

TOOL
getASGraphDates

List RouteViews snapshot dates

Returns available daily RouteViews BGP snapshot dates, newest first, for building an AS neighbor graph.

TOOL
getPTR

PTR record, origin AS and PTR history by IP

Returns the current PTR record, the observed BGP origin AS and the PTR change history of a public IPv4 address: ptr.status is present, absent (an authoritative absence of a PTR record) or no_data (the address is outside the scope of the daily PTR scan, which covers only the IPv4 prefixes of the collector ASes). The limit parameter (1 to 500, default 100) caps the number of newest history entries; history_truncated=true marks a cut history.

TOOL
getZoneDomains

List zone domains

Returns active domains in a selected zone with cursor pagination, up to 500 domains per tool call.

TOOL
getWHOIS

Retrieve domain WHOIS

Retrieves current plain-text WHOIS output for a domain.

TOOL
getNSHistory

Retrieve current domain data and NS history

Returns current A, AAAA, MX, NS, CNAME, and TXT records, current WHOIS when available, and up to 200 observed NS changes. For public IP addresses in A and AAAA records and addresses resolved from MX, NS, and CNAME targets, it includes an AS lookup status and, on a match, the observed BGP origin AS; its current description is included when available. When no supported stored NS history exists for the domain or its zone, current data is returned with history_available=false.

TOOL
getZoneStatistics

Retrieve zone statistics

Returns stored daily values for a selected zone, date and metric.

Connect a model

Add CloudExplorer as a remote MCP server in a client that supports the Streamable HTTP transport, then ask the model to list its available tools.

MCP endpoint https://mcp.cloudexplorer.ru/mcp
Transport Streamable HTTP

Connect to ChatGPT

Add CloudExplorer to ChatGPT as a custom MCP app with OAuth. After you sign in on the CloudExplorer page, ChatGPT obtains a token and automatically attaches it to tool calls.

  1. Enable developer mode

    In ChatGPT, open Settings → Security and login and enable Developer mode. Availability depends on your plan and workspace policy.

  2. Create a new app

    Open Plugins, select the plus button, and start creating a new connection.

  3. Enter the MCP server

    Enter a name and description, choose Connection: Server URL, paste the MCP server URL, and choose Authentication: OAuth.

  4. Configure OAuth

    Open Advanced OAuth settings, choose User-Defined OAuth Client, and enter the values from the table below. The OAuth endpoints should be discovered automatically.

  5. Create the connection

    Accept the custom MCP server warning and select Create.

  6. Sign in and grant access

    On oauth.cloudexplorer.ru, sign in with your Google account (gmail) using the "Sign in with Google" button, then select Allow.

  7. Verify the tools

    After returning to ChatGPT, open the CloudExplorer card and confirm that Actions are listed. Start a new chat, choose CloudExplorer from the tools menu, and send a test request.

ChatGPT field values

Name
CloudExplorer
Description
DNS, WHOIS, and AS information
Connection
Server URL
Server URL
https://mcp.cloudexplorer.ru/mcp
Authentication
OAuth
Callback URL — verify only
https://chatgpt.com/connector_platform_oauth_redirect
Registration method
User-Defined OAuth Client
OAuth Client ID
cloudexplorer-chatgpt
OAuth Client Secret
Leave empty
Token endpoint auth method
none
Scope
mcp.read

Important: leave OAuth Client Secret empty. Authorization is performed with a Google account (gmail) on oauth.cloudexplorer.ru after the connection is created; no separate username and password are required.

Automatically discovered OAuth endpoints

ChatGPT reads these values from server metadata. Use this list for verification; you normally do not need to enter the endpoints manually. An empty Registration URL and DCR/CIMD warnings are expected for a User-Defined OAuth Client and do not block the connection.

Auth URL
https://oauth.cloudexplorer.ru/authorize
Token URL
https://oauth.cloudexplorer.ru/token
Authorization server base
https://oauth.cloudexplorer.ru
Resource
https://mcp.cloudexplorer.ru/mcp
Registration URL
Leave empty

Authorization via Google (gmail)

Access to MCP is granted after signing in with a Google account (gmail) on the CloudExplorer page.

Sign-in method
Sign in with Google
Sign-in page
https://oauth.cloudexplorer.ru

If the connection is created but Actions are missing, open Plugins → CloudExplorer, select Refresh, and start a new chat.

Official OpenAI instructions

Commands for other MCP clients

Codex

Add the remote MCP server to your Codex configuration.

codex mcp add cloudexplorer --url https://mcp.cloudexplorer.ru/mcp

Claude Code

Add the server over HTTP to your Claude Code configuration.

claude mcp add --transport http cloudexplorer https://mcp.cloudexplorer.ru/mcp

Generic configuration example

Use this example for an MCP client that accepts JSON configuration. Field names may differ, so check your client documentation.

{
  "mcpServers": {
    "cloudexplorer": {
      "type": "http",
      "url": "https://mcp.cloudexplorer.ru/mcp"
    }
  }
}

Model use cases

List zone domains

Show the first 100 active domains in the ru zone. If another page is available, include its cursor.

Current domain data and NS history

Show the current A, AAAA, MX, NS, CNAME, and TXT records and available WHOIS for beget.ru. For public IP addresses in A and AAAA records and addresses resolved from MX, NS, and CNAME targets, show the AS lookup status and, on a match, the observed BGP origin AS and its current description when available. Then summarize up to 100 NS changes. If history_available=false, state clearly that stored history is unavailable.

Review zone statistics

Show statistics for the ru zone on the latest available date and identify the metric used.

Look up an AS by IP

Find the observed BGP origin AS for 8.8.8.8 and show its description.

Explore an AS neighbor graph

Build the AS15169 neighbor graph to depth 2 from the latest available RouteViews snapshot and briefly describe the connections.

PTR record and PTR history by IP

Show the current PTR record and the observed BGP origin AS of 8.8.8.8, then briefly summarize up to 100 newest PTR changes. If ptr.status=no_data, state clearly that the address is outside the PTR scan scope.