GAIA — physical-world oracle gateway
Own a weather station or air-quality sensor? Sell your readings through your own Hub + GAIA.
For an existing MQTT station, see the single-station MQTT adapter.
GAIA is a physical-world oracle gateway that sells Ed25519-attested sensor readings from
virtual IoT devices as paid AIMarket v2 capabilities, and serves a Metis-envelope-compatible
/v1/verify so the hub's Pay-on-Verified escrow can settle them —
an honest reading gets the provider paid, a lying sensor refunds the buyer automatically.
It is the ecosystem's third oracle class: math oracles prove computations, Metis judges LLM output, GAIA grounds settlement in physics. The demo fleet is simulated (two co-located weather stations sharing one site truth, an air-quality node, an energy meter — models imitate BME280/SDS011/SCD30/Shelly-EM-class hardware), but every wire surface — manifest, invoke, receipts, provider signature, verify envelope, W3C WoT Thing Descriptions — is the real one.
📖 Deep-dive (monorepo):
docs/iot-physical-oracles.md🌍 Live devices:gaia/devices/live.py🎬 3D visualization:frontend/(cd frontend && npm i && npm run dev)
Quickstart
# Container
docker pull ghcr.io/alexar76/gaia:latest
docker run --rm -p 9320:9320 ghcr.io/alexar76/gaia:latest
# From source (satellite checkout vendors oracle-core)
pip install -e vendor/oracle-core -e ".[dev]" # or: pip install -e ../oracles/core -e ".[dev]"
python -m gaia.main # :9320
Poke it:
curl -s localhost:9320/.well-known/ai-market.json
curl -s localhost:9320/ai-market/v2/manifest
curl -s -X POST localhost:9320/ai-market/v2/invoke \
-H 'Content-Type: application/json' \
-d '{"capability_id": "gaia.weather.read@v1", "product_id": "gaia.gateway",
"input": {"device_id": "ws-01"}}'
Live devices — relay real public sensors
Set GAIA_ENABLE_LIVE=1 to register real public-API relays alongside the simulators.
Every relay uses the same Ed25519 attestation + plausibility path. Unreachable upstream
→ DeviceOffline → 503 / {ok:false} → no debit. Upstream hosts are allowlisted
(SSRF defence); invoke clients never supply a URL.
| Device id | Capability | Upstream | Key? |
|---|---|---|---|
nws-01 |
gaia.weather.read@v1 |
NOAA/NWS api.weather.gov |
no |
om-wx-01 |
gaia.weather.read@v1 |
Open-Meteo weather | no |
osm-01 |
gaia.air.read@v1 |
openSenseMap | no |
om-aq-01 |
gaia.air.read@v1 |
Open-Meteo air quality | no |
sta-01 |
gaia.air.read@v1 |
OGC SensorThings (Fraunhofer) | no |
openaq-01 |
gaia.air.read@v1 |
OpenAQ v3 | yes — free key from explore.openaq.org → GAIA_OPENAQ_API_KEY |
uk-grid-01 |
gaia.grid.read@v1 |
UK Carbon Intensity | no |
usgs-quake-01 |
gaia.quake.read@v1 |
USGS GeoJSON feed | no |
noaa-tide-01 |
gaia.tide.read@v1 |
NOAA CO-OPS tides | no |
firms-fire-01 |
gaia.fire.read@v1 |
NASA FIRMS VIIRS (cite NASA) | no |
safecast-01 |
gaia.radiation.read@v1 |
Safecast (CC0) | no |
cybernews-jam-01 |
gaia.jamming.read@v1 |
CyberNews GNSS (CC BY 4.0) | no |
feeder-adsb-01 |
gaia.adsb.read@v1 |
Own dump1090 ingest | GAIA_FEEDER_* |
feeder-ais-01 |
gaia.ais.read@v1 |
Own AIS ingest | GAIA_FEEDER_* |
Full operator notes (5 languages): docs/LIVE-RELAYS.md.
Add a sensor / pin (GAIA → ATLAS): docs/add-gaia-atlas-sensor.md (EN · RU · ES · FR · ZH).
curl -s -X POST https://iot.modelmarket.dev/ai-market/v2/invoke \
-H 'Content-Type: application/json' \
-d '{"capability_id":"gaia.grid.read@v1","product_id":"gaia.gateway",
"input":{"device_id":"uk-grid-01"}}'
Beyond reading — places, power prices, imagery, device control
| Capability | Price | What it does | Guide |
|---|---|---|---|
gaia.place.resolve@v1 |
free | Any populated place by name ("Kraków", "Paris, Texas", "東京") → one place, or the candidates when the name is ambiguous; says which GAIA reads cover it (GeoNames, CC BY 4.0) | Places |
gaia.power.price.read@v1 |
$0.001 | Day-ahead electricity price of a European bidding zone, now and over the next 24 h (SMARD, CC BY 4.0; 15 zones) | Power prices |
gaia.power.window@v1 |
$0.002 | When is power cheapest for N hours — with the prices used and their SHA-256 (an 11 kW EV charge was 38 % cheaper at 12:30 than at 08:40 on 2026-10-16) | Power prices |
gaia.imagery.read@v1 |
$0.005 | Latest cloud-free Sentinel-2 view of any land point: NDVI, NDWI, NBR, NDMI | Imagery |
gaia.actuator.list@v1 |
free | The operator's switchable devices and their limits | Device control |
gaia.actuate@v1 |
$0.05 | Switch the public demo plug on for N seconds or off — paid only for the effect its meter measures (Pay-on-Verified). A real plug answers only its owner | Device control |
gaia.owner.command@v1 |
free | The owner (or a delegate) switches their own plug, signed with their wallet (EIP-712) — no hub, no payment | Device control |
gaia.owner.consumption@v1 |
free | The owner reads their plug's hourly or daily consumption, signed by the plug's key | Device control |
gaia.consumption.read@v1 |
$0.01 | A plug's consumption statistics, only where its owner put them on sale, in whole finished hours or days | Device control |
License
MIT — see LICENSE.
Metadata
Release files for aimarket-gaia-gateway 0.2.2
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| aimarket_gaia_gateway-0.2.2.tar.gz | 489.0 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| aimarket_gaia_gateway-0.2.2-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 882.2 kB
Release files / aimarket_gaia_gateway-0.2.2.tar.gz
| Download URL | aimarket_gaia_gateway-0.2.2.tar.gz |
|---|---|
| Size | 489.0 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
9633f2d326726257627723651e63908e8803c03eca0523c1290b63a5164753ee
|
|
BLAKE2b-256 checksum How to use checksums |
34c347b943c443f21140c5fad7dc97a4f051c4741aa5c983be27de4a4443d3ab
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Release files / aimarket_gaia_gateway-0.2.2-py3-none-any.whl
| Download URL | aimarket_gaia_gateway-0.2.2-py3-none-any.whl |
|---|---|
| Size | 393.1 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
e649507c8e087eb887a3ed2225b0bafcf12bc7e12c831f33289bb11708b03a8c
|
|
BLAKE2b-256 checksum How to use checksums |
1feab61c293ce6dbb555db32f74ee335adb3e0e73a4d221fabb076f83c9f354e
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.9.6
|
Security for aimarket-gaia-gateway 0.2.2
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.