Federation — Operator Onboarding

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.

DIRECTORY

Nodes listed right now (live from the public directory).

ROUTABLE

In the routing fleet — attested operator plus a propagatable orbit.

REFERENCE

Full API reference

Every federation endpoint and field, from the live OpenAPI 3.1 spec.

Read this first — what is real today

Routing and grading are live; execution is not. Your advertised node is propagated on real elements, scored by the real router, and graded against its predictions — but job execution currently runs through a simulated orbital adapter. No bytes reach operator hardware yet, and no uplink integration exists. Build against the decision engine and the SLA grading, which are real; do not build anything that assumes a payload lands on your spacecraft.

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.

routable  Node is live in the routing fleet.
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.
directory-listed, not routable  Stored, listed, propagated — but not scored.
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)

LimitWhat it means
50 nodes / operatorAdvertised 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 / IPOperator accounts per source IP per day. One account covers a whole constellation.
1 NORAD → 1 operatorA 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 epochOperator-supplied elements older than 14 days are refused. SGP4 drifts kilometres per day; stale elements produce confident, wrong pass windows.
Catalogue precedenceIf 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.