Skip to content
All pages

Concepts

Pagination and filtering

Every listing answers a page at a time, in one envelope: the rows in data, the URLs in links, the numbers in meta.

Two parameters, one ceiling

page selects the page and per_page its size, up to 100. Ask for more and you get 100; ask for zero and you get one. The clamping is silent by design, and meta.per_page always states what was actually used, so read the envelope rather than assuming your request was taken literally.

Follow links.next until it is null instead of computing page numbers; the filters you sent travel with every link, already encoded.

Filters

Filtering listings state their parameters in the reference beside each endpoint, and the OpenAPI document carries the same list. Two conventions hold throughout: filters narrow and never change shape, and an unknown value is a 422 rather than a silently empty page wherever it could be mistaken for a real answer.

For incremental sync of activity, prefer since on the exposures listings: it cuts by when we last saw the record move, which is the cursor a nightly job wants.

Worked: the reports listing

A mixed page is the shape test for a consumer: the pending row carries every key the complete row does, with what it has not earned yet as null. Write the parser against this page and no later page surprises it.

List reports

GET /api/v1/reports

The team's reports, newest first.

reports:read paginated

Query parameters

status enum

Only reports in this state.

address string

Only reports whose address contains this text.

property string

Only reports filed under this saved property.

Answers

200

The answer.

Plus the shared refusals: 401, 402, 403, 404, 422 and 429, described on Errors.

GET /api/v1/reports
curl https://titanweather.com/api/v1/reports \
  -H "Authorization: Bearer $TITAN_API_TOKEN"
Response 200
{
    "data": [
        {
            "id": "0198b6c0-51a9-70f2-8e4d-93b2a7c15f60",
            "object": "report",
            "status": "complete",
            "address": {
                "query": "1428 Cedar Ridge Dr, Plano, TX 75023",
                "street": "1428 Cedar Ridge Dr",
                "city": "Plano",
                "state": "TX",
                "postal_code": "75023",
                "county": "Collin",
                "latitude": 33.0412,
                "longitude": -96.6996
            },
            "window": {
                "start": "2016-08-23",
                "end": "2026-08-23",
                "radius_miles": 5,
                "narrowed_by_plan": false
            },
            "property_id": "0198a3f2-6d7e-7b41-92c5-2f6a1c9d4e88",
            "event_count": 14,
            "observation_count": 41,
            "coverage": {
                "complete": true,
                "provisional": false,
                "summary": "All nine sources answered for the full period.",
                "sources_searched": [
                    "noaa_storm_events",
                    "iem_lsr",
                    "spc_reports",
                    "noaa_swdi",
                    "cocorahs"
                ]
            },
            "headline": "Hail to 2.75 in within 1 mile, most recently April 21, 2023.",
            "findings": [
                {
                    "family": "hail",
                    "family_label": "Hail",
                    "event_count": 9,
                    "peak_severity": "severe",
                    "evidence_kinds": [
                        "ground",
                        "radar"
                    ],
                    "evidence_labels": [
                        "Ground report",
                        "Radar detection"
                    ],
                    "dates": [
                        "2023-04-21",
                        "2021-04-28",
                        "2019-06-09"
                    ],
                    "most_recent": "2023-04-21",
                    "peak_hail_in": 2.75,
                    "peak_wind_mph": null,
                    "peak_tornado_ef": null,
                    "nearest_miles": 0.8,
                    "any_observed": true,
                    "confidence": "high",
                    "confidence_label": "High confidence",
                    "statement": "Nine hail events on record, the largest 2.75 in measured 0.8 miles away."
                }
            ],
            "failure_reason": null,
            "plan_tier": "professional",
            "layout": {
                "sections": [
                    "summary",
                    "findings",
                    "map",
                    "events"
                ],
                "imagery": [
                    "aerial",
                    "street_view"
                ],
                "elements": [
                    "key_figures"
                ],
                "map": null
            },
            "created_at": "2026-08-21T16:44:09Z",
            "generated_at": "2026-08-21T16:45:03Z",
            "pdf": {
                "status": "ready",
                "rendered_at": "2026-08-21T16:45:41Z"
            },
            "links": {
                "self": "https://titanweather.com/api/v1/reports/0198b6c0-51a9-70f2-8e4d-93b2a7c15f60",
                "events": "https://titanweather.com/api/v1/reports/0198b6c0-51a9-70f2-8e4d-93b2a7c15f60/events",
                "pdf": "https://titanweather.com/api/v1/reports/0198b6c0-51a9-70f2-8e4d-93b2a7c15f60/pdf"
            }
        },
        {
            "id": "0198b6c1-22e4-7f88-a1c9-5d40b7e2913a",
            "object": "report",
            "status": "pending",
            "address": {
                "query": "1428 Cedar Ridge Dr, Plano, TX 75023",
                "street": null,
                "city": null,
                "state": null,
                "postal_code": null,
                "county": null,
                "latitude": null,
                "longitude": null
            },
            "window": {
                "start": "2016-08-23",
                "end": "2026-08-23",
                "radius_miles": 5,
                "narrowed_by_plan": false
            },
            "property_id": null,
            "event_count": 0,
            "observation_count": 0,
            "coverage": {
                "complete": false,
                "provisional": false,
                "summary": null,
                "sources_searched": []
            },
            "headline": null,
            "findings": null,
            "failure_reason": null,
            "plan_tier": "professional",
            "layout": {
                "sections": [
                    "summary",
                    "findings",
                    "map",
                    "events"
                ],
                "imagery": [
                    "aerial",
                    "street_view"
                ],
                "elements": [
                    "key_figures"
                ],
                "map": null
            },
            "created_at": "2026-08-23T14:02:11Z",
            "generated_at": null,
            "pdf": {
                "status": null,
                "rendered_at": null
            },
            "links": {
                "self": "https://titanweather.com/api/v1/reports/0198b6c1-22e4-7f88-a1c9-5d40b7e2913a",
                "events": null,
                "pdf": null
            }
        }
    ],
    "links": {
        "first": "https://titanweather.com/api/v1/reports?page=1",
        "last": "https://titanweather.com/api/v1/reports?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "path": "https://titanweather.com/api/v1/reports",
        "per_page": 25,
        "to": 2,
        "total": 2
    }
}
esc
move open 72 places