Developer resources / Public network observations

Network data.
Ready to read.

Use Stealth’s public network observations in your own tools. Two read-only feeds provide the measurements behind Super Intelligence and Business Platforms.

No account or API key required. Read one snapshot per feed, at most once per minute.

01 / Choose a feed

Two views.
Separate measures.

The feed URLs and schemas below are fixed. A request retrieves the configured public catalog.

AI endpoint measurements

ICMP round trip time to public AI endpoints, with independent ICMP and TCP reachability checks.

GET /api/ai-latency

JSON Schema · Read the measurement page

Latency fields and chart values are already in milliseconds and already subtract baseline_ms, currently 0.100 ms. Do not subtract it again. Adjusted values can be zero or negative. TCP provides status only in this feed.

History, statistics and cached data

points[i] is null or [mean_ms, successful_recording_count]. Its time is window.start + i × window.step. The mean is the five minute trailing bucket ending at that time; the first point can include the preceding five minutes. Use the returned window and generated_at. Statistics describe successful recordings in the five day snapshot window, not the chart averages.

A stale cached AI response retains its original generated_at, window, history and statistics. server_time advances and probe states become stale. Do not describe those retained values as a current five day observation or current reachability.

Business platform measurements

Separate ICMP RTT, TCP connection and TLS handshake measurements for the configured public business platform catalog.

GET /api/business-platforms

JSON Schema · Read the measurement page

All latency fields and chart values are raw milliseconds, converted from seconds once. No AI baseline adjustment applies. TCP duration includes DNS and connection establishment. TLS duration also includes the TLS handshake.

History, statistics and cached data

Each metrics[protocol].points[i] is null or [mean_ms, successful_recording_count], aligned to buckets[i]. Bucket samples fall after start and at or before end. Partial first and last buckets stay inside the returned five day window. Median and p95 use underlying successful recordings for that endpoint and protocol.

A stale Business response reframes buckets to the current five day window, preserves source_snapshot_at, drops crossing old buckets and clears median_ms/p95_ms. statistics_available is false, current_ms is null and configured probe states are unavailable. Retained latest_ms is a last successful observation, not proof of current reachability.

02 / A simple start

Fetch once.
Read carefully.

The Python example uses the standard library. It checks snapshot and measurement timestamps against the client clock, then prints each public hostname, its ICMP status and current RTT when available.

A single request returns JSON. There are no date ranges, target selections or additional query parameters.

curl --max-time 15 --silent --show-error https://stealth.net/api/business-platforms
Python example with version and snapshot checks
import json
import time
from urllib.error import HTTPError
from urllib.request import urlopen

url = "https://stealth.net/api/business-platforms"
try:
    response = urlopen(url, timeout=15)
except HTTPError as error:
    if error.code != 503:
        raise
    response = error  # 503 still contains a snapshot.
with response:
    data = json.load(response)
if data.get("schema_version") != 1:
    raise ValueError("Unsupported measurement schema")
if data.get("state") not in {"live", "empty"}:
    raise RuntimeError("Current measurements unavailable")
now = time.time()  # Keep the client clock accurate.
fresh = lambda stamp: type(stamp) in (int, float) and now - 120 <= stamp <= now + 5
if not all(fresh(data.get(key)) for key in ("server_time", "generated_at", "source_snapshot_at")):
    raise RuntimeError("Snapshot is old or client/server clocks differ")
for endpoint in data["endpoints"]:
    status = endpoint["probes"]["icmp"]
    metric = endpoint["metrics"]["icmp"]
    stamps = (metric["recorded_at"], status["success_at"], status["up_at"])
    current = metric["current_ms"] if status["state"] == "up" and all(map(fresh, stamps)) else None
    label = status["label"]
    if status["state"] in {"up", "down"} and not all(map(fresh, stamps[1:])):
        label = "Unconfirmed"
    print(endpoint["instance"], label, current)
# Request each feed at most once per minute. None means unavailable.

A Python None value means the current RTT is unavailable. It is never a zero-latency substitute.

  • Authentication is not required. Make an HTTPS GET to one of the two fixed feed URLs. No query parameters, target selections, date ranges or arbitrary queries are accepted.
  • Poll each feed at most once per minute. Snapshots are shared briefly on the server; faster polling does not create a new measurement. After a failure, wait at least a minute and back off rather than retrying rapidly.
  • Measurement responses use Cache-Control: no-store. Keep source and observation timestamps with any separately stored result. Cross-origin browser access is not guaranteed; use a server-side or same-origin client.
03 / Read the evidence

Context travels
with the data.

These are network observations from Stealth NYC. They do not establish that an application workflow is functioning.

Measurements originate from Stealth NYC, 32 Avenue of the Americas. Hostnames can resolve to CDN or shared service edges. ICMP measures a round trip; TCP/TLS checks establish connection reachability, not login, messaging, inference or another application workflow.

Interpret each protocol independently. ICMP non-response alongside successful TCP/TLS checks is consistent with ICMP filtering, but does not establish its cause or an application outage. Not monitored is an intentional configuration state.

Use actual recorded_at, success_at and up_at timestamps. They are Unix seconds in UTC and can include fractional seconds. generated_at is the snapshot time and server_time is response presentation time; neither replaces a measurement timestamp. Current results require fresh measurements and healthy matching scrapes, normally within 120 seconds.

A null measurement, null chart point or null count is unavailable or unknown. Preserve gaps. Do not interpolate missing buckets, turn null into zero or infer uptime from successful-sample statistics. A genuine numeric zero remains a measurement.

The observation window spans 432,000 seconds with a nominal 300 second chart step. There is no older-history or export parameter. Treat the returned window as authoritative; cached stale behavior differs between feeds as described below.

Collection start and available history are explicit. collecting_history does not imply that every bucket has complete coverage. For AI, compare counts to aggregation.expected_samples. For Business, use the bucket duration and protocols[protocol].interval; a full 300 second bucket expects 300 divided by that interval (for example, ten at 30 seconds or five at 60 seconds). Partial or unknown counts need separate labeling.

Check snapshot state and each protocol separately.
ResponseInterpretation
200 / liveA usable snapshot contains successful history. Inspect each protocol, timestamp and stale flag before calling an endpoint currently reachable.
200 / emptyThe source returned a snapshot with no successful history. Configured endpoints can still be present.
200 / staleCached measurements are retained explicitly as stale. The feeds handle stale history differently; see each feed above.
503 / unavailableThe body is a snapshot with unavailable measurements. A business catalog failure can also produce an empty catalog and catalog_unavailable.
400 / errorThe request included query parameters. The body contains error, not a measurement snapshot.

Protocol states differ between feeds. AI uses up, down, unknown and stale. Business uses up, down, unconfirmed, unavailable and not_monitored. Use the accompanying labels and JSON Schema definitions for their fields.

04 / A stable reference

Built for
careful reuse.

OpenAPI 3.1.1 describes the two GET operations. Each standalone schema uses JSON Schema 2020-12.

The response schema_version is currently 1. Read fields by name, accept additional fields and do not depend on object order, endpoint order, a fixed endpoint count or a hostname list. Check the version before interpreting a payload.

Top-level state is live, empty, stale or unavailable. HTTP 200 can carry stale or empty data; status 200 alone is not a health check. HTTP 503 carries an unavailable snapshot, while HTTP 400 carries an error object for a request with query parameters.

Only configured public measurement data is exposed. Business results are restricted to monitor_group=business_platforms, visibility=public and probe_host=millennium2; AI results remain in their separate super_intelligence group. Customer records, private tenants, router telemetry, detailed routes and RCA evidence are outside these feeds.

AI endpoint measurements: top-level fields
schema_version
Payload version. Additional fields may be added within this version.
monitor_group
This feed cannot mix AI and business groups.
generated_at
Time of the retained source snapshot; does not advance for a stale cached snapshot.
window
Structured object; see the linked JSON Schema for its fields.
probe
Structured object; see the linked JSON Schema for its fields.
monitoring_started_at
Configured collection start, Unix seconds UTC; not the first success for every endpoint.
history_start
Actual Unix timestamp in seconds UTC; fractional seconds are preserved.
state
Interpret independently of HTTP status and per-protocol states.
server_time
Presentation time in Unix seconds UTC; not a measurement timestamp.
collecting_history
True until five days have elapsed since monitoring_started_at; does not certify complete coverage.
refresh_seconds
Recommended minimum interval between requests.
baseline_ms
Already-subtracted AI local RTT baseline, currently 0.100 ms. Do not adjust values a second time.
aggregation
See the linked JSON Schema for the field definition.
endpoints
Configured public catalog, including entries with no successful measurements. Do not hardcode its size or hostnames.
Business platform measurements: top-level fields
schema_version
Payload version. Additional fields may be added within this version.
monitor_group
This feed cannot mix AI and business groups.
generated_at
Window end and presentation snapshot time; for stale business data compare source_snapshot_at.
window
Structured object; see the linked JSON Schema for its fields.
probe
Structured object; see the linked JSON Schema for its fields.
monitoring_started_at
Configured collection start, Unix seconds UTC; not the first success for every endpoint.
history_start
Actual Unix timestamp in seconds UTC; fractional seconds are preserved.
state
Interpret independently of HTTP status and per-protocol states.
server_time
Presentation time in Unix seconds UTC; not a measurement timestamp.
collecting_history
True until five days have elapsed since monitoring_started_at; does not certify complete coverage.
refresh_seconds
Recommended minimum interval between requests.
visibility
See the linked JSON Schema for the field definition.
source_snapshot_at
Original source snapshot time; preserved when stale history is reframed.
buckets
Explicit bounds for each metrics[protocol].points[i]; samples are inside the permitted window.
catalog_fingerprint
Opaque catalog revision; may be unavailable when catalog loading fails.
protocols
See the linked JSON Schema for the field definition.
totals
See the linked JSON Schema for the field definition.
aggregation
See the linked JSON Schema for the field definition.
statistics_available
False for stale/unavailable snapshots; do not reconstruct quantiles from chart averages.
summaries
See the linked JSON Schema for the field definition.
catalog_unavailable
Optional: public catalog could not be loaded; totals and endpoint list may be empty.
endpoints
Configured public catalog, including entries with no successful measurements. Do not hardcode its size or hostnames.

Keep the original source URL, observation window and UTC timestamps when citing or displaying results. Service commitments and remedies are defined in the applicable agreement, rather than inferred from a feed response.

Read the OpenAPI reference