Put your capacity in the routing layer
Register once, publish a capability advertisement per compute node, and OrbitRoute scores your nodes against every customer job using real orbital mechanics — SGP4 propagation, eclipse-aware power, weather-gated ground-station passes, and your own advertised price. Listing is free. No contract, no sales call, no fee to appear in the directory.
Nodes listed right now (live from the public directory).
In the routing fleet — attested operator plus a propagatable orbit.
Full API reference
Every federation endpoint and field, from the live OpenAPI 3.1 spec.
Read this first — what is real today
Everything OrbitRoute publishes about your capacity is labelled: federated nodes carry
capacity_class: federated in every routing decision that touches them, and verification in the public directory. Nothing on this platform is labelled as contracted capacity, because nothing is under contract yet — including ours.
Onboarding is two calls
1 — Register (no credential needed)
# Your or_op_ key is returned exactly once. Only a hash is stored.
curl -X POST https://www.orbitroute.ai/api/v1/federation/operators \
-H "Content-Type: application/json" \
-d '{
"name": "Acme Orbital Compute",
"contact_email": "ops@acme-orbital.example",
"jurisdiction": "US"
}'
The 201 carries your operator_id, the one-time operator_key, your verification state, and the exact next call. Set jurisdiction accurately — sovereign-cloud buyers constrain jobs by it.
2 — Advertise a node (this is the exact next curl)
# One capability advertisement per compute node. Re-send it whenever power, # pricing, thermal margin, or ISL topology changes — advertisements are upserts. curl -X POST https://www.orbitroute.ai/api/v1/federation/nodes \ -H "Content-Type: application/json" \ -H "X-Operator-Key: $ORBITROUTE_OPERATOR_KEY" \ -d '{ "node_id": "acme-tile-1", "name": "Acme Tile 1", "norad_id": 12345, "gpu_type": "H100", "gpu_count": 8, "power_budget_w": 12000, "battery_fraction": 0.5, "thermal_margin_c": 14.0, "storage_gb": 2048, "supported_runtimes": ["docker"], "isl_neighbors": ["acme-tile-2"], "jurisdiction": "US", "price_usd_per_gpu_hr": 1.99 }'
No norad_id? Send tle_line1 and tle_line2 instead — the NORAD id is recovered from line 2. Full field reference: CapabilityAdvertisement in the API reference.
What happens next — two honest outcomes
The 201 tells you exactly which one you got, and why.
You have a propagatable orbit and OrbitRoute has attested that you operate the spacecraft. Your node is scored against every incoming job like any other asset in the fleet, at your advertised price.
Two things can cause this, and the response names which:
a. No propagatable ephemeris. Neither a resolvable
norad_id nor usable TLE lines, so there is no orbit to model. Fix: re-advertise with norad_id, or with tle_line1/tle_line2 whose epoch is less than 14 days old. The router never scores a node it cannot physically model — a pass window computed from elements we do not have would be fiction.
b. The operator is not attested yet. Registration is anonymous and self-serve, which means a registration on its own proves nothing about who controls a spacecraft. Until a human at OrbitRoute has attested your claim, your node is listed with its live position and illumination state but is not in the routing fleet, so no routing decision can cite it. Fix: nothing technical — email hello@orbitroute.ai from your operator domain. That gate is also what stops anyone else advertising nodes against your spacecraft under your company name.
Why we do it this way: OrbitRoute's own validation fleet is labelled demo capacity because it is not contracted hardware. If an unattested self-advertisement could enter the fleet as federated, a stranger's claim would outrank hardware we actually model — so the label would be worth nothing to a buyer, and nothing to you. Attestation is what keeps federated meaning "real operator hardware".
Limits (they exist because registration is anonymous)
| Limit | What it means |
|---|---|
| 50 nodes / operator | Advertised nodes per operator account. Re-advertising an existing node_id is an upsert and never counts against it. Larger constellation? Email us — it is one env setting. |
| 10 registrations / day / IP | Operator accounts per source IP per day. One account covers a whole constellation. |
| 1 NORAD → 1 operator | A NORAD id already claimed by another operator's node is refused with 409. If someone claimed your spacecraft, email us — an attested claim overrides an unattested one. |
| 14-day TLE epoch | Operator-supplied elements older than 14 days are refused. SGP4 drifts kilometres per day; stale elements produce confident, wrong pass windows. |
| Catalogue precedence | If your NORAD id is in the public CelesTrak catalogue, we propagate the catalogue's elements and ignore supplied lines for that object. Your node stays routable — on authoritative elements. This is also why no operator TLE can rewrite another spacecraft's orbit. |
Confirm your listing
# Public directory — no auth. Includes live position, illumination, verification. curl https://www.orbitroute.ai/api/v1/federation/nodes # Just your nodes curl https://www.orbitroute.ai/api/v1/federation/nodes/mine \ -H "X-Operator-Key: $ORBITROUTE_OPERATOR_KEY"
attestation payloads are never exposed publicly — the directory shows only has_attestation. Advertised nodes survive platform restarts; you do not need to re-advertise after a deploy.
Prefer an SDK?
pip install orbitroute # Python (sync + async)
npm install orbitroute # TypeScript / JavaScript (zero-dep)
from orbitroute import OrbitRoute
reg = OrbitRoute().register_operator(name="Acme Orbital", contact_email="ops@acme.example")
op = OrbitRoute(operator_key=reg["operator_key"])
op.advertise_node("acme-tile-1", norad_id=12345, gpu_count=8, price_usd_per_gpu_hr=1.99)
print(op.my_nodes())
Ground-segment partners
Ground stations are not self-serve. OrbitRoute models 37 sites across all 7 continents (mirroring the KSAT, SSC, AWS Ground Station, ATLAS, and Leaf Space networks), every one labelled source: modeled in every API response — no ground-segment agreement is signed. Pass-window scheduling already runs against your sites' real geometry; if you operate ground infrastructure and want it contracted and routed for real, email below.
Contact
Attestation, uplink/execution integration, ground-segment contracts: hello@orbitroute.ai. Interactive API explorer: /swagger. Everything above is in the machine-readable spec.