Lightning activity
Was there lightning near the point within the window? A yes/no answer with the strokes, and the signed PDF report.
Answers a concrete question: was there lightning activity near this point, within this time window? It settles a lightning claim without sending anyone to the field.
The data comes from the GLM (Geostationary Lightning Mapper) aboard the GOES satellites, published freely by NOAA. No geometry of yours is sent anywhere: the files are downloaded and filtered on our side.
Two steps
The evaluation is cheap and answers immediately. The report is optional: if the result already settles it for you, nothing needs to be issued.
sequenceDiagram
participant C as Your system
participant A as API
C->>A: POST /v1/lightning/evaluations
A-->>C: 200 · { evaluationId, detected, flashCount, nearest }
Note over C: if that is enough, you are done
C->>A: POST /v1/lightning/reports { evaluationId }
A-->>C: 202 · job enqueued
C->>A: GET /v1/reports/{id}/download
A-->>C: 302 · the PDF
Evaluate
curl -s -X POST "$BASE/v1/lightning/evaluations" \
-H "Authorization: Bearer $UCOTRON_API_KEY" \
-H "content-type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{
"lat": -2.76,
"lng": -60.52,
"eventAt": "2026-06-26T17:22:00Z",
"radiusKm": 20,
"windowMin": 15
}'| Field | What it is |
|---|---|
lat, lng | The point queried. Alternatively aoi_ref if the plot is already loaded |
eventAt | The declared event time, in UTC |
radiusKm | Search radius, up to 100 |
windowMin | Window on each side of eventAt, up to 180 |
The response carries detected, flashCount, the nearest stroke with its
distance and time offset, and the full list of strokes. The sign of the
offset matters: a stroke after the event you declared does not explain damage
that came before it.
Check coverage too. If it is out_of_coverage or no_data, a detected: false does not mean "there was no lightning": it means we could not look.
Issue the report
curl -s -X POST "$BASE/v1/lightning/reports" \
-H "Authorization: Bearer $UCOTRON_API_KEY" \
-H "content-type: application/json" \
-H "Idempotency-Key: $(uuidgen)" \
-d '{"evaluationId":"ev_lgt_…","locale":"en-US"}'Returns 202 with the job. Polling and downloading are covered in
Jobs, delivery and errors.
The PDF carries a satellite map with the queried point, the radius ring and each stroke marked and numbered as in the table; the detail of each one with distance, offset and optical energy; and the provenance block listing the GLM granules consulted.
What breaks
| What happens | Response | Why |
|---|---|---|
Missing Idempotency-Key | 428 | The evaluation consumes quota: without the key, a retry pays twice |
radiusKm over 100, or windowMin over 180 | 422 | The caps are in the contract; the body lists the field under issues |
eventAt in the future | 422 | There are no GLM granules for a moment that has not happened |
Issuing with an evaluationId that does not exist or belongs to another organization | the job fails | The error names the identifier that was not found |
| A date before ~2018 | coverage: out_of_coverage | The sensor did not exist yet; this is not a detected: false |
The full table of status codes is in Jobs, delivery and errors.
What it asserts, and what it does not
This is what makes the document defensible, and worth reading before promising anything to a policyholder:
- GLM detects total lightning activity optically from orbit. It does not distinguish cloud-to-ground from intra-cloud.
- Spatial resolution is ~8 km at nadir and ~14 km over Argentina. The reported position is the optical centroid of the flash, not the ground strike point.
- Detection efficiency ranges from ~70 % by day to ~90 % at night: a null detection does not prove the absence of lightning.
- Peak current (kA) and polarity are not reported: GLM does not measure them. Energy is optical, in joules, and serves as a relative proxy for intensity.
It verifies lightning activity in the vicinity. It is not a certificate of a ground strike on a specific asset.