Open Forest Watch
5 Events · 4,953 ha
Pipeline offline
OFW API · v1

API Reference

The Open Forest Watch API is freely accessible for researchers, NGOs, and government bodies. Commercial and compliance use requires an API key. All responses are JSON. The base URL is https://forestwatch.northflow.no.

Authentication

Public endpoints (GET /api/reports/*) do not require authentication. The alert subscription endpoint and bulk download require an API key passed in the Authorization: Bearer <key> header.

curl https://forestwatch.northflow.no/api/reports \
  -H "Authorization: Bearer ofw_live_xxxxxxxxxxxx"

Rate Limits

Tier
Requests / hour
Bulk access
Use case
Anonymous
60
No
Public browsing
NGO / Academic
2,000
Yes (CSV export)
Research and monitoring
Commercial
10,000
Yes
Compliance and due diligence

Endpoints

GET/api/reports

List all published reports. Supports filtering and pagination.

PARAMETERS
causestringFilter by cause type: fire | logging | agriculture | mining | infrastructure
country_codestringISO 3166-1 alpha-2 country code, e.g. BR, CD, ID
flagstringFilter by regulatory flag: EUDR | CBAM | REDD+ | CITES | national_law | ILO_169
min_confidenceintegerMinimum overall confidence score (0–100)
from_datedateFilter events detected on or after this date (YYYY-MM-DD)
to_datedateFilter events detected on or before this date (YYYY-MM-DD)
limitintegerResults per page (default: 50, max: 200)
offsetintegerPagination offset (default: 0)
EXAMPLE REQUEST
GET /api/reports?cause=agriculture&flag=EUDR&min_confidence=70&limit=20
EXAMPLE RESPONSE
{
  "total": 847,
  "offset": 0,
  "limit": 20,
  "reports": [
    {
      "event_id": "OFW-2024-AMZ-001847",
      "detection_date": "2024-11-12",
      "location": { "country": "Brazil", "lat": -8.412, "lon": -55.283, ... },
      "cause_attribution": { "primary": "agriculture", "confidence": 81, ... },
      "confidence_score": 73,
      "regulatory_flags": ["EUDR", "REDD+"],
      "area_ha": 847
    },
    ...
  ]
}
GET/api/reports/{event_id}

Retrieve a complete report by its permanent event identifier.

PARAMETERS
event_idpathPermanent event identifier, e.g. OFW-2024-AMZ-001847
EXAMPLE REQUEST
GET /api/reports/OFW-2024-AMZ-001847
EXAMPLE RESPONSE
{
  "event_id": "OFW-2024-AMZ-001847",
  "schema_version": "1.0",
  "methodology_version": "HGE-OFW-v1.2",
  "generated_at": "2024-11-14T08:22:11Z",
  "location": { ... },
  "cause_attribution": { ... },
  "actor_hypothesis": { ... },
  "evidence_chain": [ ... ],
  "regulatory_flags": ["EUDR", "REDD+"],
  "confidence_score": 73,
  "confidence_lower": 61,
  "confidence_upper": 84,
  "recommended_actions": [ ... ],
  "evidence_hash": "sha256:a3f8c2..."
}
GET/api/reports/{event_id}/evidence

Return only the evidence chain for a given report. Useful for lightweight integrations.

PARAMETERS
event_idpathPermanent event identifier
EXAMPLE REQUEST
GET /api/reports/OFW-2024-AMZ-001847/evidence
EXAMPLE RESPONSE
{
  "event_id": "OFW-2024-AMZ-001847",
  "evidence_chain": [
    {
      "evidence_id": "EVD-001",
      "source": "sentinel2_ndvi",
      "data_type": "Multispectral NDVI delta",
      "date": "2024-11-08",
      "weight": 0.91,
      "description": "NDVI drop from 0.78 to 0.12 across 847 ha..."
    },
    ...
  ]
}
GET/api/reports/{event_id}/citation

Return a machine-readable citation for the report in APA and legal formats.

PARAMETERS
event_idpathPermanent event identifier
EXAMPLE REQUEST
GET /api/reports/OFW-2024-AMZ-001847/citation
EXAMPLE RESPONSE
{
  "event_id": "OFW-2024-AMZ-001847",
  "apa": "HGE Open Forest Watch (2024). Deforestation Event Report OFW-2024-AMZ-001847...",
  "legal": "HGE Open Forest Watch (2024), Event Report OFW-2024-AMZ-001847, evidence hash sha256:a3f8...",
  "evidence_hash": "sha256:a3f8c2d1..."
}
POST/api/alerts/subscribe

Subscribe to email or SMS alerts for a geographic bounding box. Free for NGOs and indigenous communities.

PARAMETERS
emailstringEmail address for alert delivery (optional if sms provided)
smsstringPhone number in E.164 format for SMS delivery (optional if email provided)
bboxobjectBounding box: { north, south, east, west } in decimal degrees
min_confidenceintegerMinimum confidence score for alerts (default: 60)
causesarrayCause types to alert on (default: all)
org_typestringngo | indigenous | researcher | commercial | compliance
EXAMPLE REQUEST
POST /api/alerts/subscribe
{
  "email": "monitoring@example-ngo.org",
  "bbox": { "north": 5, "south": -15, "east": -45, "west": -75 },
  "min_confidence": 65,
  "causes": ["agriculture", "mining"],
  "org_type": "ngo"
}
EXAMPLE RESPONSE
{
  "subscription_id": "sub_a3f8c2d1",
  "status": "active",
  "bbox": { "north": 5, "south": -15, "east": -45, "west": -75 },
  "tier": "free_ngo",
  "message": "You will receive alerts when new reports matching your criteria are published."
}
Python SDK (preview)
pip install ofw-client

from ofw import ForestWatchClient
client = ForestWatchClient(api_key="ofw_live_xxx")

reports = client.reports.list(cause="agriculture", flag="EUDR", min_confidence=70)
report  = client.reports.get("OFW-2024-AMZ-001847")