BXP v2.0 — stable specification

The open data standard for
atmospheric exposure

One interoperable protocol and API that connects sensors, applications, researchers, and institutions — so exposure data moves freely between them. Apache 2.0, no gatekeepers.

No account required · Conformance suite included · Python & TypeScript SDKs

bxp-node / readings / live
Node throughput
Readings ingested
● live
Accepted
0
▲ 100% of 24h
Rejected
0
1.3% of input
p95 latency
0
edge ingest
Integrity
0
CRC32 verified
Accepted Rejected (QC) Synthetic demo data — run the reference node for live values
Built on open standards
Apache 2.0 WHO AQG 2021 aligned HL7 FHIR R4 mapped OGC SensorThings compatible Zenodo DOI archived
Protocol

One pipeline. Every exposure source.

A phone sensor, a fixed IoT node, and a reference-grade monitor all produce the same BXP record. Five stages, fully specified, byte-for-byte identical across implementations.

01

Locate

Coordinates resolved to a geohash cell with a documented precision floor.

02

Detect

Source tiered — phone, community, or reference instrument — and classified as native, imported, community, research, or simulated.

03

Interpret

Units normalised, quality control applied, corrections recorded separately from raw values.

04

Protect

Privacy enforced: hashed identifiers, coarsened location, k-anonymity for aggregates.

05

Report

Stored, queryable, and replicable across nodes with an identical response schema.

JSON representation

.bxp.json
// human-readable, diffable, spec-referenced
{
  "bxpVersion": "2.0",
  "source": "native",
  "location": { "lat": 5.6037, "lon": -0.1870 },
  "agents": [
    { "agentId": "PM2_5", "value": 47.2, "unit": "ug/m3" },
    { "agentId": "NO2",   "value": 18.3, "unit": "ug/m3" }
  ],
  "bxpHri": 61.2
}

Binary representation

.bxp
// 32-byte header, CRC32, optional gzip
0x00  magic        BXP\0
0x04  version      2.0
0x06  fileType     READING
0x08  flags        COMPRESSED | DRAFT
0x0C  timestamp    µs since epoch
0x10  payloadLen   4096
0x14  headerCRC32  ✓ verified
0x18  payloadCRC32 ✓ verified
0x1C  payload      gzip(JSON)
Platform

Run a node. Query any node.

The reference node ships with a REST API, a dashboard, a map, a validator, and federation endpoints. Deploy it yourself, or point a client at someone else's — the schema does not change.

0
Atmospheric agents
particulates, gases, VOCs, biological, heavy metals, environmental
0
Conformance vectors
golden files, byte-for-byte verified in Python and TypeScript
0
Passing tests
reference server, SDKs, and integrations
0
Reference SDKs
Python and TypeScript, proven interoperable
GET /bxp/v2/nearby?lat=5.60&lon=-0.18&radiusKm=25
// 200 OK — relevance-ranked observations near a point
{
  "readings": [
    {
      "readingId": "01JBXK4M9Q",
      "source": "native",
      "distanceKm": 1.8,
      "ageSeconds": 312,
      "quality": { "flag": "UNVALIDATED", "qcMethod": "range_check" },
      "agents": [
        { "agentId": "PM2_5", "value": 47.2, "unit": "ug/m3" },
        { "agentId": "NO2",   "value": 18.3, "unit": "ug/m3" }
      ],
      "bxpHri": 61.2,
      "bxpHriLevel": "HIGH"
    }
  ],
  "nextCursor": "eyJpbmcifSwibiI6MX0"
}

Experimental BXP-HRI is a composite 0–100 index weighted by WHO disability-adjusted life-year burden data. It is not clinically or epidemiologically validated and must not be used for medical decisions. Methodology is published in full so it can be reviewed and challenged.

Why BXP

The barrier was never hardware.

Sensors, agencies, and research networks all measure the same atmosphere and all speak incompatible formats. BXP removes the translation layer that every project otherwise rebuilds.

CapabilityAd-hoc CSVVendor APIBXP
Open specification, no vendor lock-inNoNoYes — Apache 2.0
Byte-for-byte conformance testsNoVendor-only17 golden vectors
Human-readable and binary formsCSV onlyUsually JSON only.bxp.json + .bxp
Integrity verification built inNoVariesCRC32 header + payload
Privacy floor enforced by the formatNoNoHashed IDs, k-anonymity
Source provenance carried with dataNoPartial5-class taxonomy
Federated, no central owner requiredNoNoPull-based /sync
Works on a $12 microcontrollerNoNo32-byte fixed header
Developers

Implement BXP without talking to us.

The specification, the golden vectors, and both reference SDKs are public. If your implementation passes the conformance suite, it is BXP 2.0 compliant — that is the whole test.

# pip install bxp-sdk
from bxp_sdk import write_bxp, read_bxp, calculate_risk, BXPClient

# composite risk from raw sensor values
risk = calculate_risk(pm25=67.0, no2=31.0, duration="24h", population="sensitive")
print(risk["score"], risk["level"])   # 89.6 VERY_HIGH

# write, verify, submit
write_bxp("accra.bxp.json", {"latitude": 5.6037, "longitude": -0.1870, "pm25": 47.2, "source": "native"})
print(read_bxp("accra.bxp.json")["_integrityOk"])              # True

BXPClient("http://localhost:5000").submit(latitude=5.6037, longitude=-0.1870, pm25=47.2)
// npm install @bxp/sdk
import { writeBxp, readBxp, calculateRisk } from '@bxp/sdk';

const risk = calculateRisk({ pm25: 67.0, no2: 31.0, duration: '24h', population: 'sensitive' });
console.log(risk.score, risk.level);   // 89.6 'VERY_HIGH'

const buf = encodeBxpBinary(record, { compress: true });
console.log(buf.length);                // 32-byte header + gzipped payload
const back = decodeBxpBinary(buf, { verify: true });
console.log(back.crc32Valid);            // true
# submit a reading
curl -X POST http://localhost:5000/bxp/v2/readings \
  -H "Content-Type: application/json" \
  -d '{"readings":[{"latitude":5.6037,"longitude":-0.1870,
       "source":"native",
       "agents":[{"agentId":"PM2_5","value":47.2,"unit":"ug/m3"}]}]}'

# latest observation for a geohash cell
curl http://localhost:5000/bxp/v2/locations/s1v0g/latest

# node health
curl http://localhost:5000/bxp/v2/health
# generate, validate, and submit without writing code
python cli/bxp_cli.py generate --pm25 47.2 --no2 18.3 --lat 5.6037 --lon -0.1870
python cli/bxp_cli.py validate reading.bxp.json
python cli/bxp_cli.py hri --pm25 67.0 --no2 31.0 --duration 24h --population sensitive
python cli/bxp_cli.py submit --server http://localhost:5000 --file reading.bxp.json
python cli/bxp_cli.py map ./readings/ --output map.html
1

Conformance-first, not trust-based

Any implementation that passes the 17 golden vectors is compliant. No certification authority required.

2

Versioned wire format

MAJOR changes get 18 months advance notice and dual-version support. MINOR additions are ignored-and-preserved by design.

3

Embeddable

A 32-byte fixed header and a flat JSON payload keep the codec viable on microcontrollers, not just servers.

4

Honest about limits

Unspecified areas are marked unspecified. Unimplemented features raise rather than silently no-op.

Install it

pip install bxp-sdk

# TypeScript: build from the repository
git clone https://github.com/bxpprotocol/bxp-spec
cd bxp-spec/sdk/typescript && npm install && npm run build

Try it without installing anything

The validator runs entirely in your browser — paste a BXP record, get schema validation, integrity verification, and an HRI breakdown with no server round-trip.

Open the validator Read the spec
Enterprise & Government

Deploy it on your own infrastructure.

No node has to phone home. Run a BXP node behind your own firewall, federate with peers on demand, and keep every reading under your jurisdiction's data law.

◫

Government & public health

Aggregate low-cost sensor data into a national picture without replacing existing reference monitoring.

  • Standards-based ingest from any vendor
  • Privacy floor satisfies k-anonymity requirements
  • FHIR R4 mapping for health system integration
  • Data residency: node runs inside your network
◈

Sensor manufacturers

Ship a BXP-compliant device and your data is immediately usable by every BXP node in the network.

  • No need to build a bespoke API
  • Provenance chain travels with every reading
  • Calibration and correction records preserved
  • Reaches the ecosystem your customers already query
◎

Research institutions

Query across nodes with one schema instead of writing a parser per data source.

  • DOI-archived spec for citation and reproducibility
  • Byte-stable data for longitudinal analysis
  • Source taxonomy separates measured from modelled
  • Federation pulls only what you ask for
▣

Application developers

Build dashboards, alerts, and health advisories on a stable contract that will not break under you.

  • Known MAJOR changes get 18 months of notice
  • Unknown fields preserved, never dropped
  • Python and TypeScript SDKs in the box
  • REST, binary, and CSV response formats
◇

Enterprises & insurers

Quantify environmental exposure across sites, supply chains, and portfolios with a documented method.

  • Consistent units and normalisation rules
  • Audit trail for every derived figure
  • Experimental HRI clearly labelled as such
  • Deterministic records for reproducible reporting
⬡

Communities & NGOs

Run a node for a neighbourhood, a city, or a campaign — and keep the data under community control.

  • Single command to deploy with Docker
  • Cryptographic deletion for sensitive records
  • Geohash precision floors protect reporters
  • Federate upward without surrendering ownership
Ecosystem

Everything that ships with the protocol.

A complete working stack in the repository — not a roadmap. Clone it, run it, extend it.

Trust

Open by construction, not by promise.

Governance, security posture, and known limitations are written down in the repository — including the parts that are not finished yet.

◈ Apache 2.0 license

No royalties, no restrictions, no gatekeepers. Anyone can use, modify, or redistribute. Read the license.

◉ Published governance

Who decides specification changes, through what process, and what is aspirational versus real. Read GOVERNANCE.md.

◐ Documented security posture

Attack surfaces, disclosure timeline, secure deployment checklist, and a full list of known limitations stated as limitations. Read SECURITY.md.

◑ Archived and citable

Spec and reference implementation each carry a permanent Zenodo DOI, so published research can cite a fixed version. Spec DOI · Implementation DOI.

◇ Privacy by specification

SHA-256 hashed identifiers, geohash precision floors, k-anonymity for aggregates, and cryptographic deletion — enforced in the reference implementation, not promised in a policy document.

⬡ Federated, not centralised

Pull-based replication with cursor pagination and deletion tombstones. No node owns the network, and no operator has to trust a single point of failure.

Start building on BXP today.

Clone the reference node, run the conformance suite, or wire up the SDK in an afternoon. Nothing here requires permission, a contract, or a conversation with us.

Questions or an implementation to share? Open a discussion or email bxpprotocol@proton.me.