Ucotron Cortex
Guides by flow

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

bash
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
  }'
FieldWhat it is
lat, lngThe point queried. Alternatively aoi_ref if the plot is already loaded
eventAtThe declared event time, in UTC
radiusKmSearch radius, up to 100
windowMinWindow 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

bash
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 happensResponseWhy
Missing Idempotency-Key428The evaluation consumes quota: without the key, a retry pays twice
radiusKm over 100, or windowMin over 180422The caps are in the contract; the body lists the field under issues
eventAt in the future422There are no GLM granules for a moment that has not happened
Issuing with an evaluationId that does not exist or belongs to another organizationthe job failsThe error names the identifier that was not found
A date before ~2018coverage: out_of_coverageThe 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.

On this page