Documentation

The Digital Twin Earth over MCP or plain REST, keyless by default.

Overview
Introduction

The perception layer, as an API

Call the Digital Twin Earth over MCP or plain REST. Site intelligence, live hazards, buildings, traffic, place trends and street-level vision, every figure with disclosed provenance.

The API is keyless. Every endpoint answers without a key, without a card, without a signup. A key is optional and free: it names your usage and raises the per-minute ceiling from 120 to 600 requests per minute. That is all it does.

Authentication

Keys and fair use

Keyless by default. A key is optional and free: it names your usage and raises the per-minute ceiling. That is all it does.

TierRate limitScopeCost
Anonymous120 req/minper IPNothing. Just call.
With a free key600 req/minper keyfree, issued on the developer dashboard

Getting and using a key

Keys are issued for free on the developer dashboard. Rotating there issues a new key and kills the old one immediately. Pass it as the X-Api-Key header or as a ?key= query parameter.

curl "https://api.solyzer.ai/earth/usage" \
  -H "X-Api-Key: YOUR_KEY"

GET /earth/usage returns your own consumption: owner (masked), today's total and per-path breakdown, the month total and a daily series. Without a valid key it returns 401.

Rate limits and metering

Every /earth response carries X-RateLimit-Limit and X-RateLimit-Remaining. When you cross the ceiling you get a 429 with Retry-After: 60; back off and the window resets.

X-RateLimit-Limit: 120
X-RateLimit-Remaining: 118

Usage is counted at the origin. Reads served by the edge cache never reach it and are free.

Usage counts origin hits only. Reads served by the edge cache are free and are never counted, so they do not touch your usage or your per-minute ceiling.

The contract

Read this before the numbers

The layer is honest by design. These five rules hold on every response; an agent that respects them will not be misled.

confidence

Figures carry confidence: high | low | unknown. UNKNOWN means the source could not answer, never treat it as zero. low means measured but from thin data or a reported sampling cap.

caveats

Every brief and score ships a caveats[] array. Read it before the numbers; it states assumptions and sampling limits.

degraded

Responses with health.sourcesUsable < health.sourcesQueried are served uncached and incomplete by design. Retry later for a full read.

nulls

A null score means the system refused to invent a number. Do not impute.

licenses

Per-record license fields matter: ODbL-1.0 sources are share-alike; CDLA / CC0 / public-domain are permissive. Keep them separable downstream.

Quickstart

Two ways in

Same tools, same contract, whichever door you pick. MCP and REST are two transports over one surface.

MCP

A Model Context Protocol server over streamable HTTP, stateless. Point an MCP-speaking agent at the endpoint and the earth_* tools appear.

{
  "mcpServers": {
    "solyzer-earth": {
      "url": "https://api.solyzer.ai/mcp"
    }
  }
}

REST

Plain HTTP for agents and code that do not speak MCP. No SDK, no signup, just a URL.

curl "https://api.solyzer.ai/earth/site-intel?\
  lat=-6.2088&lon=106.8456&radius=500"
Embedding

The globe on your page

The same Digital Twin Earth, live, in one tag. Embedding on your own site takes a free publishable key, and a keyless frame renders only on solyzer.ai and on localhost while you build, so swap pk_earth_live_YOUR_KEY for your own. The key names your traffic and locks the frame to the domains you register. Source credit renders inside the frame and cannot be turned off.

Script tag

<!-- Solyzer Digital Twin Earth -->
<div
  data-solyzer-earth
  data-lat="-6.2088"
  data-lon="106.8456"
  data-zoom="9"
  data-layers="quakes,disasters,cyclones"
  data-key="pk_earth_live_YOUR_KEY"
  data-height="520"
></div>
<script src="https://www.solyzer.ai/embed.js" async></script>

Plain iframe

<iframe
  src="https://www.solyzer.ai/embed/earth?lat=-6.2088&lon=106.8456&zoom=9&layers=quakes%2Cdisasters%2Ccyclones&k=pk_earth_live_YOUR_KEY"
  title="Solyzer Digital Twin Earth"
  width="100%"
  height="520"
  loading="lazy"
  referrerpolicy="strict-origin-when-cross-origin"
  allow="fullscreen"
  sandbox="allow-scripts allow-same-origin allow-popups"
  style="border:1px solid #26262a;border-radius:12px;display:block"
></iframe>
Endpoints

The full surface

11 tools. Each MCP tool maps 1:1 to the REST path shown next to it.

The live manifest is unreachable right now, so this reference is the built-in fallback and may lag.

Swipe the table sideways for the rest of the columns.

MethodTool / PathParamsReturns
GET/earth/site-intelup to 60s coldlat, lon, radius, categoryExplained, auditable site score: signed contributions, per-feature confidence, caveats, evidence geometry. score is null when too little is known.
GET/earth/site-scanbbox, categoryRanked grid cells with per-cell confidence and nearest-road distance.
GET/earth/events-Active GDACS events with alert levels, extent bounding boxes (not hazard outlines) and provenance.
GET/earth/event-briefup to 60s coldidExposure, lifelines, condition and observation joins for one event, every figure with confidence, caveats first.
GET/earth/event-changes-New, escalated, deescalated and resolved events, newest first, plus the change-history subsystem status.
GET/earth/placesbboxOverture places (CDLA-permissive) in the box, sampled.
GET/earth/infrastructurebboxCommunication and power structures (ODbL). Absence is unknown, not zero.
GET/earth/traffic-tilesw, s, e, nPrecomputed traffic-equilibrium fingerprints per street segment.
GET/earth/place-trendsbboxMap churn between the two newest archived snapshots: places appeared and disappeared by id, with named samples. Conflates real change with mapping activity, disclosed in-band.
POST/earth/read-storefrontimageId, imageUrlVLM read of a street photo's signage: {tag, description}.
GET/earth/agent-tools-This machine-readable manifest: the live contract and tool list.
GETearth_site_intel/earth/site-intelup to 60s cold
latLatitude of the point.
lonLongitude of the point.
radiusSearch radius in meters, 100 to 3000.
categoryOptional business category the score is computed for.

Returns: Explained, auditable site score: signed contributions, per-feature confidence, caveats, evidence geometry. score is null when too little is known.

GETearth_site_scan/earth/site-scan
bboxw,s,e,n bounding box, at most 0.05 degrees on a side.
categoryOptional business category for the ranking.

Returns: Ranked grid cells with per-cell confidence and nearest-road distance.

GETearth_hazard_events/earth/events

No parameters.

Returns: Active GDACS events with alert levels, extent bounding boxes (not hazard outlines) and provenance.

GETearth_event_brief/earth/event-briefup to 60s cold
idGDACS event id, for example FL1102983.

Returns: Exposure, lifelines, condition and observation joins for one event, every figure with confidence, caveats first.

GETearth_event_changes/earth/event-changes

No parameters.

Returns: New, escalated, deescalated and resolved events, newest first, plus the change-history subsystem status.

GETearth_places/earth/places
bboxw,s,e,n bounding box.

Returns: Overture places (CDLA-permissive) in the box, sampled.

GETearth_infrastructure/earth/infrastructure
bboxw,s,e,n bounding box.

Returns: Communication and power structures (ODbL). Absence is unknown, not zero.

GETearth_traffic_tiles/earth/traffic-tiles
wwest longitude
ssouth latitude
eeast longitude
nnorth latitude, box at most 0.6 degrees on a side

Returns: Precomputed traffic-equilibrium fingerprints per street segment.

POSTearth_read_storefront/earth/read-storefront
imageIdStreet photo id.
imageUrlStreet photo URL.

Returns: VLM read of a street photo's signage: {tag, description}.

GETearth_agent_tools/earth/agent-tools

No parameters.

Returns: This machine-readable manifest: the live contract and tool list.

The authoritative, always-current list lives at https://api.solyzer.ai/earth/agent-tools.

MCP

One server, no ceremony

The MCP server speaks streamable HTTP and is stateless: every call stands alone, nothing to session, nothing to hold open. It exposes exactly the tools in the reference above; the REST paths and the earth_* tools are the same surface.

Claude Desktop, Cursor, and friends

Add this to your client's MCP config and the tools appear. No auth step: keys are optional here too, and the fair-use limits above apply the same way.

{
  "mcpServers": {
    "solyzer-earth": {
      "url": "https://api.solyzer.ai/mcp"
    }
  }
}

Raw protocol

Or speak the protocol directly: POST https://api.solyzer.ai/mcp with a JSON-RPC body. Because the server is stateless you can load balance, retry and cache without ever thinking about a session.