Documentation
SatPortal exposes the same tool surface over MCP (streamable HTTP at
https://satportal.decredcommunity.org/mcp) and REST (https://satportal.decredcommunity.org/api/v1).
Machine-readable: openapi.json · llms.txt.
Tools
| Tool | Price | What it does |
|---|---|---|
about | free | Service manifest: prices, rails, sources. Call first. |
search_scenes | free | Sentinel-2 L2A scenes around a point, newest first. The funnel into the paid imagery tools. |
get_preview | 1 credit ($0.005) | 512px jpeg quick look from the newest acceptable scene. |
get_image | 2-4 credits ($0.01-$0.02): <=1024px 2, <=2048px 3, <=4096px 4, larger 4 | True-color rendering: png, jpeg or GeoTIFF, sized by size_km / max_px. |
process | 3-4 credits ($0.015-$0.02): <=1024px 3, <=2048px 4, <=4096px 4, larger 4 | Analysis products (op: ndvi), color-ramped png or GeoTIFF. |
get_ortho | 2-4 credits ($0.01-$0.02): <=1024px 2, <=2048px 3, <=4096px 4 | Aerial orthophotos (8-25 cm/px) from regional sources; coverage in about. |
register · topup · balance · rotate_key · job_status · feedback | free to call | Account lifecycle and service utilities. |
Tiered tools price on the requested bound (max_px, or size_km at 10 m/px) before execution. Synchronous ceiling: 2048px per side. Failed calls are refunded; per-call payments for failed calls are never settled.
Paying per call
Every paid tool answers an unpaid call with an x402 v2 payment_required payload whose
accepts array carries one entry per enabled rail (dcr402).
Pay the entry your stack speaks and retry the same call with the proof:
- MCP: the challenge is the error result's
structuredContent; retry with the payment payload under_meta["x402/payment"]. The receipt returns in_meta["x402/payment-response"]. - REST: the challenge rides the
Payment-Requiredresponse header (base64); retry withPayment-Signature. The receipt ridesPayment-Response.
USDC (x402 on Base)
Sign the EVM exact entry with your wallet — any x402 AutoPayment client handles this
unattended. The first settled payment auto-creates an account keyed by your wallet and returns an API key.
Decred over Lightning (dcr402)
The bip122: entry carries a BOLT11 invoice in extra.invoice. Pay it over the
Decred Lightning Network and retry with {"preimage": "...", "paymentHash": "..."} as the
payment payload, echoing the accepted entry. A running
dcr402-aware wallet does this for you — for example
dcrpulse's MCP agent tools: connect your agent to both SatPortal and dcrpulse, call a paid tool here,
hand the challenge to dcrpulse's x402_pay_challenge, and retry with the returned payload.
Credits
register ($0.001, proof of payment, not credited) creates your account and API key.
topup adds prepaid credits over any enabled rail; send
Authorization: Bearer sat_live_... and paid calls charge credits atomically, refunded on
failure. 1 credit = $0.005.
Results
Imagery tools return a signed result_url (valid 24h, no auth header needed) plus the
image inline as base64 when small. GeoTIFF products parse with any GIS stack.
REST examples
« free manifest »
curl https://satportal.decredcommunity.org/api/v1/about
« free scene search »
curl -X POST https://satportal.decredcommunity.org/api/v1/search_scenes \
-d '{"lat": 52.52, "lon": 13.405, "max_cloud": 40}'
« paid preview with credits »
curl -X POST https://satportal.decredcommunity.org/api/v1/tools/get_preview \
-H "Authorization: Bearer sat_live_..." \
-d '{"lat": 52.52, "lon": 13.405}'
« unpaid call: read the multi-rail challenge »
curl -si -X POST https://satportal.decredcommunity.org/api/v1/tools/get_preview \
-d '{"lat": 52.52, "lon": 13.405}' | grep -i payment-required