← Earth Compute API v1

Earth Compute API

Compute prices across 38 providers, 6,607 datacenter facilities, submarine cables, terrestrial fibre and power infrastructure — as a queryable API rather than a download. Every response says what licence it carries and how much of your allowance it used.

Closed · access by arrangement

This API is not open

Every endpoint below requires access. There is no free or anonymous tier: unauthenticated requests are refused with 401. We would rather issue access deliberately than run an open endpoint while the billing and abuse controls are still being built.

How to get access today:

  1. Email tech@ownx.co from your work address.
  2. Tell us what you are building, roughly what volume you expect, and which of the data below you need — prices, facilities, infrastructure, or all of it.
  3. We issue credentials and agree limits with you directly. Early access is free while the billing rails are being built; you will be told before that changes.

Requests without an issued key, from anywhere other than our own site, return 401. The documentation below is published so you can evaluate whether the data fits before asking — not as an invitation to collect it.

Request access →
Quick startAccess & pricingMetering LicensingEndpointsErrors Agents & MCP

Quick start

Requests carry an issued key. Without one the API answers 401.

curl -H "X-API-Key: $EC_KEY" \
  "https://api.deploy.openmesh.cloud/api/v1/offers?cat=gpu&sort=cheap&limit=5"

Every response carries the licence and your remaining allowance in headers:

x-data-licence: proprietary; (c) OwnX Labs; attribution required
x-ratelimit-remaining: 1847
x-ratelimit-class: owned

Access & pricing

Four tiers, because a coding agent and a procurement department cannot buy the same way. None of them is anonymous today.

TierWho it is forIdentityPayment
EvaluationAssessing fit before committingIssued key, time-limited—
MeteredAgents and machine trafficKey, or payment at time of requestPer request
KeyedCompanies, dashboards, integrationsAccount + API keyMonthly, invoiced
LicensedResellers, research, bulkContractNegotiated
Status. Nothing here is self-service yet. The metering, licence separation and quota accounting all run in production, but no payment rail is connected — so rather than take money through a half-finished rail, or leave the endpoints open while abuse controls are unfinished, access is issued by hand: tech@ownx.co.

How metering works

You are charged for rows returned, not requests made. A query that matches three offers should not cost what one returning five hundred does, and pricing per request would reward exactly the wide, indiscriminate queries we would rather not serve.

ClassWhat it coversFree allowance
ownedOur compiled price observations — offers, instruments, unit cost2,000 rows/hour
openOpenly-licensed records — facilities, cables, power, fibre200,000 rows/hour

The split is deliberate. PeeringDB and OpenStreetMap data is open, and rate-limiting it as though it were ours would be both unfriendly and dishonest. What is scarce is the price corpus we build and maintain, so that is what is metered tightly.

Licensing and attribution

DataSourceLicence
Prices, instruments, unit costOur own observationsProprietary © OwnX Labs — attribution required
Facilities, networks, exchangesPeeringDBCC BY 4.0
AI model catalogue and price laddersVendor APIs, OpenRouter, Epoch AIProprietary compilation; sources cited per row
Buildings, power, terrestrial fibreOpenStreetMap contributorsODbL 1.0
Global imagerySentinel-2 cloudless, EOX IT ServicesCC BY 4.0
US 0.3 m imageryNAIP / USGSPublic domain
Why the endpoints are separated by source. OpenStreetMap is ODbL, which carries share-alike over a derived database. Returning ODbL-derived records in the same response as our proprietary price data could put that obligation over the whole response. Keeping them on separate endpoints — /layers/* versus /offers — keeps each licence attached to the data it actually governs.

Endpoints

Base URL https://api.deploy.openmesh.cloud/api/v1. All endpoints are GET and return JSON.

Compute offers

EndpointReturnsKey parameters
GET/offersPriced offers, one page cat (vgpu·gpu·cpu·ram·storage), tier, provider, location, gpu, min_ram, min_cores, sort (cheap·dear·ram·cores·new·provider), limit (max 500), cursor
GET/facetsOffer counts per tier—
GET/dimensionsProvider, region and GPU lists for building filters—
GET/compare/bootstrapCategory counts, regions, providers, GPU histogram, totalscat
Pagination is by cursor, never by page number. Each response carries next; pass it back as cursor. There is no page=9000, so the corpus cannot be walked by incrementing an integer — and deep OFFSET would degrade the database for everyone.
{
  "rows": [ … ],
  "count": 25,
  "next": "vastai|1xrtx306012gb",
  "meter": { "class": "owned", "used": 25, "remaining": 1975 }
}

Price instruments

EndpointReturns
GET/instrumentsAll 10 indices with point counts
GET/instruments/:metricMonthly series — median, low/high band, segment and observation counts
GET/metrics/treeMetric taxonomy (5 categories, 10 metrics)
GET/unitcostUnit cost by year, with as_of_year and stale_years
GET/fxCurrency rates used for USD normalisation, with as_of

Metrics: cpu, ram, storage, gpu, tflop, llm, power, cloudram, hwssd, egress.

Series are aggregated, and the aggregation is visible. Prices are stored per (metric, provider, region, month) — GPU alone spans 89 segments in a single month, from $0.020 to $1,134. Returning those raw would be several different answers to one question, so each point is a median with the low/high band and the segment count alongside it. A month built from three segments should not look as solid as one built from eighty-nine.

AI models

EndpointReturnsKey parameters
GET/modelsModel catalogue — GPU rentals, LLM, image, embedding, audio, OpenRouter dataset, category, brand, q, limit, cursor
GET/models/facetsCounts per dataset and category, and how many carry a price—
GET/models/:idOne model with its host ladder and any published price history—
Units are never reconciled across datasets, deliberately. Video is priced per second generated, transcription per hour of audio, GPU rental per GPU-hour, text per million tokens. Every row carries its own unit; converting them to a common basis would invent a number nobody is charged. Models the vendor lists without publishing a price are kept with NULL prices rather than dropped — "this exists and nobody publishes its cost" is a fact worth returning.

Infrastructure

EndpointReturnsKey parameters
GET/facility/:idOne facility, its networks and nearby sites—
GET/layers/facilitiesDatacenters in a boxbbox=w,s,e,n, limit (max 2000)
GET/layers/powerPower stations, with fuel and capacitybbox, limit
GET/layers/landingsCable landing pointsbbox, limit
GET/layers/cablesSubmarine cable routes—
GET/layers/terrestrialTerrestrial fibre routesbbox, limit
GET/ixpsInternet exchange points — 1,326 across 171 countriescountry, q, limit, cursor
/layers/* caps at 2,000 rows per call. Stated because it is easy to miss: a single unbounded request returns a fraction of the estate and looks complete. Walk longitude bands to enumerate everything — twelve 30° bands covers all 6,607 facilities.

Errors and limits

StatusMeaningWhat to do
400Missing or malformed parameter (e.g. bbox absent)Fix the request; the body names the field
404Unknown facility or instrumentCheck the identifier
401No key, and not our own siteRequest access — there is no anonymous tier
429Hourly row allowance exhaustedWait for Retry-After, or move to a paid tier
402Planned. Payment required to continueThe body will carry payment details; retry once settled

Agents and MCP

Most machine traffic will not read this page, so the API is built to be usable without it: parameters are guessable, errors name the field at fault, and every response reports its own metering state so a client can pace itself rather than discovering a limit by hitting it.

MCP is planned but not yet available. When it ships it will front these same endpoints with the same metering and licence headers — an MCP server is exactly as open as the API behind it, so it will not be published before a payment path exists.

On scraping. There is no bulk export and there will not be one. The endpoints are closed by default, cursor-paginated so the corpus cannot be walked by page number, and metered by rows returned. If you need the whole dataset that is the Licensed tier — tech@ownx.co — which is cheaper than extracting it a page at a time, and comes with terms, support and updates.