Your accounts. Your imagery. Our map. New

First-class commercial EO catalog search, ordering, and tasking from inside the app — against accounts you hold at Planet, Sentinel Hub, Skywatch (EarthCache), and SkyFi. The app acts as a thin authenticated client: it never handles billing, never takes a margin, and never sees a payment flow. Every call is proxied under your own credential, and delivered imagery lands directly on the map.

PlanetSentinel HubSkywatch EarthCacheSkyFi Archive + taskingAOI catalog searchLive tile streamDPAPI-encrypted keys
Unified catalog search

One search, four provider dialects

Draw an AOI rectangle on the map — or just use the current view — set date range, max cloud cover, and constellation filters, and hit Search. The server translates your query into each provider's native dialect and returns one unified scene list, whichever catalog it came from.

  • AOI from the map — a rectangle sketch or the current extent, converted from Web Mercator to WGS84 and posted straight into the order browser.
  • Filters that matter — date range, a max-cloud-cover slider, and a free-text constellation/source list (e.g. PSScene, sentinel-2-l2a).
  • Native dialects, hidden — Planet's filter DSL, Sentinel Hub's STAC + cql2-json, Skywatch's offering search, SkyFi's catalog — all behind one POST /api/eo/search.
  • Thumbnails without leaks — previews are proxied through /api/eo/proxy, so the browser never fights CORS and never touches the provider credential.
/api/eo/*
// one REST surface, four providers behind it
POST /api/eo/search                     → unified EoScene[]
POST /api/eo/orders                     → archive / tasking
GET  /api/eo/orders/{provider}/{id}     → live status
GET  /api/eo/orders/{provider}/{id}/deliveries
GET  /api/eo/proxy?url=…&profileId=…    → auth stays server-side
GET  /api/eo/sentinelhub/wms-url        → live stream, no order
GET  /api/eo/sentinelhub/xyz-template

● polling orders every 15 s · your key, your account
Providers · Phase 1

Four catalogs, one contract

Each provider is wired behind a single unified DTO set, so the UI has one contract regardless of source — while provider-native payloads ride along verbatim for order calls that need them.

🪐

Planet

API-key auth against two surfaces: the Data API's quick-search for the catalog and the Orders API for archive orders with product bundles and AOI clipping. Delivery arrives as signed COG URLs. Planet's Tasking API (subscription-model new capture) is a Phase-2 add.

🛰️

Sentinel Hub

OAuth2 client-credentials with a cached, auto-refreshed bearer token. STAC + cql2-json catalog search, plus two delivery modes: a synchronous Process API render, or a live OGC tile stream (WMS / WMTS / XYZ) with no order at all.

🌍

Skywatch (EarthCache)

API-key auth into EarthCache's unified archive/tasking endpoint — search product offerings, then create a pipeline to order. Credit-based: the account Test probe surfaces your remaining credit balance where the API exposes it.

📡

SkyFi

API-key auth with distinct archive and tasking order endpoints. Tasking-focused, with 300+ sources behind one storefront. Vantor imagery requires a per-account EULA on the SkyFi side.

Order → deliver → map

From scene card to map layer

Click Order on a scene card, name the order, optionally clip to your AOI, and confirm. The order lands in the My Orders panel with live status polling every 15 seconds while anything is queued or running — and when it completes, one click adds the delivered imagery to the map.

  • Archive and tasking — one order endpoint dispatches to Planet's Orders API, Skywatch pipelines, or SkyFi's archive/tasking endpoints; Sentinel Hub renders through its synchronous Process API in Phase 1.
  • + Map on completion — delivered COG/GeoTIFF assets load as an Imagery Tile Layer through the same ingestion path local COGs use.
  • Auth never reaches the browser — downloads and thumbnails stream through the server-side proxy, which attaches the provider-correct credential and refuses open redirects.
  • Providers stay the system of record — the in-memory order registry re-queries provider APIs on demand, so status is never stale-by-design.
sentinel hub · live stream
// streaming-first: tiles without a purchase
mode      WMS / WMTS / XYZ from your SH collections
action    🖼 Add WMS layer · 🧩 Add XYZ layer
auth      OAuth bearer via ?prefilter=bearer-<token>
cost      no order · no download
          only your SH subscription's processing units

GET /api/eo/sentinelhub/wms-url?layer=…
GET /api/eo/sentinelhub/xyz-template?layer=…

● live S-2 layer on the map · zero purchase
Bring your own account

We never touch your money

No reseller markup, no imagery credits sold, no payment flow anywhere in the app. You keep your provider relationships, your pricing, and your quotas — we keep the secrets encrypted and the workflow on the map.

🔐

DPAPI-encrypted credentials

API keys and OAuth client secrets are encrypted at rest with Windows DPAPI (CurrentUser scope). Only the same Windows account on the same machine can decrypt them, and the provider-list API never returns a secret.

🧾

Your account, your terms

Every catalog search, order, and download runs under your own provider credential. Quota and credit visibility is surfaced where the provider API exposes it — notably Skywatch credits.

🧪

Tested adapters

The provider adapters ship with a 73-assertion test suite covering DTO round-trips and per-provider request translation — no live network required to verify the wiring.

Phase-1 scope, stated plainly: Planet tasking (subscription model), the Sentinel Hub Batch Process API, and provider webhooks are intentional Phase-2 follow-ups; pending orders are polled rather than pushed, and the order cache rebuilds from provider APIs on restart.

Task the bird from the map.

Connect the provider accounts you already pay for, draw an AOI, and go from catalog search to delivered imagery on the map — without the app ever standing between you and your provider.