Skip to content
All pages

Reference

Territories

Ground the team watches, authored as your own GeoJSON, a radius around a point, or named places.

Create a territory

POST /api/v1/territories

Draw a territory: a GeoJSON shape, a radius, or named places.

territories:write Idempotency-Key honoured

Body

name string required

What the territory is called on the map and in alerts.

kind string required

How the shape is authored: polygon (send geometry), radius (send an address or latitude/longitude plus radius_miles), or places (send place_ids plus radius_miles).

status string

The watch state to start in: watching (the default), paused or archived.

colour string

The swatch it is drawn in: petrol, slate, moss, rust, plum or sand.

notes string

Free text, kept with the territory.

geometry array

A GeoJSON Polygon or MultiPolygon, or a Feature wrapping one. The shape watched is exactly the shape sent, never simplified or clamped.

address string

For a radius territory: the address at its centre, located for you.

latitude number

For a radius territory: the centre latitude, instead of an address.

longitude number

For a radius territory: the centre longitude, instead of an address.

radius_miles number

For radius and places territories: how far the territory reaches.

place_ids array

For a places territory: ids from GET /api/v1/places.

Answers

200

Replayed. This Idempotency-Key was honoured before; the earlier answer is returned again, with an Idempotent-Replay: true header.

201

Created.

409

This Idempotency-Key was already used for a different request, or its first request is still being processed. A retry must resend the request it is retrying.

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

POST /api/v1/territories
curl -X POST https://titanweather.com/api/v1/territories \
  -H "Authorization: Bearer $TITAN_API_TOKEN" \
  -H "Idempotency-Key: collin-county-north-v1" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Plano North",
    "kind": "polygon",
    "geometry": {
        "type": "Polygon",
        "coordinates": [
            [
                [
                    -96.75,
                    33.05
                ],
                [
                    -96.62,
                    33.05
                ],
                [
                    -96.62,
                    33.13
                ],
                [
                    -96.75,
                    33.13
                ],
                [
                    -96.75,
                    33.05
                ]
            ]
        ]
    }
}'
Response 201
{
    "data": {
        "id": "0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
        "object": "territory",
        "name": "Plano North",
        "kind": "polygon",
        "description": "drawn on the map",
        "definition": [],
        "status": "watching",
        "area_sq_miles": 68.4,
        "color": "#1F6B82",
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    [
                        -96.75,
                        33.05
                    ],
                    [
                        -96.62,
                        33.05
                    ],
                    [
                        -96.62,
                        33.13
                    ],
                    [
                        -96.75,
                        33.13
                    ],
                    [
                        -96.75,
                        33.05
                    ]
                ]
            ]
        },
        "centre": {
            "latitude": 33.09,
            "longitude": -96.685
        },
        "bounds": {
            "west": -96.75,
            "south": 33.05,
            "east": -96.62,
            "north": 33.13
        },
        "notes": null,
        "last_activity_on": "2023-04-21",
        "created_at": "2026-06-02T19:30:00Z",
        "updated_at": "2026-08-21T16:44:09Z",
        "links": {
            "self": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
            "exposures": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures"
        }
    }
}

Quote a territory

POST /api/v1/territories/quote

What a shape would be, and whether the plan has room for it, without saving it.

territories:write

Body

name string required

What the territory is called on the map and in alerts.

kind string required

How the shape is authored: polygon (send geometry), radius (send an address or latitude/longitude plus radius_miles), or places (send place_ids plus radius_miles).

status string

The watch state to start in: watching (the default), paused or archived.

colour string

The swatch it is drawn in: petrol, slate, moss, rust, plum or sand.

notes string

Free text, kept with the territory.

geometry array

A GeoJSON Polygon or MultiPolygon, or a Feature wrapping one. The shape watched is exactly the shape sent, never simplified or clamped.

address string

For a radius territory: the address at its centre, located for you.

latitude number

For a radius territory: the centre latitude, instead of an address.

longitude number

For a radius territory: the centre longitude, instead of an address.

radius_miles number

For radius and places territories: how far the territory reaches.

place_ids array

For a places territory: ids from GET /api/v1/places.

Answers

200

The answer.

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

POST /api/v1/territories/quote
curl -X POST https://titanweather.com/api/v1/territories/quote \
  -H "Authorization: Bearer $TITAN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "kind": "radius",
    "address": "Plano, TX",
    "radius_miles": 10
}'
Response 200
{
    "object": "territory_quote",
    "kind": "radius",
    "geometry": {
        "type": "MultiPolygon",
        "coordinates": [
            [
                "..."
            ]
        ]
    },
    "centre": {
        "latitude": 33.0198,
        "longitude": -96.6989
    },
    "bounds": {
        "west": -96.8722,
        "south": 32.8747,
        "east": -96.5256,
        "north": 33.1649
    },
    "area_sq_miles": 314.2,
    "allowed": true,
    "notice": null
}

List territories

GET /api/v1/territories

The ground the team watches.

territories:read paginated

Query parameters

status enum

Only territories in this watch state.

Answers

200

The answer.

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

GET /api/v1/territories
curl https://titanweather.com/api/v1/territories \
  -H "Authorization: Bearer $TITAN_API_TOKEN"
Response 200
{
    "data": [
        {
            "id": "0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
            "object": "territory",
            "name": "Plano North",
            "kind": "polygon",
            "description": "drawn on the map",
            "definition": [],
            "status": "watching",
            "area_sq_miles": 68.4,
            "color": "#1F6B82",
            "geometry": {
                "type": "Polygon",
                "coordinates": [
                    [
                        [
                            -96.75,
                            33.05
                        ],
                        [
                            -96.62,
                            33.05
                        ],
                        [
                            -96.62,
                            33.13
                        ],
                        [
                            -96.75,
                            33.13
                        ],
                        [
                            -96.75,
                            33.05
                        ]
                    ]
                ]
            },
            "centre": {
                "latitude": 33.09,
                "longitude": -96.685
            },
            "bounds": {
                "west": -96.75,
                "south": 33.05,
                "east": -96.62,
                "north": 33.13
            },
            "notes": null,
            "last_activity_on": "2023-04-21",
            "created_at": "2026-06-02T19:30:00Z",
            "updated_at": "2026-08-21T16:44:09Z",
            "links": {
                "self": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
                "exposures": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures"
            }
        }
    ],
    "links": {
        "first": "https://titanweather.com/api/v1/territories?page=1",
        "last": "https://titanweather.com/api/v1/territories?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "path": "https://titanweather.com/api/v1/territories",
        "per_page": 25,
        "to": 1,
        "total": 1
    }
}

Retrieve a territory

GET /api/v1/territories/{territory}

One territory, with its shape as GeoJSON.

territories:read

Path parameters

territory

The territory id, a uuid from a create or list response.

Answers

200

The answer.

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

GET /api/v1/territories/{territory}
curl https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31 \
  -H "Authorization: Bearer $TITAN_API_TOKEN"
Response 200
{
    "data": {
        "id": "0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
        "object": "territory",
        "name": "Plano North",
        "kind": "polygon",
        "description": "drawn on the map",
        "definition": [],
        "status": "watching",
        "area_sq_miles": 68.4,
        "color": "#1F6B82",
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    [
                        -96.75,
                        33.05
                    ],
                    [
                        -96.62,
                        33.05
                    ],
                    [
                        -96.62,
                        33.13
                    ],
                    [
                        -96.75,
                        33.13
                    ],
                    [
                        -96.75,
                        33.05
                    ]
                ]
            ]
        },
        "centre": {
            "latitude": 33.09,
            "longitude": -96.685
        },
        "bounds": {
            "west": -96.75,
            "south": 33.05,
            "east": -96.62,
            "north": 33.13
        },
        "notes": null,
        "last_activity_on": "2023-04-21",
        "created_at": "2026-06-02T19:30:00Z",
        "updated_at": "2026-08-21T16:44:09Z",
        "links": {
            "self": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
            "exposures": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures"
        }
    }
}

Update a territory

PATCH /api/v1/territories/{territory}

Change a territory's name, its shape, or both.

territories:write

Path parameters

territory

The territory id, a uuid from a create or list response.

Body

name string

What the territory is called on the map and in alerts.

kind string

How the shape is authored: polygon (send geometry), radius (send an address or latitude/longitude plus radius_miles), or places (send place_ids plus radius_miles).

status string

The watch state to start in: watching (the default), paused or archived.

colour string

The swatch it is drawn in: petrol, slate, moss, rust, plum or sand.

notes string

Free text, kept with the territory.

geometry array

A GeoJSON Polygon or MultiPolygon, or a Feature wrapping one. The shape watched is exactly the shape sent, never simplified or clamped.

address string

For a radius territory: the address at its centre, located for you.

latitude number

For a radius territory: the centre latitude, instead of an address.

longitude number

For a radius territory: the centre longitude, instead of an address.

radius_miles number

For radius and places territories: how far the territory reaches.

place_ids array

For a places territory: ids from GET /api/v1/places.

Answers

200

The answer.

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

PATCH /api/v1/territories/{territory}
curl -X PATCH https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31 \
  -H "Authorization: Bearer $TITAN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "name": "Plano North Storm Book"
}'
Response 200
{
    "data": {
        "id": "0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
        "object": "territory",
        "name": "Plano North",
        "kind": "polygon",
        "description": "drawn on the map",
        "definition": [],
        "status": "watching",
        "area_sq_miles": 68.4,
        "color": "#1F6B82",
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    [
                        -96.75,
                        33.05
                    ],
                    [
                        -96.62,
                        33.05
                    ],
                    [
                        -96.62,
                        33.13
                    ],
                    [
                        -96.75,
                        33.13
                    ],
                    [
                        -96.75,
                        33.05
                    ]
                ]
            ]
        },
        "centre": {
            "latitude": 33.09,
            "longitude": -96.685
        },
        "bounds": {
            "west": -96.75,
            "south": 33.05,
            "east": -96.62,
            "north": 33.13
        },
        "notes": null,
        "last_activity_on": "2023-04-21",
        "created_at": "2026-06-02T19:30:00Z",
        "updated_at": "2026-08-21T16:44:09Z",
        "links": {
            "self": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
            "exposures": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures"
        }
    }
}

Pause or resume a territory

POST /api/v1/territories/{territory}/status

Pause or resume watching a territory.

territories:write

Path parameters

territory

The territory id, a uuid from a create or list response.

Body

status string required

The watch state to move to: watching, paused or archived.

Answers

200

The answer.

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

POST /api/v1/territories/{territory}/status
curl -X POST https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/status \
  -H "Authorization: Bearer $TITAN_API_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{
    "status": "paused"
}'
Response 200
{
    "data": {
        "id": "0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
        "object": "territory",
        "name": "Plano North",
        "kind": "polygon",
        "description": "drawn on the map",
        "definition": [],
        "status": "paused",
        "area_sq_miles": 68.4,
        "color": "#1F6B82",
        "geometry": {
            "type": "Polygon",
            "coordinates": [
                [
                    [
                        -96.75,
                        33.05
                    ],
                    [
                        -96.62,
                        33.05
                    ],
                    [
                        -96.62,
                        33.13
                    ],
                    [
                        -96.75,
                        33.13
                    ],
                    [
                        -96.75,
                        33.05
                    ]
                ]
            ]
        },
        "centre": {
            "latitude": 33.09,
            "longitude": -96.685
        },
        "bounds": {
            "west": -96.75,
            "south": 33.05,
            "east": -96.62,
            "north": 33.13
        },
        "notes": null,
        "last_activity_on": "2023-04-21",
        "created_at": "2026-06-02T19:30:00Z",
        "updated_at": "2026-08-21T16:44:09Z",
        "links": {
            "self": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
            "exposures": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures"
        }
    }
}

List activity in a territory

GET /api/v1/territories/{territory}/exposures

Every storm day and warning inside this territory.

territories:read paginated

Path parameters

territory

The territory id, a uuid from a create or list response.

Query parameters

since string

Only activity seen after this moment. The cursor for an incremental sync.

from string

Only activity on or after this event date.

to string

Only activity on or before this event date.

kind enum

Archived record, or live warning.

open boolean

Only activity nobody has acknowledged or dismissed.

subject enum

Only activity at one kind of watched place.

min_measured_in number

Only activity whose largest measured hail meets this size, in inches.

Answers

200

The answer.

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

GET /api/v1/territories/{territory}/exposures
curl https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures \
  -H "Authorization: Bearer $TITAN_API_TOKEN"
Response 200
{
    "data": [
        {
            "id": 48213,
            "object": "exposure",
            "kind": "record",
            "date": "2023-04-21",
            "subject": {
                "id": "0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
                "object": "territory",
                "name": "Plano North"
            },
            "headline": "Hail to 2.75 in measured 0.8 miles away.",
            "reports": 6,
            "sources": 3,
            "families": {
                "hail": 5,
                "wind": 1,
                "tornado": 0,
                "other": 0
            },
            "largest_measured_in": 2.75,
            "largest_detected_in": 2.1,
            "max_gust_mph": 61,
            "nearest_miles": 0.8,
            "observed": true,
            "provisional": false,
            "evidence": [
                "ground",
                "radar"
            ],
            "record_ids": [
                188204,
                188207,
                188213
            ],
            "warning": null,
            "first_seen_at": "2023-04-22T09:00:12Z",
            "last_seen_at": "2023-05-02T09:00:04Z",
            "notified_at": "2023-04-22T09:01:00Z",
            "acknowledged_at": null,
            "dismissed_at": null,
            "report_id": null,
            "links": {
                "self": "https://titanweather.com/api/v1/exposures/48213",
                "subject": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31",
                "report": null
            }
        }
    ],
    "links": {
        "first": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures?page=1",
        "last": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures?page=1",
        "prev": null,
        "next": null
    },
    "meta": {
        "current_page": 1,
        "from": 1,
        "last_page": 1,
        "path": "https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31/exposures",
        "per_page": 25,
        "to": 1,
        "total": 1
    }
}

Look up places

GET /api/v1/places

Look up the named places a territory can be built from.

territories:read

Query parameters

search string required

A place name, optionally narrowed by state: Plano, TX.

Answers

200

The answer.

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

GET /api/v1/places
curl https://titanweather.com/api/v1/places?search=Plano%2C%20TX \
  -H "Authorization: Bearer $TITAN_API_TOKEN"
Response 200
{
    "object": "list",
    "data": [
        {
            "id": 4861,
            "object": "place",
            "name": "Plano",
            "full_name": "Plano, TX",
            "state": "TX",
            "latitude": 33.0198,
            "longitude": -96.6989
        }
    ]
}

Delete a territory

DELETE /api/v1/territories/{territory}

Remove a territory.

territories:write

Path parameters

territory

The territory id, a uuid from a create or list response.

Answers

204

Deleted.

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

DELETE /api/v1/territories/{territory}
curl -X DELETE https://titanweather.com/api/v1/territories/0198c2d8-9b34-7c05-b1e7-64d0f8a92c31 \
  -H "Authorization: Bearer $TITAN_API_TOKEN"
Response 204

No body. The territory and its recorded activity are gone.

esc
move open 72 places